This question spans 2 stages — each part below is tagged with, and links to, the stage it belongs to.
(כל סעיף 5 נק'.) נא לסמן את התשובה הנכונה בטופס התשובות המצורף, ללא נימוק. הבדיקה תתבצע באופן אוטומטי, ולכן יש להקפיד לסמן נכון ובבירור את (1) מספר תעודת הזהות,את (2) מספר הטור המצוין למטה, ואת (3) התשובות עצמן. בכל סעיף יש לבחור תשובה אחת בלבד. יש סעיפים שמבקשים לזהות היגד נכון, ויש סעיפים שמבקשים לזהות היגד שגוי / לא נכון / בלתי אפשרי. אם קיים יותר מהיגד אחד שעונה על תנאי השאלה, או שלא קיים היגד כזה כלל, יש לבחור את התשובה שאומרת זאת במפורש. טור X
Full original question text (raw OCR)
מערכות הפעלה (234123) שאלה 1 (25 נק') (כל סעיף 5 נק'.) נא לסמן את התשובה הנכונה בטופס התשובות המצורף, ללא נימוק. הבדיקה תתבצע באופן אוטומטי, ולכן יש להקפיד לסמן נכון ובבירור את (1) מספר תעודת הזהות,את (2) מספר הטור המצוין למטה, ואת (3) התשובות עצמן. בכל סעיף יש לבחור תשובה אחת בלבד. יש סעיפים שמבקשים לזהות היגד נכון, ויש סעיפים שמבקשים לזהות היגד שגוי / לא נכון / בלתי אפשרי. אם קיים יותר מהיגד אחד שעונה על תנאי השאלה, או שלא קיים היגד כזה כלל, יש לבחור את התשובה שאומרת זאת במפורש. טור X א. בעבור תהליך כלשהו, איזה מבין ההיגדים הבאים מתאר שינוי מצבים (state change) שהוא בלתי אפשרי 1. [היגד:] שינוי ממצב waiting אל מצב running 2. [היגד:] שינוי ממצב waiting אל מצב ready 3. [היגד:] שינוי ממצב ready אל מצב running 4. [היגד:] שינוי ממצב running אל מצב ready 5. [היגד:] שינוי ממצב running אל מצב zombie 6. יש יותר מהיגד אחד שמתאר שינוי מצבים בלתי אפשרי ב. בהתייחס למכונה אבסטרקטית (abstract machine), איזה מבין ההיגדים הבאים שגוי? 1. [היגד:] מכונה אבסטרקטית מאפשרת לתהליך להשתמש בזיכרון פיזי יותר גדול מאשר יש למכונה האמיתית 2. [היגד:] מכונה אבסטרקטית תומכת רק פקודות מכונה שהן non-privileged 3. [היגד:] מכונה אבסטרקטית מאפשרת לתוכניות לרוץ על מעבדים של יצרנים שונים, תחת מערכות הפעלה שונות 4. [היגד:] מכונה אבסטרקטית מאפשרת לשמור קבצים ותיקיות על הדיסק 5. [היגד:] מכונה אבסטרקטית מאפשרת שימוש במספר רגיסטרים קטן יותר מאשר יש למכונה האמיתית 6. יש יותר מהיגד אחד שגוי מערכות הפעלה (234123) ג. איזה מבין ההיגדים הבאים נכון 1. [היגד:] כשמגדירים signal handler בעבור הסיגנל SIGCONT, ה-handler נקרא מיד אחרי שממשיכים את התהליך 2. [היגד:] כשמגדירים signal handler בעבור הסיגנל SIGKILL, ה-handler נקרא מיד אחרי שהורגים את התהליך 3. [היגד:] כשמגדירים signal handler בעבור הסיגנל SIGSTOP, ה-handler נקרא מיד אחרי שעוצרים את התהליך 4. [היגד:] משתמש יכול לחסום את כל סוגי הסיגנלים רק אם הוא super-user או root 5. יש יותר מהיגד אחד נכון 6. כל ההיגדים אינם נכונים ד. איזה מבין ההיגדים הבאים נכון 1. כל ההיגדים שגויים 2. כל ההיגדים נכונים 3. [היגד:] תהליך עלול לקבל את הסיגנל SIGXCPU רק אם השתמשנו קודם לכן בקריאת המערכת setrlimit בכדי להגביל את צריכת המעבד של תהליך זה 4. [היגד:] אפשר לשלוח את הסיגנל SIGCONT לתהליך רק אם קודם לכן שלחנו אליו את הסיגנל SIGSTOP 5. [היגד:] תהליך עלול לקבל את הסיגנל SIGPIPE רק אם קודם לכן הוא השתמש בקריאת המערכת pipe אבל אז השתמש ב pipe שנוצר לא נכון (כתב ל pipe שנסגר לקריאה) 6. [היגד:] תהליך עשוי לקבל את הסיגנל SIGTRAP רק אם הוא רץ תחת דיבאגר ה. איזה מבין ההיגדים הבאים איננו נכון? (תזכורת: IPI הינו קיצור ל Inter-Processor Interrupt. הנחה: מדובר בארכיטקטורת x86.) 1. [היגד:] כשמתחוללת פסיקת חומרה כלשהי, הגרעין מטפל בה ואז שולח את הסיגנל המתאים לתהליך המתאים 2. [היגד:] ה scheduler עשוי לשלוח IPI מליבה אחת של המעבד לאחרת 3. [היגד:] תת-המערכת בגרעין שמממשת את הזיכרון הוירטואלי עשויה לשלוח IPI בין ליבה אחת של המעבד לאחרת 4. [היגד:] רק הגרעין מטפל בפסיקות חומרה, ורק תהליכים מטפלים בסיגנלים 5. יש יותר מהיגד אחד שאיננו נכון 6. כל ההיגדים נכונים
בעבור תהליך כלשהו, איזה מבין ההיגדים הבאים מתאר שינוי מצבים (state change) שהוא בלתי אפשרי 1. [היגד:] שינוי ממצב waiting אל מצב running 2. [היגד:] שינוי ממצב waiting אל מצב ready 3. [היגד:] שינוי ממצב ready אל מצב running 4. [היגד:] שינוי ממצב running אל מצב ready 5. [היגד:] שינוי ממצב running אל מצב zombie 6. יש יותר מהיגד אחד שמתאר שינוי מצבים בלתי אפשרי
SRT / preemptive Gantt constructionבהתייחס למכונה אבסטרקטית (abstract machine), איזה מבין ההיגדים הבאים שגוי? 1. [היגד:] מכונה אבסטרקטית מאפשרת לתהליך להשתמש בזיכרון פיזי יותר גדול מאשר יש למכונה האמיתית 2. [היגד:] מכונה אבסטרקטית תומכת רק פקודות מכונה שהן non-privileged 3. [היגד:] מכונה אבסטרקטית מאפשרת לתוכניות לרוץ על מעבדים של יצרנים שונים, תחת מערכות הפעלה שונות 4. [היגד:] מכונה אבסטרקטית מאפשרת לשמור קבצים ותיקיות על הדיסק 5. [היגד:] מכונה אבסטרקטית מאפשרת שימוש במספר רגיסטרים קטן יותר מאשר יש למכונה האמיתית 6. יש יותר מהיגד אחד שגוי
libc syscall wrapper caching pitfallsSignal delivery and handler timingPreemption trigger identificationאיזה מבין ההיגדים הבאים נכון 1. [היגד:] כשמגדירים signal handler בעבור הסיגנל SIGCONT, ה-handler נקרא מיד אחרי שממשיכים את התהליך 2. [היגד:] כשמגדירים signal handler בעבור הסיגנל SIGKILL, ה-handler נקרא מיד אחרי שהורגים את התהליך 3. [היגד:] כשמגדירים signal handler בעבור הסיגנל SIGSTOP, ה-handler נקרא מיד אחרי שעוצרים את התהליך 4. [היגד:] משתמש יכול לחסום את כל סוגי הסיגנלים רק אם הוא super-user או root 5. יש יותר מהיגד אחד נכון 6. כל ההיגדים אינם נכונים
libc syscall wrapper caching pitfallsSignal delivery and handler timingאיזה מבין ההיגדים הבאים נכון 1. כל ההיגדים שגויים 2. כל ההיגדים נכונים 3. [היגד:] תהליך עלול לקבל את הסיגנל SIGXCPU רק אם השתמשנו קודם לכן בקריאת המערכת setrlimit בכדי להגביל את צריכת המעבד של תהליך זה 4. [היגד:] אפשר לשלוח את הסיגנל SIGCONT לתהליך רק אם קודם לכן שלחנו אליו את הסיגנל SIGSTOP 5. [היגד:] תהליך עלול לקבל את הסיגנל SIGPIPE רק אם קודם לכן הוא השתמש בקריאת המערכת pipe אבל אז השתמש ב pipe שנוצר לא נכון (כתב ל pipe שנסגר לקריאה) 6. [היגד:] תהליך עשוי לקבל את הסיגנל SIGTRAP רק אם הוא רץ תחת דיבאגר
libc syscall wrapper caching pitfallsSignal delivery and handler timingPipe IPC semanticsאיזה מבין ההיגדים הבאים איננו נכון? (תזכורת: IPI הינו קיצור ל Inter-Processor Interrupt. הנחה: מדובר בארכיטקטורת x86.) 1. [היגד:] כשמתחוללת פסיקת חומרה כלשהי, הגרעין מטפל בה ואז שולח את הסיגנל המתאים לתהליך המתאים 2. [היגד:] ה scheduler עשוי לשלוח IPI מליבה אחת של המעבד לאחרת 3. [היגד:] תת-המערכת בגרעין שמממשת את הזיכרון הוירטואלי עשויה לשלוח IPI בין ליבה אחת של המעבד לאחרת 4. [היגד:] רק הגרעין מטפל בפסיקות חומרה, ורק תהליכים מטפלים בסיגנלים 5. יש יותר מהיגד אחד שאיננו נכון 6. כל ההיגדים נכונים
libc syscall wrapper caching pitfallsLocal vs global interrupt disableSignal delivery and handler timingPreemption trigger identificationSRT / preemptive Gantt construction
The exam question — original PDF
pages 2, 3Exactly as it appears on the exam paper.
Built from these components
Ordered basic → advanced. Master the earlier ones first.
Review the material
Read these before you answer — each verified slide teaches a component this question tests, and nothing from an unrelated topic is included. Tutorial slides show the actual slide image.
קריאות מערכתלעבודה עם תהליכיםמערכות הפעלה - תרגול 23
קריאות המערכת getpid(), getppid()pid_t getpid();קריאת מערכת המחזירה לתהליך הקורא את ה-pid של עצמו.pid_t getppid();קריאת מערכת המחזירה את ה-PID של תהליך האב של התהליך הקורא.שאלה: מה המשמעות של getppid() == 1 עבור תהליך משתמש טיפוסי?תשובה: תהליך האב הוא init. קורה למשל אם תהליך הבן יתום.מערכות הפעלה - תרגול 222
מערכות הפעלה - תרגול 2281שאלה ממבחן
קריאת המערכת kill#include <sys/types.h>#include <signal.h>int kill(pid_t pid, int sig);פעולה: שולחת את הסיגנל שמספרו sig לתהליך המזוהה ע"י pid.אם הערך של sigהוא 0, אז הפעולה רק בודקת שהתהליך pid קיים, מבלי לשלוח signal (שימושי לבדיקת תקפות pid).ערך מוחזר:0 בהצלחה-1 בכישלון (למשל, אם אין תהליך בעל מזהה pid)מערכות הפעלה - תרגול 38
העברת סיגנלים בשני שלביםרישום – מערכת ההפעלה רושמת ב-PCB של תהליך היעד שיש לו סיגנל ממתין (pending signal).הרישום מתבצע במערך בינארי בין 31 ביטים, ולכן לכל תהליך יכול להיות לכל היותר סיגנל ממתין אחד מכל מספר.טיפול – בכל פעם שהתהליך חוזר ממצב גרעין למצב משתמש, מערכת ההפעלה בודקת אם יש סיגנלים ממתינים ומטפלת בהם.בסיום הטיפול בסיגנל, מערכת ההפעלה תאפס את הביט המתאים במערך. במידה ויש מספר סיגנלים ממתינים, סדר הטיפול מתחילת המערך לסופו.מערכות הפעלה - תרגול 39
FD (file descriptors)כל פעולות קלט/פלט של תהליך בלינוקס מבוצעות דרך "קבצים":קבצים "רגילים" לאחסון מידע (/usr/file.txt) נמצאים בדיסק.התקני חומרה גם כן מיוצגים כקבצים, אבל נמצאים בזיכרון.למשל, העכברים המחוברים למחשב מיוצגים כ- /dev/input/mouseN .גם ערוצי תקשורת כמו pipes מיוצגים ע"י קבצים שנמצאים בזיכרון.הקשר בין תהליך לבין קובץ שהוא ניגש אליו נשמר, ברמת המשתמש, ע"י מספר שלם שנקרא file descriptor (FD).לדוגמה: קריאת המערכת open() מחזירה FD.המשתמש מעביר את ה-FD לקריאות מערכת כמו read(), write() כדי לקרוא ולכתוב לקובץ.מערכות הפעלה - תרגול 320
שחרור file objectשאלה: מי מבצע את שחרור הזיכרון של file object? מתי ניתן לשחררו? ייתכנו מצבים בהם תהליכים שונים מצביעים לאותו file object, לכן שחרור ה-file object יכול להתבצע רק לאחר ביצוע close() מכל התהליכים החולקים את אותו ה-file object. זכרו של-file object יש מונה (f_count) הסופר את כמות התהליכים המצביעים עליו בכל רגע נתון. המונה קטן באחד עם כל פעולת close() על האובייקט. כאשר המונה מתאפס, ה-file object ישוחרר.מערכות הפעלה - תרגול 342
דוגמת FCFSaverageResponseTime = (10 + 20 + 30) / 3 = 20כעת נסיר את הנחה 1 ("כל התהליכים רצים למשך אותו זמן"). לכל תהליך זמן ריצה משלו.תוכלו לחשוב על דוגמה שבה FCFS אינו יעיל?מערכות הפעלה - תרגול 59כל התהליכים רצים למשך אותו זמן.כל התהליכים מגיעים באותו זמן (t=0).אם תהליך התחיל לרוץ, אז הוא ירוץ עד לסיומו ללא הפסקות.התהליכים משתמשים רק במעבד ולא מבצעים I/O.זמן הריצה של כל התהליכים ידוע מראש.
אפקט השיירה (convoy effect)averageResponseTime = (100 + 110 + 120) / 3 = 110אלגוריתם FCFS עלול לסבול מ"אפקט השיירה": מצב שבו תהליך אחד ארוך מעכב הרבה תהליכים קצרים. מערכות הפעלה - תרגול 510
שני סוגים של החלפת הקשרהחלפת הקשר כפויה(== הפקעה)הגרעין מפקיע (כלומר, לוקח בכוח) את המעבד מהתהליך, למשל בעקבות:פסיקת שעון (מטופלת בשגרה scheduler_tick) אשר מגלה כי הזמן שהוקצב לתהליך הנוכחי אזל.אירוע אסינכרוני אשר מעיר תהליך בעל עדיפות טובה יותר מהתהליך הרץ כרגע.לדוגמה: פסיקת דיסק או שחרור מנעול שתהליך המתין לו.החלפת הקשר יזומההתהליך מוותר מרצונו על המעבד, למשל באמצעות:קריאת מערכת חוסמת (כמו wait(), read(), …) אשר מוציאה את התהליך להמתנה.קריאת מערכת exit() אשר מסיימת את התהליך.קריאת מערכת sched_yield() – קריאת מערכת ייעודית לוויתור על המעבד.מערכות הפעלה - תרגול 613
הפקעה (preemption)בעיה: תהליך משתמש עלול לרוץ לנצח (למשל, לולאה אינסופית) ולמנוע את המעבד משאר התהליכים.פגיעה בהוגנות (fairness) ותגובתיות (rrsponsiveness).פתרון: לינוקס מפקיעה (preempt) את המעבד מתהליך אחד לטובת תהליך אחר, בעזרת התקן חומרה מיוחד – השעון.מערכת ההפעלה מבקשת מהשעון לשלוח פסיקה במרווחי זמן קבועים כדי להעביר את השליטה למערכת ההפעלה.כל הפסיקות, בפרט פסיקת שעון, מטופלות במצב גרעין, ואז הגרעין מחליף הקשר אם יש צורך.מערכות הפעלה - תרגול 614
יצירת חוט חדשפרמטרים:thread – מצביע למקום בו יאוחסן מזהה החוט החדש במקרה של סיום הפונקציה בהצלחה.attr – מאפיינים המתארים את תכונות החוט החדש, כגון האם החוט הוא חוט גרעין או חוט משתמש, האם ניתן לבצע לו join, כלומר להמתין לסיומו, וכו'. בד"כ נספק ערך NULL המציין חוט ברירת המחדל של המערכת, שניתן להמתין לסיומו.void* (*start_routine)(void*) מצביע לפונקציה שתהווה את קוד החוט. הערך המוחזר מפונקציה זו במקרה של סיומה הטבעי הינו ערך הסיום של החוט.arg – פרמטר שיסופק לפונקציה עם הפעלתה.מערכות הפעלה - תרגול 714
תרגול 8מנגנוני סנכרון: משתני תנאימנגנוני סנכרון: סמפוריםדוגמה: מימוש מנעול קוראים-כותביםסינכרון בגרעין לינוקס1מערכות הפעלה - תרגול 8
שחרור חוטים ממתיניםint pthread_cond_signal(pthread_cond_t *cond); משחררת את אחד החוטים הממתינים (הגינות לא מובטחת).int pthread_cond_broadcast(pthread_cond_t *cond);משחררת את כל החוטים הממתינים.כל החוטים מפסיקים להמתין על משתנה התנאי ועוברים להמתין על המנעול. החוטים יחזרו לפעילות בזה אחר זה (בסדר כלשהו, לאו דווקא הוגן) לאחר שינעלו מחדש את ה-mutex.שימו לב: אם אין אף חוט שממתין באותו רגע על משתנה התנאי cond, הפעולות חסרות השפעה (הסיגנל הולך לאיבוד ואינו נזכר הלאה).ערך מוחזר: הפונקציות תמיד מצליחות ומחזירות 0.מערכות הפעלה - תרגול 812
The exam text, the skills it tests, and the exact slides are already in context.