2# שבוע מבנה מערכת ההפעלה והקשר עם החומרה ` חלק ב ` קורס מערכות

‫שבוע ‪#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‬‬