Full original question text (raw OCR)
נא לסמן נכון / לא נכון עבור כל טענה. כל טענה מזכה ב-3 נקודות (8 טענות בסה"כ). בנימוק, יש להתייחס לממשק ה-sockets: האם ממשק זה קשור לטענה? אם כן, כיצד?
מערכת ההפעלה לינוקס מממשת את הפרוטוקול HTTP.
libc syscall wrapper caching pitfallsמערכת ההפעלה לינוקס מממשת את הפרוטוקול TCP.
libc syscall wrapper caching pitfallsמערכת ההפעלה לינוקס מממשת את הפרוטוקול UDP.
libc syscall wrapper caching pitfallsמערכת ההפעלה לינוקס מממשת את הפרוטוקול IP.
libc syscall wrapper caching pitfallsמערכת ההפעלה לינוקס מממשת את הפרוטוקול Ethernet.
libc syscall wrapper caching pitfallsכדי לשלוח הודעה ב-UDP, המשתמש חייב לציין את מספר הפורט בצד המקבל.
Process state transitionsכדי לשלוח הודעה ב-UDP, המשתמש חייב לציין את כתובת ה-IP של המקבל.
Process state transitionsכדי לשלוח הודעה ב-UDP, המשתמש חייב לציין את כתובת ה-MAC של המקבל.
Process state transitions
The exam question — original PDF
pages 8, 9Exactly 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.
Process states created service provided ready preempted scheduled waiting finished or killed requires “slow” service (notably I/O) zombie running termination process is process is status collected runnable sleeping OS (234123) - processes & signals 4
קריאת המערכת wait()pid_t wait(int *wstatus);פעולה: ממתינה עד אשר אחד מתהליכי הבן יסיים.פרמטרים:wstatus – מצביע למשתנה בו יאוחסנו פרטים על תהליך הבן שהסתיים.למשל, wstatus יכיל את ערך הסיום של הבן (הערך שהעביר כארגומנט ל-exit()). ערך הסיום מופיע בבית השני מתוך ארבעת בתי ה- wstatus. כדי לחלץ אותו יש לנצל את המאקרו WEXITSTATUS(*wstatus), המחזיר (*wstatus>>8) & 0xff. במידה ולא מעוניינים בסטטוס הבן שסיים, אפשר להעביר NULL.ערך מוחזר:אם אין בנים או שכל הבנים כבר סיימו ובוצע להם wait() – יוחזר מיד הערך -1.אם יש בנים שסיימו ועדיין לא בוצע עבורם wait() (כלומר הם במצב zombie – יפורט בשקופיות הבאות) – יוחזר מיד ה-pid של אחד הבנים הנ"ל.אחרת – המתנה עד שבן כלשהו יסיים.מערכות הפעלה - תרגול 214איך תהליך אב יכול לחכות לסיום כל תהליכי הבן?מבינים את החישוב?
קריאת המערכת exit()שאלה: למה בכלל לקרוא ל-exit(status) , אם אפשר פשוט לרשום return status בסוף פונקציית ה-main?תשובה: main היא לא באמת הפונקציה הראשית של התכנית...main() נקראת ע"י __libc_start_main() שאוספת את ערך החזרה של main() וקוראת ל-exit().int __libc_start_main(…) { …… exit(main(…));}מסקנה: הפונקציה exit תמיד נקראת לסיום סטנדרטי של התוכנית.מערכות הפעלה - תרגול 218
סיום תהליכיםכדי לאפשר לאב לקבל מידע על סיום הבן, לאחר שתהליך מסיים את פעולתו הוא עובר למצב מיוחד – zombie – שבו התהליך קיים כרשומת נתונים בלבד ללא שום ביצוע משימה.הרשומה נמחקת לאחר שהאב קיבל את המידע על סיום הבן באמצעות wait().שאלה: מה קורה לתהליך "יתום" (orphan), כלומר תהליך שסיים לאחר שאביו כבר סיים בלי לקרוא ל-wait() ?התהליך הופך להיות בן של init.התהליך init ממשיך להתקיים לאורך כל פעולת המערכת.אחד מתפקידיו העיקריים – המתנה לכל בניו כדי לפנות את נתוניהם לאחר סיומם.מערכות הפעלה - תרגול 219
קריאות המערכת getpid(), getppid()pid_t getpid();קריאת מערכת המחזירה לתהליך הקורא את ה-pid של עצמו.pid_t getppid();קריאת מערכת המחזירה את ה-PID של תהליך האב של התהליך הקורא.שאלה: מה המשמעות של getppid() == 1 עבור תהליך משתמש טיפוסי?תשובה: תהליך האב הוא init. קורה למשל אם תהליך הבן יתום.מערכות הפעלה - תרגול 222
דוגמת קודמסכמתprintf("pid = %d\n", getpid());pid_t pid = fork();if (pid == 0) { printf("child pid = %d\n", getpid()); char* args[] = {"/bin/date", NULL}; execv(args[0], args); printf("This should not be printed\n");} else { wait(NULL); printf("parent pid = %d\n", getpid());}פלט לדוגמה:pid = 8919child pid = 8920Sun Oct 29 00:31:32 IDT 2017parent pid = 8919מערכות הפעלה - תרגול 224
The exam text, the skills it tests, and the exact slides are already in context.