שבוע #2 מבנה מערכת ההפעלה והקשר עם החומרה חלק ב' קורס מערכות הפעלה א' מכללת הדסה /מכללה חרדית צבי מלמד [email protected] הרצאות הקורס מבוססות במידה רבה ביותר על ההרצאות של ד"ר יורם ביברמן © כל הזכויות שמורות לד"ר יורם ביברמן ולצבי מלמד ©צבי מלמד 1 נושאים להרצאה זאת )שבוע (#3 • • • • • • • • • • User mode and Kernel mode תוכניות המערכת System Programs מבנה מערכת יוניקס מיקרו-גרעין Microkernel System Calls סוגים של System Calls פסיקות Interrupts סיגנלים Signals הגנה על הזכרון הגנה על המעבד ©צבי מלמד 2 User mode and Kernel mode אופנות גרעין/משתמש ©צבי מלמד 3 User mode and Kernel mode אופנות גרעין/משתמש • • • • • התוכנה של ה kernel-נחשבת לתוכנה ש"אפשר לבטוח בה" .trusted softwareשאר התוכנה נחשבת לuntrusted software - לאבחנה הזאת יש תמיכה בחומרה – המעבד יודע )על פי ביט מסוים ) (mode-bitשדלוק או כבוי( אם אנחנו מריצים תוכנה שהיא trustedאו .untrusted פקודות מסוימות וגם פניות לאזורי זיכרון מסוימים או לרגיסטרים מיוחדים של המעבד ,מותרים או אסורים בהתאם למצב הביט הזה כאשר הביט = – 0אנו במצב של ,kernel-modeנקרא גם ) privilegedמיוחס( כאשר הביט = – 1אנו במצב שנקרא ,user-modeנקרא גם unprivileged ©צבי מלמד 4 User mode vers. Kernel mode אופנות גרעין/משתמש • • • • קימים שני אופני פעולה של המעבד: – Kernel (Supervisor) Mode – User Mode המעבד נמצא באופנות גרעין כאשר ה CPU mode bit -ב Status Register -הוא אפס. המעבד נמצא במצב זה כאשר: – מפעילים את המחשב – כתוצאה מפסיקה ,או שגיאה או חריגה )(exception or trap המעבד יוצא ממצב זה כאשר הוא נכנס לאופנות משתמש. – זה מתבצע על ידי פקודה ספציפית שמציבה ערך 1לתוך הביט הזה ©צבי מלמד 5 User mode vers. Kernel mode אופנות גרעין/משתמש • במעבדי אינטל המעבד עשוי להיות מעבר לשתי אופנויות אילו גם במצבים: – מצב מנהלי התקן )שמועדים יותר לבאגים מהגרעין( – מצב תכניות המערכת )שהוזכרו מעל ,וידונו בהמשך(. • יוניקס ,לינוקס וחלונות לא מנצלים את שתי האופנויות הנוספות • בהתאמה :גם מקטעי הזיכרון מסומנים כך שתכנית תוכל לפנות רק למקטעים ברמת הגנה כמו שלה ,או פחותה. ©צבי מלמד 6 תוכניות המערכת System Programs • • תוכניות נלוות לגרעין )אינן חלק ממנו( שמספקות שירותים רבים שאנו רגילים וצריכים לקבל בדרך כלל כמשתמשים אנו חשופים יותר לתכניות המערכת ,אשר רצות במצב משתמש: – ה shell -על פקודותיו השונות – מנהל שולחן עבודה ) ,(desktop managerהמתבסס על תכנת חלונות ).(windows manager – תכניות שונות לטיפול בקבציםcat, cd, chmod, cp, diff, find, grep, : mkdir, pwd, rm, tail – תכניות המספקות מידעman, whatis, cal, date, look, who, finger : – עורכיםed, vi, emacs, troff : – תמיכה בשפות תכנותg++, cc, gcc, make, lint, ar, ranlib, yacc : – תקשורתmail, write (to another user), talk : – תכניות אחרות :דפדפן ,מסד נתונים ,מעבד תמלילים ,משחקים... ©צבי מלמד 7 תוכניות המערכת System Programs • מימוש תכניות המערכת עשוי להתבצע באחד משני אופנים: א -מפרש הפקודות ) (shellמכיל את קוד הפקודות לביצוע -פונקציות בתכניתו )מק( ב -מפרש הפקודות מפעיל תכנית נפרדת למימוש כל פקודה) .כך יוניקס(. • יתרונות וחסרונות: • בגישה ב' )יוניקסית(: – קל להוסיף פקודות\תכניות-מערכת חדשות )ואין צורך לשנות את ה- .(shell – העברת הפרמטרים לתכנית האחרת מורכבת יותר. – טעינת תכנית חדשה לשם ביצוע כל פקודה הינה איטית יותר )לעומת קריאה לפונקציה בתוכנית הנוכחית( – יש פחות אינטגרטיביות ואולי אחידות בין תכניות המערכת השונות. • גם ביוניקס/לינוקס ,קיימות בתוך ה shell-פקודות )מעטות( שהןbuilt-in : ©צבי מלמד 8 מבנה מערכת יוניקס .1 החומרה והבקרים שלה .2 גרעין מערכת ההפעלה )(Kernel .3 • תיפעול החומרה ,בפרט ע"י מנהלי ההתקנים הנכללים בגרעין. • ניהול התהלכים )יצירה ,הקצאת מעבד, סיום ,מתן שירותים( מפרש הפקודות ) shellאו CLI=Command (Line Interpreter • .4 מאפשר הרצה של תכניות ,בפרט של תכניות המערכת. ברמה האחרונה מצויים המשתמשים הפונים למערכת באמצעות מפרש הפקודות. ©צבי מלמד 9 מיקרו-גרעינים Microkernels • • • • • • העקרון :בנית מערכת מינימלית באופן מודולרי )להבדיל ממונוליתי(. הגרעין מכיל רק את המינימום ההכרחי )וכל היתר הופך לתכניות מערכת(. מה שלא נכלל במיקרו-קרנל :מודולים נפרדים ,מעבירים הודעות זה לזה התפקיד המרכזי של הגרעין :לאפשר העברת הודעות בין תכניות שונות הרצות במרחב המשתמש. הטיפול בציוד יתבצע ע"י מודולים שירוצו באופנות משתמש ,ויקבלו הודעות מתכניות הזקוקות לשרותיהם. יתרונות: – שינויים במערכת לא מחייבים שינויים בגרעין. – הגרעין קטן ולכן תחזוקתו יחסית קלה. – בשל קוטן הגרעין נקל יותר להשיג .portability – בטיחות :הגרעין קטן מעט עבודה בגרעין יותר בטוח ©צבי מלמד 10 System Calls • הגרעין מטפל בציוד ובמבני הנתונים של מערכת ההפעלה. • תוכנית שמעונינת לבצע IOאו לקרוא/לכתוב נתונים אלו )כמו לברר תאריך או מספר תהליך( צריכה לקבל שירות זה מהגרעין. כיצד? • זימון פונקציה שנקראת "קריאת מערכת" system call • הפונקציה של הגרעין ,מתבצעת בkernel mode - • אבחנה חשובה :פונקציות ספריה לעומת קריאת מערכת – פונקציות ספריה )לדוגמא ספריות Cאו – (C++כמוהן כפונקציות שאנו כותבים – רצות ב . user-mode-לדוגמא .cin, scanf :הן מכינות את הנתונים לקריאת המערכת ומבצעת את זימון הפונקציה הזאת. – חלקן אינן מצריכות קריאת מערכת – לדוגמא פונקציות מתמטיות רבות או )(strlen – פרק #2בדפי ה man -של יוניקס מתאר את קריאות המערכת )בניגוד לפרק #3המתאר את פונקציות הספרייה(. ©צבי מלמד 11 System Calls • • • • בעקבות זימון פונקצית מערכת – מתבצעת פסיקה תוכנה )פקודת אסמבלר מיוחדת( בעקבות פסיקת התוכנה – השליטה עוברת לגרעין ,הוא מתעורר במצב של kernel-modeוממשיך את ביצוע הפונקציה )קריאת המערכת(. בסיום הביצוע של קריאת המערכת ,מתבצעת פקודה שמעבירה את המצב ל user-mode-וחוזרים מהזימון "כרגיל" הערות: .1כל השלבים האילו מתבצעים על ידי תהליך אחד! .2מבחינת התכנת – אין הבדל בין קריאת מערכת לפונקציה אחרת ©צבי מלמד 12 API = Application Procedural Interface • פונקציות הספרייה מגדירות לנו APIשל מערכת ההפעלה . • שלושה APIנפוצים: – Win32למערכת חלונות. – POSIX API – Java APIלתכניות הרצות על (Java Virtual Machine) JVM ©צבי מלמד 13 :2008 POSIX למסמך ההגדרה שלIEEE מתוך המבוא של מגדיר ממשק וסביבה סטנדרטיים למערכת הפעלהPOSIX • ותוכניות שירות לתמיכה,("shell") הכוללים מפרש פקודות "המקור-בפורטביליות ברמת קוד – POSIX.1-2008 defines a standard operating system interface and environment, including a command interpreter (or “shell”), and common utility programs to support applications portability at the source code level. POSIX.1-2008 is intended to be used by both application developers and system implementors 14 ©צבי מלמד Win32 API Example 15 ©צבי מלמד תוכנית דוגמא וקריאות מערכת מטרה :לקרוא נתונים מקובץ א' ,ולכתוב אותם על קובץ ב' מהלך: .1הצג פרומפט למשתמש )ק.מ(. .2קרא את שמות הקבצים מהמקלדת )ק.מ(. .3פתח את קובץ הקלט לקריאה )ק.מ(. ) .4ק.מ :(.אם הפתיחה נכשלה – החזר ערך >) 0שלילי( .5פתח את קובץ הפלט לקריאה )ק.מ(. ) .6ק.מ :(.אם הפתיחה נכשלה – החזר ערך >) 0שלילי( .7לולאה )כל עוד(... (aקרא נותן מקובץ א' )ק.מ( (bצא מהלולאה אם קראנו EOF (cכתוב את הנתון לקובץ ב' )ק.מ(. .8בתום הפעולה סגור את הקבצים )ק.מ.(2 X . ©צבי מלמד 16 סוגים של System Calls • ניתן לחלק את קריאות המערכת לחמש קבוצות עיקריות: .I בקרת תהליכים. .II טיפול בקבצים .IIIטיפול בציוד .IVאחזקת מידע .V תקשורת ©צבי מלמד 17 סוגים של System Calls .I בקרת תהליכים )(Process Control – יצירת תהליך. – סיום תהליך באופן תקין. – סיום תהליך באופן שגוי )עם/בלי .(core-dump – טעינת והרצת תכנית אחרת במקום הנוכחית. – שליפה\עדכון תכונות תהליך )קדימות ,זמן ריצה מותר(. – הריגת תהליך. – המתנה פרק זמן .X – המתנה לאירוע כלשהו )סיום בן(. – שליחת איתות לתהליך אחר. – הרצת תכנית פקודה ,פקודה. ©צבי מלמד 18 סוגים של System Calls .II טיפול בקבצים – יצירה\מחיקה של קובץ. – פתיחה\סגירה של קובץ לק'\כ'. – ק\כ מ\על קובץ. – תזוזה למקום רצוי בקובץ. – שליפת\עדכון תכונות קובץ ).(chmod – העתקת\העברת קובץ. – כנ"ל עבור מדריכים. .IIIאחזקת מידע – קריאת תאריך\שעה. – מספר המשתמשים ,גרסת מ.ה ,.שטח הדיסק הפנוי... ©צבי מלמד 19 סוגים של System Calls .IIתקשורת בין תהליכים באותו מחשב או במחשבים שונים – ברור כתובת ה IP -של המחשב. – פתיחת\סגירת ערוץ תקשורת. – קבלה\שליחה של מידע מ\על הערוץ. – הקצאת\שחרור זיכרון משותף. – יצירת\סגירת כלים אחרים להעברת הודעות. ©צבי מלמד 20 פסיקות Interrupts • פסיקה :איתות למערכת ההפעלה ,שחל אירוע כלשהו שמצריך את התערבותה / פעולתה ,לאלתר • הפסיקה עשויה להגיע מהחומרה ,או מהמעבד עצמו )מהתכנה( )פקודת אסמבלר( • החומרה שולחת פסיקה אסינכרונית ע"י העברת איתות חשמלי לקו הפסיקות ).(interrupt request line • בסוף ביצוע כל פקודת מכונה ,בודק המעבד האם יש פסיקה ממתינה ,ואם כן מטפל בה טרם ביצוע הפקודה הבאה. • וקטור הפסיקות :מערך ה Interrupt Descriptor Table (IDT) -מכיל לכל מספר פסיקה אפשרי את כתובת הפונקציה לטיפול באותה פסיקה • כתובת המערך ,ותפקיד כל כניסה בו נקבעים ע"י החומרה – דוגמא :#0 :שגיאה בחילוק :#128 ,timer :#32 ,page fault :#14 ,ק.מ. – ה BIOS -מאתחל את המערך ,ומערכת ההפעלה דורסת )(overwrite ©צבי מלמד 21 פסיקות Interrupts • פסיקת תכנה )מכונה באינטל :חריגה (excptionנשלחת ע"י המעבד לעצמו )כלומר :פקודת מכונה/אסמבלר( כדי לאותת על אנומליה. • שלושה סוגי פסיקות תכנה: – – trapזימון לקריאת-מערכת .פקודת אסמבלר ייעודית ,שגורמת להפעלת הפונקציה המתאימה של מערכת ההפעלה בkernel mode - – – abortפסיקה שמציינת שגיאת ביצוע חמורה כגון הרצת פקודה שמורה ב user-mode-או גישה לא-חוקית לזכרון ) (segmentation faultיש להעיף את התוכנית! – – faultהתכנית בצעה שגיאה 'שלא בעוונותיה' .על מ.ה .לדאוג 'להסדרת העניינים' ,ויש לחזור על ביצוע הפקודה שכשלה .לדוגמאpage-fault : ©צבי מלמד 22 פסיקות Interrupts • ריבוי פסיקות ופוסקים: – במקרה של כמה פסיקות בו זמנית – בקר הפסיקות אוגר את קוד הפסיקות. – לעתים צריך לברר איזה התקן )מכמה אפשריים( שלח את הפסיקה. – ישנה אפשרות למסך פסיקות )לא את כולן( בזמן שמבצעים קטע קריטי – מנגנון של עדיפויות בפסיקות – מאפשר למסך סלקטיבית פסיקות בעדיפות נמוכה ולבצע פסיקות בעדיפות גבוהה – מהירות ביצוע הפסיקה היא קריטית IDT -מאפשר קפיצה "מידית" לפונקצית הטיפול בפסיקה הספציפית ©צבי מלמד 23 סיגנלים Signals • מערכת ההפעלה מאותתת לתכנית על אירוע חריג כלשהו הוא ע"י שליחת סיגנל. • )גם תכניות המשתמש יכולות לשלוח סיגנלים אלה לאלה( • דוגמות – גודל קובץ עלה על המותר. – התהליך ביצע פקודה לא חוקית. – המשתמש הקיש ^cאו .^z • תהליך יכול לקבל סיגנל רק עת הוא רץ במצב משתמש )אחרת הסיגנל ימתין לו(. • סיגנל ממתין נקרא .pending signal • בכל פעם שהתהליך מתחיל לרוץ במצב משתמש נבדק האם ממתינים לו סיגנלים • סיגנל סינכרוני -נשלח לתכנית בשל תקלה בהרצה • סיגנל אסינכרוני -נשלח לתכנית ע"י תכנית אחרת ©צבי מלמד 24 סיגנלים Signals • כמה דוגמות לסיגנלים בלינוקס: • SIGFPEנשלח לתכנית שניסתה לחלק באפס בשלמים • SIGSEGVנשלח לתכנית שפנתה לכתובת שגויה. • SIGINTבקשה מהתכנית להסתיים )המשתמש הקיש .(^C • SIGKILLעל התכנית להסתיים מייד! • SIGSTOPעל התכנית לעצור )עבור דבגינג(. • ) man -7 signalיציג לכם את הסיגנלים השונים(. ©צבי מלמד 25 סיגנלים Signals • ביצוע פעולה שעלולה להיכשל )פתיחת קובץ ,הקצאת זיכרון( לא גורם לסיגנל! )במקום :מוחזרת שגיאה( • סיגנל נשלח עת התקלה חלה בכל מקום שהוא בתכנית ,ואינה אמורה להיבדק\להיות-מנוטרת ע"י התכנית. • כברירת מחדל :התהליך המקבל סיגנל בד"כ יועף) ,אולי תוך שפיכת core- .(dump • תהליך יכול להחליט על התנהגותו הרצויה ביחס לסיגנלים: – להתעלם מהסיגנל. – "לתפוש אותו" ולטפל בו אמצעות ) signal handlerפונקציה ייעודית( • מהסיגנלים SIGKILL, SIGSTOP :לא ניתן להתעלם ,ולא ניתן לתפסם. ©צבי מלמד 26 הגנה על הזכרון • להגן על הזיכרון המוקצה למערכת ההפעלה מפני פגיעה ע"י תכניות משתמשים • להגן על הזיכרון המוקצה לתכנית א' מפני תכנית ב'. • )בתחילת סמסטר ב' נתאר מכניזמים מתקדמים .כעת :מכניזם פרימיטיבי( • נניח שלתכנית מוקצה שטח זיכרון רציף .שני רגיסטרים מתארים את השטח: – אוגר בסיס ) :(base registerכתובת הזיכרון הנמוכה ביותר של מרחב הכתובות של התהליך. – אוגר גבול ) :(limit registerיכיל את גודל שטח הזיכרון המוקצה לתכנית. – שינוי ערך האוגרים :רק על ידי פקודות מיוחסות )(priviledge ©צבי מלמד 27 הגנה על הזכרון • בדיקת חוקיות הכתובת: – המעבד בודק )בזמן אמת = הריצה( שהכתובות נמצאות בתחום הזה – במקרה של הפרה - violationנוצרת חריגה ,בעקבותיה סיגנל, והתכנית מועפת. • ב DOS -לא הייתה הגנה שכזו ,ולכן תכניות המשתמשים יכלו לעשות שמות במערכת ההפעלה ביצוע rebootלעתים תכופות ©צבי מלמד 28 הגנה על המעבד • להגן שתכנית המשתמש לא תחזיק במעבד עד אינסוף... • הפתרון :עיתאי ) (timerאשר יישלח פסיקה אחרי פרק זמן קבוע מראש – ערך מקובל ביוניקס 0.01 :שנ' עד 0.001שנ' = 100Hz-1000Hz • עת חלה פסיקה )כל פסיקה( השליטה עוברת\חוזרת למערכת ההפעלה שמחליטה למי לאפשר לרוץ )להמשיך תוכנית נוכחית או לעבור לתוכנית אחרת( • "בהזדמנות זאת" – משתמשת מערכת ההפעלה במעבד למשימותיה.... – עדכון מבני הנתונים שלה )כמה זמן התכנית רצה( ,החלטה מי תהיה התכנית הבאה שתזכה במעבד וכו' • כמובן שהטיפול בטיימר יעשה ע"י פקודות מיוחסות. ©צבי מלמד 29 הגנה על המעבד • האם להגדיל את הקצב )להקטין את Quantumהזמן? – ערך מקובל ביוניקס 0.01 :שנ' עד 0.001שנ' = 100Hz- 1000Hz – הגדלת התדר )הקטנת הזמן( – יותר overhead – לעתים קרובות תהליכים "עפים" בגלל קו"פ עוד לפני שתם זמנם ©צבי מלמד 30 תוספות /גיבוי: מבטים שונים על מבנה יוניקס/לינוקס ©צבי מלמד 31 מבנה יוניקס :מבט #1 ©צבי מלמד 32 מבנה יוניקס – מבט #2 ©צבי מלמד 33 מבנה יוניקס – מבט #3 ©צבי מלמד 34
© Copyright 2024