Processes & Signalshigh-yield
This topic covers the fundamental concepts of processes, including their creation (`fork`, `exec`), termination, and states, as well as inter-process communication basics. It also delves into signals, explaining their delivery mechanism, handling (`sigaction`), and blocking (`sigprocmask`). Understanding these concepts is crucial for comprehending how programs execute and interact within an operating system, making them a recurring and important part of OS exams.
Where to learn it
How to study it
- Master the semantics of `fork()` and `exec()`: understand memory space duplication, file descriptor inheritance, and how program execution changes. Pay special attention to `fork_exec_semantics`.
- Thoroughly understand signal delivery, signal masks, and the difference between reliable and unreliable signals. Practice writing and analyzing code that uses `sigaction` and `sigprocmask`.
- Trace the execution flow of C code snippets involving multiple processes and signals. Pay attention to `syscall_mechanism` and how system calls like `fork` and `exec` interact with the kernel.
What the exam asks
Exam questions typically involve analyzing C code snippets that use `fork`, `exec`, `wait`, `kill`, and signal handling functions, asking to predict output, identify errors, or explain behavior under-the-hood behavior.
The components, basic → advanced
These are the atomic skills this stage is built from. Learn them in this order — later ones assume the earlier ones.
Exam subsections in this stage (20 parts across 10 questions)
חלק 1 - קריאות מערכת
- 1· mcq· 5 pts
(5 נק') היכן הגרעין שומר את ה-PID של התהליך? a. בספריה .libc b. במחסנית המשתמש. c. במחסנית הגרעין. d. בערימה. e. במתאר התהליך (ה-PCB). f. בתור הריצה (runqueue)
fork/exec address-space semanticslibc syscall wrapper caching pitfalls - 3· mcq· 5 pts
(5 נק') מהי התקלה שנוצרה בעקבות השינוי? a. אם שני תהליכים קוראים ל-()getpid בו-זמנית עלול להיווצר race condition. b. fork().b עלולה לחזור עם אותו ערך בתהליך האב ובתהליך הבן. c. fork().C עלולה להיכשל במקרים בהם המימוש המקורי היה מצליח. d. getpid().d עלולה להחזיר pid של תהליך אחר. e. getpid().e עלולה להחזיר "1-". f. execv() .f עלולה להיכשל במקרים בהם המימוש המקורי היה מצליח.
System call trap and kernel entryfork/exec address-space semanticslibc syscall wrapper caching pitfalls - 4· mcq· 5 pts
(5 נק') השלימו את התיקון הנדרש בשורה 10: a. if (res == 0) cached_pid = -1; b. if (res == 0) cached_pid = getpid(); c. if (res == 0) return cached_pid; d. if (res > 0) cached_pid = -1; e. if (res > 0) cached_pid = getpid(); f. if (res > 0) return cached_pid;
System call trap and kernel entryfork/exec address-space semanticslibc syscall wrapper caching pitfalls - 5· mcq· 5 pts
(5 נק') מהי התקלה בקוד לעיל ומתי היא תתרחש? a. הסיגנל לא יטופל אם האב שלח את הסיגנל לפני שהבן התחיל לרוץ. b. הסיגנל לא יטופל אם האב שלח את הסיגנל אחרי שהבן סיים את שורה 8. c. הסיגנל לא יטופל ללא תלות בסדר הזימון של התהליכים. d. שורה 2 תדפיס ערך שגוי אם האב שלח את הסיגנל לפני שהבן התחיל לרוץ. e. שורה 2 תדפיס ערך שגוי אם האב שלח את הסיגנל אחרי שהבן סיים את שורה 8. f. שורה 2 תדפיס ערך שגוי ללא תלות בסדר הזימון של התהליכים.
Signal delivery and handler timing
שאלה 1
- א.· mcq· 5 pts
בעבור תהליך כלשהו, איזה מבין ההיגדים הבאים מתאר שינוי מצבים (state change) שהוא בלתי אפשרי 1. [היגד:] שינוי ממצב waiting אל מצב running 2. [היגד:] שינוי ממצב waiting אל מצב ready 3. [היגד:] שינוי ממצב ready אל מצב running 4. [היגד:] שינוי ממצב running אל מצב ready 5. [היגד:] שינוי ממצב running אל מצב zombie 6. יש יותר מהיגד אחד שמתאר שינוי מצבים בלתי אפשרי
SRT / preemptive Gantt construction - ג.· mcq· 5 pts
איזה מבין ההיגדים הבאים נכון 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 - ד.· mcq· 5 pts
איזה מבין ההיגדים הבאים נכון 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 - ה.· mcq· 5 pts
איזה מבין ההיגדים הבאים איננו נכון? (תזכורת: 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
IPC
- 6· mcq· 4 pts
(4 נק') בהכרח נקבל קוד יציאה (exit status אפס. כן / לא (הקיפי) נימוק:
libc syscall wrapper caching pitfallsMutex correctness and deadlock avoidanceSRT / preemptive Gantt construction - 7· code· 4 pts
(4 נק') הציעי הוספה של קריאת מערכת אחת בלבד (ושום דבר אחר) בשורה 25 שתדפיס למסך פלט כלשהו וגם תמנע יצירת חוטים. שורת הקוד שנוסיף: נימוק:
libc syscall wrapper caching pitfallsPipe IPC semantics
תקשורת בין תהליכים
- 4· mcq· 5 pts
סטטיק וּקֶרְן-אֶל שמעו שסטודנטים רבים בקורס עבדו במהלך יום הסטודנט על תרגיל הבית שנדחה ונהנו יותר מאשר בהופעות. בתגובה נזעמת, סטטיק התחבר לשרת הפקולטה והריץ את התוכנית הנ"ל N פעמים באופן סדרתי (דוגמה ב-bash, כאשר a . out הוא קובץ ההרצה של התכנית הנ"ל): >> for i in {1..N}; do ./a.out; done (5 נק') מה המספר המינימלי של סיגנלים שצריך לשלוח באמצעות kill על מנת להרוג את כל התהליכים החדשים שסטטיק יצר? a. 0 b. 1 c. N d. N/2 e. 2N f. לא ניתן לדעת, תלוי בתזמון של התהליכים נימוק:
Signal delivery and handler timing - 5· mcq· 5 pts
(5 נק') מה תהיה התשובה עבור הסעיף הקודם אם נסיר את שורות 6-7 מהקוד? a. 0 b. 1 c. N d. N/2 e. 2N f. לא ניתן לדעת, תלוי בתזמון של התהליכים נימוק:
fork/exec address-space semanticslibc syscall wrapper caching pitfallsSignal delivery and handler timing
טבלת הקבצים וסנכרון
- 2· mcq· 5 pts
הקיפו את התשובה המבטאת את כל אופציות ההדפסה למסך של קוד זה: א. ABCC או BACC ב. CA או AC ג. BAC או ABC ד. ABCC או BCAC או BACC ה. CCA או CAC ו. AC
System call trap and kernel entryPer-process file descriptor tableHard link vs symlink inode behavior - 3· mcq· 5 pts
הקיפו את התשובה המבטאת את כל אופציות ההדפסה למסך של קוד זה: א. ABCC או BACC ב. CA או AC ג. BAC או ABC ד. ABCC או BCAC או BACC ה. CCA או CAC ו. AC
System call trap and kernel entryPer-process file descriptor tableHard link vs symlink inode behavior
תזמון וסנברון
- 11· short_answer· 3 pts
במקרים מסוימים, cp יעבור למדיניות fifo לאחר שהתחיל לבצע את הפקודה עם execv. תארו בקצרה תרחיש בו דבר זה מתקיים.
fork/exec address-space semantics - 12· short_answer· 3 pts
במקרים מסוימים, cp או אחד מבניו יכול לרוץ לעד עם מדיניות other. תארו בקצרה תרחיש בו דבר זה מתקיים.
Process state transitions
מערכות קבצים
שאלה 2 - תהליכים
תזמון וסנכרון