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

בגרעין מונוליטי (monolithic kernel) כל שירותי מערכת ההפעלה רצים ביחד עם התהליכון הראשי של הגרעין, ולכן הם גם שוכנים באותו האזור בזיכרון. שיטה זו מאפשרת גישה עשירה ורבת עוצמה לחומרה. חלק מהמפתחים, כמו קן תומפסון, המפתח של UNIX, טוענים כי "קל יותר לממש גרעין מונוליטי" לעומת מיקרו-גרעינים (microkernels). החסרונות העיקריים של גרעינים מונוליטים הם התלויות שבין רכיבי המערכת – באג במנהל התקנים עלול לגרום לקריסת המערכת כולה, וכמו כן גרעינים גדולים עשויים להפוך לקשים מאוד לתחזוקה.
גרעינים מונוליטים, אשר באופן מסורתי שימשו במערכות הפעלה דמויות-יוניקס, מכילים את כל פונקציות הגרעין של מערכת ההפעלה ואת מנהלי ההתקנים (תוכניות קטנות שמאפשרות למערכת ההפעלה לתקשר עם התקני חומרה כגון כונני דיסקים, כרטיסים גרפיים ומדפסות). זהו העיצוב המסורתי של מערכות UNIX. גרעין מונוליטי הוא תוכנה אחת שמכילה את כל הקוד הדרוש לביצוע כל המשימות שקשורות לגרעין. כל חלק שלא ניתן לגשת אליו על ידי רוב התוכניות ושלא ניתן להכניסו לתוך ספרייה יימצא במרחב הגרעין: מנהלי התקנים, מתזמנים, ניהול זיכרון, מערכות קבצים, מחסניות רשת, ועוד. קריאות מערכת רבות מסופקות לתוכניות על מנת לאפשר להן גישה לכל השירותים הנ"ל. אף על פי שתחילה גרעינים מונוליטים היו עמוסים בתתי-מערכות שאולי לא היה בהן צורך, ניתן היה לכוונן אותן לרמה בה הן פועלות באותה המהירות או אף מהר יותר מגרעין שתוכנן ספציפית עבור חומרה מסוימת. גרעינים מונוליטים מודרניים כגון הגרעינים של לינוקס ו-FreeBSD (שתי מערכות הפעלה הנכנסות לקטגוריית מערכות הפעלה דמויות-יוניקס), כוללים את היכולת לטעון מודולים בזמן ריצה, ובכך מאפשרות הרחבה פשוטה של יכולות הגרעין בהתאם לדרישה, ועוזרות להקטין את כמות הקוד שרץ במרחב הגרעין. מהיתרונות שנזקפים לטובת הגרעינים המונוליטים:
מכיוון שמעורבות פחות תוכניות, הגרעין גם מהיר יותר.
מכיוון שזוהי תוכנה יחידה, היא אמורה להיות קטנה יותר גם כקוד מקור וגם בצורה שעברה הידור.
בדרך כלל פחות קוד, משמע גם פחות באגים שבתורם יכולים להוות בעיות אבטחה.
מרבית העבודה בגרעין מונוליטי מבוצעת דרך קריאות מערכת. אלו הם ממשקים הנשמרים בדרך כלל במבנה טבלאי, ואשר ניגשים לתת מערכת כלשהי בתוך הגרעין, כמו ביצוע פעולות על דיסק למשל. בעיקרו של דבר, קריאות מתבצעות בתוך תוכניות ועותק בדוק של הבקשה מועבר דרך קריאת מערכת. מכאן שהמסלול הוא לא ארוך בכלל. ניתן להפוך את הגרעין המונוליטי של לינוקס לקטן במיוחד לא רק בזכות היכולת שלו לטעון דינאמית מודולים, אלא גם בגלל הקלות לבצע בו התאמות אישיות. למעשה, קיימות כמה גרסאות קטנות דיין שיכולות להיכנס ביחד עם מספר גדול של יישומים ותוכניות אחרות לתוך נפח של כ-2MB ועדיין לספק מערכת הפעלה פונקציונלית לכל דבר (אחת ממערכות ההפעלה הפופולריות מהסוג היא OpenWRT, הפצה פופולרית לנתבים). היכולת הזאת למזעור של הגרעין שלה, הובילה גם לצמיחה המהירה בשימוש בלינוקס במערכות משובצות מחשב (מעגלים ממוחשבים המובנים לתוך מוצרים אחרים).
גרעינים מהסוג הזה מורכבים מהפונקציות הבסיסיות של מערכת ההפעלה וממנהלי התקנים עם היכולת לטעון מודולים בזמן ריצה. הם מספקים הפשטות עשירות ורבות עוצמה של החומרה שמתחת. כמו כן הגרעינים מספקים סט קטן של הפשטות פשוטות ומשתמשים באפליקציות שנקראות שרתים (servers) על מנת לספק עוד פונקציונליות. גישה זו מגדירה ממשק וירטואלי גבוה (high-level) מעל החומרה, ביחד עם קבוצה של קריאות מערכת שממשות שירותי מערכת הפעלה כגון ניהול תהליכים, מקביליות וניהול זיכרון, אשר מתבצעים במצב משגוח (supervisor mode). בעיצוב זה ישנם כמה פגמים ומגבלות:
תכנות במרחב הגרעין הוא קשה מאחר שלא ניתן להשתמש בספריות המקובלות (כמו libc על כל שירותיה). ניפוי שגיאות הוא קשה אף יותר (קשה להשתמש במנפה שגיאות ברמת הקוד כמו GDB). אתחול של המחשב נדרש לעיתים קרובות. זוהי איננה רק בעיית נוחיות עבור המפתחים. ניפוי השגיאות קשה יותר, וככל שהקשיים נעשים רציניים יותר, כך גם עולה הסבירות שהקוד יכיל יותר באגים.
לבאגים בחלק מסוים בגרעין יכולים להיות תופעות לוואי חמורות. מאחר שלכל פונקציה בגרעין יש את כל ההרשאות, באג בפונקציה כלשהי יכול לפגוע במבנה נתונים בחלק אחר ובכלל לא קשור של הגרעין, או בכל תוכנית אחרת שרצה.
לעיתים קרובות גרעינים הופכים לענקים וקשים מאוד לתחזוקה.
אפילו אם קיימת חלוקה למודולים נפרדים, האינטגרציה של הקוד יכולה להיות קשה לביצוע.
מכיוון שהמודולים רצים באותו מרחב כתובות, באג באחד מהם עלול להפיל את המערכת כולה.
עוד חיסרון של גרעינים מונוליטים הוא בכך שהם לא יבילים. כלומר יש לשכתב אותם עבור כל ארכיטקטורה שמערכת ההפעלה תפעל עליה.