גרעין (מערכות הפעלה)
סוגי גרעין > מיקרו-גרעין

מיקרו-גרעין (microkernel, µK) הוא מונח המתאר גישה לתכנון מערכות הפעלה, בה הפונקציונליות של המערכת מועברת החוצה מה"גרעין" המסורתי, אל קבוצה של "שרתים" אשר מתקשרים דרך גרעין "מינימלי", ובכך משאירה כמה שניתן פחות ב"מרחב המערכת" וכמה שיותר ב"מרחב המשתמש". מיקרו-גרעין אשר מתוכנן עבור פלטפורמה או מכשיר ספציפי, תמיד יכיל אך ורק את הדרוש לה על מנת לפעול. תפישת המיקרו-גרעין כוללת הגדרה של אבסטרקציה פשוטה של החומרה, ביחד עם קבוצה של פרימיטיבים או קריאות מערכת כדי לממש שירותי מערכת הפעלה מינימליים כגון ניהול זיכרון, ריבוי משימות ותקשורת בין תהליכים. שירותים אחרים, כולל אלו שבדרך כלל מסופקים על ידי הגרעין, כמו רישות (networking), ממומשים בתוכניות שרצות במרחב המשתמש, המכונות שרתים. מיקרו-גרעינים הם פשוטים יותר לתחזוקה לעומת גרעינים מונוליטים, אבל המספר הגדול של קריאות מערכת והחלפות הקשר עלול להאט את המערכת מכיוון שהן בדרך כלל דורשות יותר משאבים לעומת קריאות פשוטות של פונקציות.
רק החלקים שבאמת חייבים לעבוד במצב עם הרשאות מלאות (privileged mode) נמצאים במרחב הגרעין: תקשורת בין תהליכים (IPC), המתזמן הבסיסי או פרימיטיבים של תזמון, ניהול זיכרון בסיסי, פרימיטיבים בסיסיים לקלט/פלט. במקרה זה חלקים קריטיים רבים רצים במרחב המשתמש: המתזמן המלא, ניהול זיכרון, מערכות קבצים ומחסניות רשת. מיקרו-גרעינים הומצאו בתגובה לעיצוב ה"מונוליטי" של גרעינים, שבו כל הפונקציונליות של המערכת הוכנסה לתוך תוכנה סטטית אחת, אשר רצה במצב "מערכת" מיוחד של המעבד. במיקרו-גרעין מתבצעות רק המשימות הבסיסיות ביותר, כמו היכולת לגשת לחלק מרכיבי החומרה (לא בהכרח אל כולם), ניהול זיכרון, וניהול העברת מסרים בין תהליכים. מהיתרונות של מיקרו-גרעינים:
בדרך כלל התחזוקה פשוטה יותר.
ניתן לבחון תיקונים חדשים ביחידה נפרדת, ולאחר מכן להכניס אותם במקום יחידה קודמת במערכת שכבר נמצאת בייצור (production).
זמן פיתוח מהיר יותר.
במערכות הפעלה רבות יש קוד גרעין מודולרי שאפשר להוריד ולטעון ללא צורך באתחול הגרעין.
עמידות גבוהה יותר בתקלות (שרידות; persistence). ניתן להריץ יותר מיחידה אחת ובמקביל, ואם אחת משתבשת, להפעיל את השנייה.
מרבית המיקרו-גרעינים משתמשים במערכת מסוג כלשהו להעברת מסרים על מנת לטפל בהעברת בקשות משרת אחד לשני. מערכת העברת המסרים בדרך כלל עובדת על בסיס פורטים עם המיקרו-גרעין. לדוגמה, אם נשלחת בקשה לעוד זיכרון, נפתח פורט עם המיקרו-גרעין והבקשה נשלחת דרכו. לאחר שהבקשה הגיעה למיקרו-גרעין, הצעדים הם זהים לקריאות מערכת. ההיגיון שעמד מאחורי תכנון כזה, היה בכך שהוא ייצור מודולריות בארכיטקטורת המערכת, אשר תוביל למערכת נקייה יותר, קלה יותר לניפוי שגיאות או לשינוי דינאמי, ניתנת להתאמה אישית לפי צורכי המשתמשים, ובעלת ביצועים טובים יותר.
אף על פי שמיקרו-גרעינים הם קטנים מאוד בפני עצמם, בשילוב עם כל קוד העזר עבורם, לעיתים קרובות הם הופכים להיות גדולים יותר מגרעינים מונוליטים. התומכים בגרעינים מונוליטים מציינים גם שהמבנה הדו-שכבתי של מערכות מיקרו-גרעין, שבו מרבית ממערכת ההפעלה לא מתקשרת באופן ישיר עם החומרה, מביא לירידה ביעילות המערכת. גרעינים מסוג זה מספקים רק את השירותים המינימליים כגון הגדרת מרחבי כתובות, תקשורת בין תהליכים, וניהול תהליכים. משימות אחרות כמו הרצת התהליכים של החומרה, לא מטופלות באופן ישיר על ידי מיקרו-גרעינים. התומכים של מיקרו-גרעינים מציינים כי החיסרון הקיים בגרעינים מונוליטים הוא ששגיאה בגרעין עלולה לגרום למערכת כולה לקרוס. לעומת זאת במיקרו-גרעין, אם אחד מתהליכי הגרעין מתרסק, עדיין אפשרי למנוע את קריסת המערכת כולה, פשוט על ידי הפעלה מחדש של השירות שגרם לשגיאה. החשיבות של היתרון הזה מוטלת בספק, מפני שמערכות הפעלה עם גרעינים מונוליטים, כמו לינוקס, הפכו ליציבים ביותר ויכולים לרוץ במשך שנים מבלי לקרוס.
שירותים אחרים המסופקים על ידי הגרעין, כמו עבודה ברשת (networking), ממומשים בתוכניות למרחב המשתמש, המכונות שרתים (servers). השרתים מאפשרים לשנות את מערכת ההפעלה פשוט על ידי הפעלה ועצירה של תוכניות. לדוגמה, מכונה אשר אינה תומכת בעבודה ברשת, לא מפעילה את שרת ה-networking. מיקרו-גרעינים בדרך כלל מציגים ביצועים נחותים ביחס לעיצובים המסורתיים בגלל התקורה של המעברים אל ומחוץ לגרעין על מנת להעביר נתונים בין התוכניות והשרתים השונים. בעיה זו טופלה בגרסאות חדשות יותר של הגרעין. עם זאת קיימים חסרונות נוספים במיקרו-גרעינים:
צריכת זיכרון גבוהה.
נדרשות יותר תוכנות להתממשקות, מה שיכול להוביל לירידה בביצועים.
באגים בהעברת מסרים יכולים להיות קשים יותר לתיקון בגלל המסלול הארוך יותר שעל המסרים לעבור לעומת המצב של עותק יחיד בגרעין מונוליטי.
ניהול תהליכים עשוי להיות מאוד מסובך.
מיקרו-גרעין מאפשר לממש את יתר מערכת ההפעלה כתוכנית יישומים רגילה, הנכתבת בשפה עילית. כמו כן ניתן להריץ מערכות הפעלה שונות על גבי אותו הגרעין שאיננו משתנה. ניתן להחליף דינאמית בין מערכות הפעלה ושתהיה יותר ממערכת אחת פעילה בו זמנית.
הגישה של מיקרו-גרעינים הייתה נפוצה מאוד בחוגי האקדמיה בשנות השמונים והתשעים של המאה העשרים[דרוש מקור], בשנים שבהן תוכננו רבות ממערכות ההפעלה שמשתמשים בהן היום. כתוצאה מכך הן מערכת ההפעלה Windows NT (שממנה נוצרו כל הגרסאות השולחניות המודרניות של מערכת חלונות) והן מערכת Mac OS X שנמצאת במחשבי מקינטוש מודרניים, תוכננו במקור כמערכות מיקרו-גרעין[דרוש מקור]. אולם בהמשך נזנחה הגישה הזו ובשתי המערכות הללו יש בפועל גרעין היברידי, שמשלב את שתי הגישות[דרוש מקור: נקודה שנויה במחלוקת, בפרט לגבי OSX, שם המצב מסובך קצת יותר].
דוגמאות למערכות הפעלה שבנויות מעל מיקרו-גרעין:
QNX – משמשת בעיקר במערכות מבוזרות, אך גם בכמה טלפוני בלקברי.‏
HURD – הייתה אמורה להיות מערכת ההפעלה של פרויקט גנו. בפועל ירשה גנו/לינוקס את מקומה. המערכת עדיין בפיתוח אולם אין לה כמעט שימוש. במערכת HURD משתמשים במיקרו-גרעין Mach שמספק רק מיפוי כתובות והעברת הודעות.
מיניקס.