איך מחשב עולה מרגע הלחיצה על הכפתור ועד מסך ההתחברות¶
בין הרגע שבו אתם לוחצים על כפתור ההפעלה לבין הרגע שבו אתם מקלידים את הסיסמה שלכם, קורים עשרות שלבים שרוב האנשים אף פעם לא עוצרים לחשוב עליהם. זה תהליך מסודר, מדויק, ומרתק כשמפרקים אותו לחלקים. הפוסט הזה מחבר יחד את כל החלקים - מהחומרה הכי בסיסית ועד לסביבת המשתמש שמופיעה על המסך.
הרגע הראשון - הכל מתחיל בחומרה¶
ברגע שאתם לוחצים על כפתור ההפעלה, המחשב עדיין לא "יודע" שום דבר. אין עדיין מערכת הפעלה, אין תוכניות רצות, אין כלום. יש רק חשמל שמתחיל לזרום, ומעבד שמתחיל להריץ הוראות מכתובת קבועה מראש בזיכרון - כתובת שנקבעה בתכנון החומרה עצמה, עוד לפני שהמחשב שלכם קיים בכלל.
שם, בכתובת הזאת, נמצא ה-firmware - קוד מיוחד ששוכן על שבב נפרד בלוח האם, ולא על הדיסק הקשיח שלכם. בעבר הפירמוור הזה היה נקרא BIOS, והיום ברוב המחשבים המודרניים הוא נקרא UEFI, גרסה מתקדמת ומורכבת יותר של אותו רעיון.
הבדיקה הראשונה - POST¶
השלב הראשון שה-firmware מבצע נקרא POST, ראשי תיבות של Power-On Self-Test, כלומר בדיקה עצמית בהפעלה. זו סדרה של בדיקות מהירות שמוודאות שהחומרה הבסיסית של המחשב תקינה - שיש זיכרון RAM שעובד, שהמעבד מגיב, שיש התקני אחסון מחוברים.
אם אי פעם שמעתם מחשב "מצפצף" בהפעלה בלי להעלות תמונה על המסך, זה בדיוק ה-POST שמנסה להגיד לכם, בקוד צפצופים, שמשהו בחומרה הבסיסית לא תקין. אם הכל עובר בהצלחה, ה-firmware ממשיך לשלב הבא בשקט, ורוב האנשים אף פעם לא שמים לב שהוא בכלל קרה.
העברת השליטה - מ-Firmware ל-Bootloader¶
אחרי שה-firmware מוודא שהחומרה הבסיסית תקינה, הוא מחפש התקן אחסון עם קוד הפעלה תקין, ומעביר אליו את השליטה. הקוד הזה הוא ה-bootloader, תוכנית קטנה ומיוחדת שהמטרה היחידה שלה היא למצוא את הקרנל של מערכת ההפעלה, לטעון אותו לזיכרון, ולהעביר אליו את השליטה בתורו.
בלינוקס, הדוגמה הכי מוכרת ל-bootloader היא GRUB, ואם אי פעם ראיתם תפריט בחירה בין כמה מערכות הפעלה כשהמחשב עולה, זה בדיוק הוא בפעולה. ה-bootloader עצמו לא עושה שום דבר "חכם" מעבר לזה - הוא לא מריץ אפליקציות, לא מנהל משתמשים, הוא רק דואג שהקרנל הנכון ייטען למקום הנכון בזיכרון.
הקרנל מתעורר¶
ברגע שהקרנל נטען לזיכרון ומקבל את השליטה, מתחיל השלב שבו מערכת ההפעלה עצמה בעצם "נולדת". הקרנל מאתחל את עצמו, בונה מבני נתונים פנימיים שהוא יזדקק להם, ומזהה את שאר החומרה שמחוברת למחשב - כרטיס המסך, כרטיס הרשת, התקני האחסון, ועוד. לכל התקן כזה, הקרנל טוען דרייבר מתאים שיודע "לדבר" איתו.
זה גם השלב שבו הקרנל מקים את מערכת ניהול הזיכרון והמתזמן שאחראי על חלוקת זמן המעבד בין תהליכים שונים - שני מנגנונים בסיסיים שכל שאר מערכת ההפעלה תלויה בהם.
אתחול תהליכים ושירותים¶
ברגע שהקרנל עצמו פעיל, הוא לא ממשיך להריץ הכל בעצמו - הוא מפעיל תהליך ראשון, שבמערכות לינוקס מודרניות בדרך כלל נקרא systemd, ומעביר לו את האחריות על כל מה שקורה מכאן והלאה. התהליך הזה הוא ה"הורה" של כל שאר התהליכים במערכת.
מתפקידו של התהליך הראשוני להעלות שירותי מערכת בסדר הנכון - שירות הרשת, שירותי אחסון, שירותי לוגים, ועוד עשרות שירותים קטנים שכל אחד תלוי בקודמים לו. זה בדיוק השלב שאורך הכי הרבה זמן מבחינת המשתמש, ולכן הוא זה שאתם רואים כ"מסך טעינה" עם פס התקדמות או לוגו.
ולבסוף - סביבת המשתמש¶
רק אחרי שכל שירותי הליבה עלו בהצלחה, מגיע התור של סביבת המשתמש - שירות ההתחברות, ממשק גרפי אם יש כזה, וכל מה שבסוף מאפשר לכם להקליד סיסמה ולהיכנס למערכת. ברגע שאתם מתחברים, כל התהליך הארוך והמורכב הזה כבר הסתיים לגמרי, ומה שנשאר זו רק סביבת עבודה יציבה שמחכה לפקודות שלכם.
למה שווה להבין את כל השרשרת¶
מה שיפה בתהליך הזה הוא שכל שלב תלוי לחלוטין בשלב שקדם לו - אי אפשר לדלג, ואי אפשר לשנות את הסדר. בקורס ליבת המחשב אנחנו עוברים על כל אחד מהשלבים האלה בנפרד ולעומק, כי הבנה של השרשרת המלאה היא בדיוק מה שהופך אתכם ממישהו שמכיר מושגים בודדים למישהו שמבין איך מחשב שלם עובד מקצה לקצה.
לסיכום¶
מהרגע שהחשמל מתחיל לזרום ועד מסך ההתחברות, המחשב עובר מסע מסודר של העברת שליטה - מהחומרה, ל-firmware, ל-bootloader, לקרנל, ולבסוף לסביבת המשתמש. כל שלב בונה על הקודם לו, וכל תקלה באחד מהם עוצרת את כל התהליך. פעם הבאה שהמחשב שלכם עולה תוך כמה שניות, זכרו שברקע קרתה שרשרת שלמה ומדויקת של אירועים.
בואו לדבר על זה בדיסקורד - יש שם אנשים שאוהבים לפרק תהליכים כאלה לגורמים בדיוק כמו שעשינו כאן.