מערכות הפעלה
Transcription
מערכות הפעלה
מערכות הפעלה תרגול – 7ניהול פסיקות ,קלט/פלט xfork חיקוי XINUלקריאת fork מייצרים תהליך חדש עבור תהליך הבן מעתיקים תוכן המחסנית מתהליך האב אל תהליך הבן מחשבים מצביע הקוד עבור תהליך הבן מסמלצים קריאה לctxsw- מחזירים pidשל תהליך חדש לאב או 0לבן 2 מאי 10 – retipחישוב כתובת חזרה 3 מאי 10 xfork 10 מאי 4 xfork הכנת מחסנית עדכון bp עבור xmain הרצת תהליך הבן 5 מאי 10 שאלות שצריך לשאול 6 האם צריך ליצור תהליך חדש עם pidחדש או מספיק לשנות תהליך קיים? האם צריך להקצות מחסנית נוספת? מה המחסנית אמורה להכיל? איך התהליך יחזור מהקריאה? האם דרושים משתנים נוספים כדי לבצע את המשימה? מאי 10 פסיקות בXINU- 7 לא ניתן לממש שגרת טיפול בפסיקה בשפת C אסטרטגיית שני שלבים: פסיקות מועברות לשגרה קטנה הכתובה בשפת אסמבלר שאחראית על טיפול בערכי אוגרים ,זיהוי ההתקן שגרם לפסיקה ,וחזרה מפסיקה בנוסף השגרה גם קוראת לפונקצית טיפול ראשית עבור אותו התקן שכתובה בC- מאי 10 )Interrupt Dispatcher (io.h 8 משתמש בטבלת הפסיקות intmapשכוללת פניות לשגרת: מאי 10 Interrupt Dispatcher (intcom.asm) :הגדרת הטבלה באסמבלי 10 מאי 9 intcom – intcomיכולה לבצע שגרת BIOSלפני טיפול בפסיקה קריאה ל?BIOS- iflag != 0 כן קריאה לBIOS- לא השבת החלפת תהליכים מחסנית CS != CS כן pcxflag = 0 האם פסיקה התבצעה בזמן ריצה של רוטינה מחוץ ל- ?)BIOS, DOS( XINU לא קרא לISR XINU- קרא לISR XINU- שחזר pcxflag חזור מפסיקה ()IRET 10 מאי 10 Interrupt Dispatcher – intcom יכולה לבצע שגרת BIOSלפני טיפול בפסיקה קריאות BIOSמאפשרות פסיקות ,ולא יכולות להגן על המשתנים הגלובליים שלהם מפני קריאות חוזרות מתהליכים שונים ) – (non-reentrantיש צורך לבטל החלפת תהליכים אם התהליך מתחלף זה יכול לגרום לפסיקת BIOS נוספת 11 מאי 10 עיבוד פסיקה עם pcxflagמכובה דגל pcxflagשולט בresched- pcxflag = 0 כשהמחסנית הלוקלית משמשת לקריאות BIOS xdisable/xrestore שולטות על הדגל שדה iflagבכניסת intmapאומר האם לבצע קריאה לשגרה המקורית לפני קריאה לשגרת XINU 12 מאי 10 עיבוד פסיקה עם pcxflagדלוק האם ניתן לעשות ?reschedכן ,בתנאי שלא מתבצעת קריאה לשגרת BIOS נראה תרשים שמציג למה זה בטוח עבור שני תהליכים P ,וQ- … )Intcom (2 איך נמנע " stack ?"overflow 13 Q ISR )Intcom (1 P Resched מאי 10 עיבוד פסיקה עם pcxflagדלוק 14 לכל תהליך יש מחסנית משלו רק פסיקה אחת מתבצעת עבור אותו תהליך כשהתהליך חוזר למעבד הפסיקות שוב מכובות עד לחזרה מהפסיקה המקורית פסיקה נוספת לא תופיע בזמן ריצה של פסיקה בהקשר של P פסיקה אכן יכולה להופיע בזמן ריצה של Q מאי 10 עיבוד פסיקה עם pcxflagדלוק resched בזמן עיבוד פסיקה הוא בטוח אם: ISR מעדכן את כל הנתונים הגלובליים לפני קריאה לresched- אף שגרה לא מתירה פסיקות בלי שאסרה אותן לפני זה היוצא מן הכלל – מהלך העדכון שמתיר את הפסיקות בעליית המערכת 15 מאי 10 כללים לכתיבת ISR לא מרימה דגל של פסיקות בצורה מפורשת יכולה לבצע ( reschedבודקת את תקינות המבנים הגלובליים לפני הקריאה) לא קוראת לפונקציה שמעבירה את התהליך למצב שונה מ CURR-וREADY- לא משאירה פסיקות מכובות הרבה זמן – ההתקנים חייבים לפעול נכון זמן העיקוב האפשרי הוא תלוי התקן 16 מאי 10 דוגמה – הרחבת שגרת הפסיקה לא מרימה דגל של פסיקות בצורה מפורשת יכולה לבצע ( reschedבודקת את תקינות המבנים הגלובליים לפני הקריאה) לא קוראת לפונקציה שמעבירה את התהליך למצב שונה מ CURR-וREADY- לא משאירה פסיקות מכובות הרבה זמן – ההתקנים חייבים לפעול נכון זמן העיקוב האפשרי הוא תלוי התקן 17 מאי 10 קלט/פלט בXINU- 18 מאי 10 קלט/פלט ברמת המכונה שיטות קלט/פלט: קלט/פלט דרך ports ( Memory Mapped I/O קלט/פלט ממופה לכתובות) משולבת)DMA( Direct Memory Access : 19 מאי 10 קלט/פלט דרך ports מרחב כתובות נפרד מהזיכרון ports מייצגים מעין ערוצים עם 2קצוות :במעבד ובהתקן (בדרך כלל chipאחר) מרחב כתובות – 0עד ( 65535רובם לא בשימוש) החיבור הוא בחומרה ,ומספרו ידוע למעבד ישנם גם חיבורים שלא למעבד ,הם לא נגישים מקוד אסמבלר ומספרם אינו ידוע 20 מאי 10 פקודות מכונה לקריאה/כתיבה לports- מבנה פקודת :IN AL port num או או AX IN או DX EAX קורא בית או מילה או מילה כפולה מתוך הport- לאוגר האקומולטור ()EAX ,AX ,AL מספר portהוא קבוע בין 0ל255- 21 מאי 10 פקודות מכונה לקריאה/כתיבה לports- מבנה פקודת :OUT AL AX EAX port num או או OUT או DX כותבת בית או מילה או מילה כפולה מהאקומולטור ( )AL, AX, EAXל.port- מספר portהוא קבוע בין 0ל255- 22 מאי 10 פקודות מכונה לקריאה/כתיבה לports- דוגמאות: קריאת תו מהמקלדת IN AL, 60h שליחת תו למדפסת MOV DX, 378h OUT DX, AL הערה :אם רוצים לגשת ל port-עם מספר גבוה מ255- חייבים להשתמש רק בגרסת DXשמספרו המרבי הוא 65535 23 מאי 10 פקודות מכונה לקריאה/כתיבה לports- אם משתמשים ב AX-או ב EAX-בפקודות INו- OUTהבתים המשמעותיים יותר נכתבים למספרי portsעוקבים דוגמה: OUT 200, AX AL נכתב לתוך portמספר AH ,200נכתב לתוך portמספר 201 24 מאי 10 פקודות מכונה לקריאה/כתיבה לports- 25 אי אפשר לכתוב ל port-בצורה לא מסודרת לכל portמוגדר פרוטוקול של בדיקות סטאטוס ואישורי קבלה רב מספר ה ports-אינם מנוצלים ולא מחברים דבר. שום תקלה לא נגרמת כשקראים או כותבים זבל ל port-שלא מחובר. מאי 10 Memory Mapped I/O מרחב כתובות נפרד מהזיכרון כתובות מסוימות מנותבות להתקני ק/פ במקום לזיכרון מימוש בחומרה דוגמה :כתיבה/קריאה לזיכרון המסך: סגמנטים ( A000hכתובת פיזית B000h ,)640k (כתובת פיזית ( B800h ,)704kכתובת פיזית )736kמנותבים לזיכרון של כרטיס מסך של מחשב 26 מאי 10 DMA שילוב של שני מקרים קודמים דרך portsהמעבד מנחה chipשל DMAלקרוא ממקום מסוים בהתקן (נניח trackמסוים בדיסק) לזיכרון או להיפך המידע לא עובר דרך המעבד ובזמן הזה המעבד יכול להמשיך לעסוק בדברים אחרים ,במקביל ל- DMA 27 מאי 10 Support Chips " מעבדים קטנים" למשימות מיוחדות מורידים משימות מהמעבד ניתן לשנות התנהגותם על ידי כתיבה לאוגרים שלהם דרך ports דוגמת Timer – Support Chip נתרכז בשני – Support Chipsבקר הפסיקות ובקר התקנים חיצוניים 28 מאי 10 דוגמה – קריאת תו מהמקלדת (פסיקה )9 רק בחיבורים למעבד יש מספרי port בקר התקנים 8255 A8259בקר פסיקות Port 61h Port 20h Port 60h CPU 29 מאי 10 דוגמה – קריאת תו מהמקלדת קרא את התו דרך port 60h הודע לבקר ההתקנים שהתו נקרא: קרא תוכן port 61h הדלק את הביט העליון של מס' ה 8ביט הזה ושגר אותו חזרה ל- port 61h כבה את הביט העליון של מס' ה 8ביט הזה ושגר אותו חזרה ל- port 61h 30 הודע לבקר הפסיקות שהפסיקה טופלה דרך port 20hעל ידי שליחת מספר 20hלתוך הport- מאי 10