במאמר זה נבין את מודל ריבוי ההליכים במערכת ההפעלה.
דגם ריבוי פתילים:
ריבוי השרשורים מאפשר לאפליקציה לחלק את המשימה שלה לשרשורים בודדים. בריבוי חוטים ניתן לבצע את אותו תהליך או משימה לפי מספר השרשורים, או שנוכל לומר שיש יותר משרשור אחד לבצע את המשימה בריבוי חוטים. בעזרת ריבוי הליכי ריבוי, ניתן להשיג ריבוי משימות.
גיל rekha
החיסרון העיקרי של מערכות השחלה בודדת הוא שניתן לבצע רק משימה אחת בכל פעם, ולכן כדי להתגבר על החיסרון של השחלה בודדת זו, יש ריבוי השחלות המאפשר לבצע מספר משימות.
לדוגמה:
בדוגמה שלמעלה, לקוח1, לקוח2 ולקוח3 ניגשים לשרת האינטרנט ללא כל המתנה. בריבוי שרשורים, מספר משימות יכולות לפעול בו-זמנית.
במערכת הפעלה, השרשורים מחולקים לשרשור ברמת המשתמש ולשרשור ברמת הליבה. שרשורים ברמת המשתמש טופלו בצורה עצמאית מעל הליבה ובכך נוהלו ללא כל תמיכה בקרנל. מנגד, מערכת ההפעלה מנהלת ישירות את השרשורים ברמת הקרנל. עם זאת, חייבת להיות צורה של קשר בין שרשורים ברמת המשתמש לרמת הקרנל.
קיימים שלושה מודלים מבוססים של ריבוי הליכים המסווגים את הקשרים הללו:
- רבים לדגם מרובה הליכי שרשור אחד
- דגם מרובה הליכי אחד לאחד
- דגמי ריבוי הליכים רבים עד רבים
מודל מרובה הליכים אחד:
המודל הרבה לאחד ממפה שרשורים רבים של רמות משתמש לשרשור קרנל אחד. מערכת יחסים מסוג זה מאפשרת סביבה יעילה להחלפת הקשר, המיושמת בקלות אפילו על הליבה הפשוטה ללא תמיכת חוט.
איך להחזיר מערך ב-java
החיסרון של המודל הזה הוא שמכיוון שיש רק לוח זמנים אחד ברמת ליבה בכל זמן נתון, המודל הזה לא יכול לנצל את האצת החומרה שמציעה תהליכים מרובי-הליכיים או מערכות ריבוי מעבדים. בכך, כל ניהול השרשור נעשה במרחב המשתמש. אם מגיעה חסימה, המודל הזה חוסם את כל המערכת.
באיור שלמעלה, המודל הרב לאחד משייך את כל השרשורים ברמת המשתמש לשרשורים ברמת ליבה בודדים.
הצטרפות וסוגי הצטרפות
דגם מרובה הליכי אחד לאחד
המודל של אחד לאחד ממפה שרשור בודד ברמת משתמש לשרשור בודד ברמת ליבה. סוג זה של מערכת יחסים מקל על הפעלת שרשורים מרובים במקביל. עם זאת, היתרון הזה מגיע עם החיסרון שלו. היצירה של כל שרשור משתמש חדש חייב לכלול יצירת שרשור ליבה תואם הגורם לתקורה שעלולה להפריע לביצועים של תהליך האב. סדרת Windows ומערכות הפעלה לינוקס מנסות להתמודד עם בעיה זו על ידי הגבלת הצמיחה של ספירת השרשורים.
באיור שלמעלה, מודל אחד משייך את השרשור הזה ברמת המשתמש לשרשור בודד ברמת הגרעין.
מודל ריבוי הליכים דגם רבים להרבה
במודל מסוג זה, ישנם מספר שרשורים ברמת המשתמש וכמה שרשורים ברמת הקרנל. מספר שרשורי הליבה שנוצרו תלוי ביישום מסוים. המפתח יכול ליצור שרשורים רבים בשתי הרמות, אך ייתכן שהם אינם זהים. הדגם הרב לרבים הוא פשרה בין שני הדגמים האחרים. במודל זה, אם שרשור כלשהו מבצע קריאת מערכת חסימה, הקרנל יכול לתזמן שרשור נוסף לביצוע. כמו כן, עם הצגת חוטים מרובים, המורכבות אינה קיימת כמו בדגמים הקודמים. למרות שמודל זה מאפשר יצירת שרשורי ליבה מרובים, לא ניתן להשיג במקביליות אמיתית על ידי מודל זה. הסיבה לכך היא שהקרנל יכול לתזמן רק תהליך אחד בכל פעם.
גרסאות רבות עד רבות של מודל ריבוי השרשורים מקשרים מספר שרשורים ברמת המשתמש לאותו מגוון או הרבה פחות של שרשורים ברמת הגרעין באיור שלמעלה.