270 likes | 479 Views
מערכות הפעלה. תרגול 10 –אתחול מערכת. מה בתכנית?. אתחול המערכת. אתחול המערכת. שלבים: אתחול המכונה בזמן ההדלקה ( boot , לא קיים ב- XINU ) אתחול מבנה הנתונים מעבר למוד של ריצה - מטמורפוזה מתוכנית אחת למערכת הפעלה שמסוגלת להריץ מספר תהליכים במקביל!
E N D
מערכות הפעלה תרגול 10 –אתחול מערכת
מה בתכנית? • אתחול המערכת מערכות הפעלה - תרגול 8
אתחול המערכת • שלבים: • אתחול המכונה בזמן ההדלקה (boot, לא קיים ב-XINU) • אתחול מבנה הנתונים • מעבר למוד של ריצה - מטמורפוזה מתוכנית אחת למערכת הפעלה שמסוגלת להריץ מספר תהליכים במקביל! • קוד האתחול נמצא בפונקצית main שמתחילה לרוץ כיישום רגיל, משתלטת על פסיקות והופכת למערכת תהליכים מערכות הפעלה - תרגול 8
אתחול מבנה נתונים • חישוב זכרון פנוי ואיתחול מנהל הזכרון • אתחול טבלאות תהליכים, תורים, סמפורים • אתחול מבני נתונים של שעון • וכו' (שלא דנו בקורס) • השתלטות על פסיקות, כולל אתחול טבלת הפסיקות מערכות הפעלה - תרגול 8
מעבר לשלב ריצה מצב שיכול היה להיות שלב ביניים בריצה של מערכת • הצבת ערכי אתחול במבנה נתונים עבור תהליך NULL פעיל • הוספת תהליכי מערכת, butler ו-xmain (במקום command line) מערכות הפעלה - תרגול 8
initialize.c מערכות הפעלה - תרגול 8
initialize.c מערכות הפעלה - תרגול 8
initialize.c מערכות הפעלה - תרגול 8
הפונקציה main • מתודה האחראית על אתחול המערכת – קוראת ל-Sysinit שמבצעת את האתחול בפועל. • תהליך המבצע את המתודה main הופך לתהליך ה-NULL בסוף המתודה Sysinit. כלומר, עם החזרה מ-Sysinit, תהליך ה-NULL הוא שמבצע את הקוד. בשלב זה הפסיקות מכובות ולא קיימים תהליכים נוספים. מערכות הפעלה - תרגול 8
הפונקציה main - המשך • לאחר הדפסות אתחול, main מאפשרת פסיקות, יוצרת את תהליך ה-Butler וקוראת ל-create על מנת להתחיל תהליך שיריץ את קוד האפליקציה - Xmain. • לאחר מכן פונקצית ה-main מתנהגת כפונקציה של תהליך ה-NULL (לולאה אינסופית). בשלב זה, מאחר ונוצר תהליך ה-Xmain עם עדיפות גבוהה יותר מזו של ה-NULL, הקוד של main ימשיך להתבצע רק כשלא יהיה תהליך נוסף עם עדיפות גבוהה מ-0 בתור ה-ready. מערכות הפעלה - תרגול 8
main - initialize.c מערכות הפעלה - תרגול 8
main - initialize.c מערכות הפעלה - תרגול 8
הרוטינה –Sysinit אתחול רשימת memlist • הקצאת בלוק של זיכרון פנוי – שימוש בפונקציה malloc לקבלת בלוק הזיכרון הגדול ביותר האפשרי. הגודל של הבלוק שהוקצה מוקטן מעט כדי לאפשר הקצאות malloc נוספות כל ידי פונקציות ספרייה של C. • עדכון המשתנים end ו- maxaddr תוך עיגול לכפולה של 4. מערכות הפעלה - תרגול 8
הרוטינה –Sysinit המשך • אתחול מבני נתונים של XINU • הפיכת הקוד הרץ כרגע לתהליך NULL. ברגע שמבצעים השמה ל-state של התהליך כ-PECURR ומעדכנים משתנה גלובלי currpid, resched יכולה להתבצע. • אתחול טבלת intmap מערכות הפעלה - תרגול 8
sysinit מערכות הפעלה - תרגול 8
sysinit מערכות הפעלה - תרגול 8
sysinit מערכות הפעלה - תרגול 8
sysinit מערכות הפעלה - תרגול 8
sysinit מערכות הפעלה - תרגול 8
אתחול השעון ותור הרדומים מערכות הפעלה - תרגול 8
פונ' mapinit - ארגומנטים • הרוטינה מקבלת: • וקטור הכולל את סוג הפסיקה (LSB) ו-iflag (MSB). כזכור, משמעות ה- iflagהיא האם לבצע את ה-isr מקורי. • כתובת newisr • Minor device number (יועבר לשגרת הטיפול בפסיקה). מערכות הפעלה - תרגול 8
mapinit – פעולת האתחול • אתחול השדות ב- intmap • Oldisr segment:offset נשלף דרך הוקטור(הארגומנט הראשון). • Call intcom נשטלת בטבלת IV במקום המתאים בהתאם לסוג הפסיקה (vec) במקום ה-segmen:offset של oldisr. מערכות הפעלה - תרגול 8
xdone() • סיום ריצת XINU מתבצע ע"י השגרה xdone • תפקידה לדאוג לסיום פעולת אמצעי קלט/פלט, החזרת וקטור הפסיקות למצבו לפני הפעלת XINU, להודיע הודעת סיום ולהחזיר בקרה לMS-DOS- מערכות הפעלה - תרגול 2
xdone.c מערכות הפעלה - תרגול 2
maprestore – שחזור ה-IV • המטרה: להחזיר את oldisr למקום המתאים ב-IV. • לשם כך, נעבור על כל הפסיקות ש-XINU השתלטה עליהן בפועל, ודרך ה-ivec ניגש למקום המתאים ב-IV ונציב בו את oldisr. מערכות הפעלה - תרגול 8