לדלג לתוכן

הקרנל של לינוקס מוסבר בפשטות - התוכנה שמנהלת את כל השאר

כשאתם פותחים טלפון אנדרואיד, גולשים באתר שרץ על שרת בענן, או פשוט מדליקים מחשב עם לינוקס, יש תוכנית אחת שרצה לפני כל השאר ומנהלת את כל מה שקורה מתחתיה. זה הקרנל, ורוב האנשים שמשתמשים בו כל יום אף פעם לא עצרו להבין מה הוא בעצם עושה.

אז מה זה בעצם קרנל

קרנל הוא התוכנה הראשונה שרצה כשמדליקים מחשב, אחרי תהליך האתחול הראשוני. הוא לא עוד אפליקציה כמו הדפדפן או עורך הטקסט - הוא הליבה שמנהלת את כל החומרה בפועל, ומספקת לכל שאר התוכנות דרך מסודרת לגשת אליה.

תחשבו עליו כמו על מנהל בניין. אתם לא הולכים ומחברים ישירות לצנרת המים או לחשמל הראשי של הבניין - אתם פונים למנהל, והוא זה שמתאם ומחלק את המשאבים בין כל הדיירים. בדיוק ככה תוכנה רגילה לא נוגעת ישירות בזיכרון הפיזי או בדיסק - היא מבקשת מהקרנל, והוא זה שמחליט ומבצע.

למה יש בכלל הפרדה כזאת

ההפרדה הזאת נקראת הפרדה בין מרחב משתמש - user space, לבין מרחב הקרנל - kernel space, וזו לא בחירה שרירותית, זו הגנה קריטית. אם תוכנה רגילה הייתה יכולה לגעת ישירות בחומרה בלי מתווך, באג קטן בדפדפן היה יכול להפיל את כל המחשב. במקום זה, כל תוכנה שרצה במרחב המשתמש חייבת לבקש מהקרנל לבצע פעולות בשמה, דרך מנגנון שנקרא syscall, קריאת מערכת. לפתוח קובץ, להקצות זיכרון, לשלוח נתונים ברשת - כל אלה עוברים דרך הקרנל.

התוצאה היא שתוכנה שקורסת, בדרך כלל תקרוס לבד ותיסגר, בלי להפיל את שאר המערכת. הקרנל שומר על עצמו מוגן, וכך גם על כל שאר התהליכים שרצים.

מה בדיוק הקרנל אחראי עליו

לקרנל יש כמה תפקידים מרכזיים שרצים כל הזמן ברקע:

  • תזמון תהליכים - Scheduler. בכל רגע נתון רצים במחשב שלכם עשרות או מאות תהליכים, אבל למעבד יש רק כמה ליבות. הסקדולר הוא זה שמחליט איזה תהליך רץ עכשיו, לכמה זמן, ומתי להחליף לתהליך הבא. הוא עושה את זה כל כך מהר שנדמה לכם שהכל רץ במקביל.
  • ניהול זיכרון. הקרנל אחראי להקצות זיכרון לכל תהליך, לוודא שתהליך אחד לא יכול לגשת לזיכרון של תהליך אחר, ולנהל את כל המנגנון המורכב שהופך זיכרון פיזי מוגבל לזיכרון וירטואלי שנראה כמעט אינסופי לכל תוכנה.
  • שכבת קבצים וירטואלית - VFS. לינוקס מתייחס כמעט לכל דבר כאל קובץ, גם דיסקים, גם התקנים, וגם ערוצי תקשורת. שכבה אחידה בקרנל מתרגמת את הפעולות האלה למערכת הקבצים האמיתית שרצה מתחת.
  • דרייברים. אלה חתיכות קוד שמדברות עם חומרה ספציפית, כרטיס רשת, כרטיס מסך, דיסק. בלינוקס, דרייברים בדרך כלל נטענים כמודולים בזמן ריצה, כך שהקרנל נשאר מודולרי, גם אם הוא בבסיסו קרנל מונוליתי, כלומר כל הרכיבים המרכזיים שלו רצים באותו מרחב זיכרון אחד.

למה דווקא הקרנל של לינוקס בכל מקום

קרנל לינוקס הוא קוד פתוח, מה שאומר שכל אחד יכול לקרוא אותו, לשנות אותו, ולהתאים אותו לצרכים שלו. בגלל זה הוא לא רק במחשבים ניידים - הוא רץ על רוב שרתי האינטרנט בעולם, על מיליארדי מכשירי אנדרואיד, ועל ציוד רשת, מכוניות ומכשירים משובצים בכל מקום. יש לכם קרוב לוודאי כמה עשרות מכשירים בבית שמריצים איזושהי גרסה שלו בלי שידעתם.

זה גם הופך אותו לאחד הפרויקטים הכי מרתקים ללימוד לעומק, כי כל השורות שמנהלות את המחשב שלכם פתוחות לקריאה. בקורס ליבת המחשב אנחנו נכנסים בדיוק לשם - איך הסקדולר עובד, איך ניהול הזיכרון בפועל, איך קריאות מערכת עוברות בין מרחב המשתמש לקרנל, ואיך לדבג את כל זה כשמשהו משתבש.

ואם משהו לא ברור באמצע, יש קהילה שלמה שכבר עברה את זה.

הצטרפו לקהילה בדיסקורד

לסיכום

הקרנל הוא לא עוד תוכנה, הוא המנהל שמתאם בין כל שאר התוכנות לבין החומרה עצמה. הוא מחליט מי מריץ מה על המעבד, מי מקבל כמה זיכרון, ואיך גישה לקבצים ולהתקנים עובדת בבטחה. ברגע שאתם מבינים את זה, כל מה שקורה על המסך שלכם, מהטלפון ועד השרת שמריץ את האתר שאתם גולשים בו, מתחיל להיראות הרבה פחות כמו קסם.