This question spans 2 stages — each part below is tagged with, and links to, the stage it belongs to.
נועה רוצה לחבר למחשב לינוקס שלה דרייבר חדש לצורך הפעלת פלייבק ביום הסטודנט. לצורך כך היא טוענת דרייבר חדש למחשב שלה בשם "/dev/playback". נועה מעדכנת את מימוש קריאת המערכת open בלינוקס באופן הבא: #define func printf int sys_open(const char *path, int flags, mode_t mode) { ;("n\מי ששותה רק מים יש לו הרבה סודות")func /*original system call code*/ ;("n\גבינה חינם יש רק במלכודת עכברים")func } return ... נועה מממשת את הפונקציה open בדרייבר שלה באופן הבא: int my_open(struct inode *inode, struct file *filp) { ;("n\אל תרוצי כשיורים עלייך כי תמותי עייפה")func return 0; }
Full original question text (raw OCR)
1. נתון הסקריפט הבא: 1. cat/dev/zero > trilili.txt 2. cat /dev/null > tralala.txt 3../ching> /dev/null 4../bling > /dev/full ניתן להניח ששני קבצי ההרצה bling - ching קיימים בתיקיית העבודה הנוכחית ושניהם מדפיסים לערוץ הפלט הסטנדרטי.
האם הסקריפט יסיים את ריצתו בהצלחה וללא שגיאות? כן / לא נימוק:
System call trap and kernel entryfork/exec address-space semanticslibc syscall wrapper caching pitfallsכעת נסיר את שורות 1 ו- 2. האם כעת הסקריפט יסיים את ריצתו בהצלחה וללא שגיאות? כן / לא נימוק:
System call trap and kernel entryfork/exec address-space semanticslibc syscall wrapper caching pitfallsהאם הקוד יעבוד? כן / לא במידה ולא, הציעי תיקון של שורה אחת כך שהוא יעבוד. נימוק:
System call trap and kernel entryfork/exec address-space semanticslibc syscall wrapper caching pitfallsלאילו מבני נתונים הגרעין ייגש במהלך הטיפול בקריאת מערכת זו? עבור כל מבנה נתונים, סמני אם ניגשים אליו, ובמידה וכן הסבירי בקצרה מדוע. מבין כל מבני הנתונים אליהם ניגשים, מספרי את סדר הגישות. מבנה הנתונים | האם ניגשים | סיבת הגישה | סדר הגישה File descriptor table (FDT) inode bitmap file_operations chrdevs vm_area_struct data blocks pointers array inode struct file (file object)
libc syscall wrapper caching pitfallsHard link vs symlink inode behaviorSRT / preemptive Gantt constructionמה יהיה הפלט של השורה הנ"ל? הסבירי. a. מי ששותה רק מים יש לו הרבה סודות גבינה חינם יש רק במלכודת עכברים אל תרוצי כשיורים עלייך כי תמותי עייפה b. מי ששותה רק מים יש לו הרבה סודות אל תרוצי כשיורים עלייך כי תמותי עייפה גבינה חינם יש רק במלכודת עכברים c. אל תרוצי כשיורים עלייך כי תמותי עייפה מי ששותה רק מים יש לו הרבה סודות גבינה חינם יש רק במלכודת עכברים d. אל תרוצי כשיורים עלייך כי תמותי עייפה מי ששותה רק מים יש לו הרבה סודות גבינה חינם יש רק במלכודת עכברים e. f. אף תשובה אינה נכונה נימוק:
System call trap and kernel entryfork/exec address-space semanticslibc syscall wrapper caching pitfallsנועה רוצה להוסיף לדרייבר תמיכה בפעולת mute להתקן. דרך איזה file operation נכון לממש אותה? הסבירי. a. open b. release c. flush d. Other: נימוק:
System call trap and kernel entryfork/exec address-space semanticslibc syscall wrapper caching pitfallsלאחר הפרידה, נועה רוצה להוסיף התקן נוסף שמפעיל פלייבק של שירי דיכאון. האם אפשרי להשתמש בהתקן ללא הוספת דרייבר חדש? כן / לא נימוק:
System call trap and kernel entryfork/exec address-space semanticslibc syscall wrapper caching pitfallsקבעי האם הטענה הבאה נכונה: מודול חייב להגדיר קובץ ב - dev/ שאיתו הוא יעבוד. במילים אחרות, לכל מודול טעון יש קובץ אחד (לפחות) ב- dev/ כן/לא נימוק:
System call trap and kernel entryfork/exec address-space semanticslibc syscall wrapper caching pitfalls
The exam question — original PDF
pages 2, 3, 4Exactly 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.
SRTF (Shortest-Remaining-Time First) • Assume different jobs may arrive at different times • SJF is not optimal – As it’s not preemptive, and – A short job might arrive while a very long job is running => recall: convoy effect • SRTF is just like SJF but – Is allowed to use preemption – Hence, it’s “optimal” (assuming a zero context-switch cost etc.) • Whenever a new job arrives, or an old job terminates – SRTF schedules the job with the shortest remaining time – Thereby making an optimal decision 39 OS (234123) - scheduling
inodes & *stat syscalls • lstat(2) – Exactly the same as stat(2) if applied to a hard link – But if applied to a symlink, would return the information of this symlink (not to the target of the symlink) – In this case, POSIX says that the only fields within the stat structure that you can portably use are: • st_mode which will specify that the file is a symlink • st_size symlink content length (= length of target filepath) – The value of the rest of the fields could be valid, but it is not specified by POSIX – Notably, it is not specified if a symlink has a corresponding inode • Will be discussed shortly OS (234123) - files 34
אחרי fork()parentint main() { int x = 0; pid_t p = fork(); if (p == 0) { x = 1; } else { x = 2; }}sonint main() { int x = 0; pid_t p = fork(); if (p == 0) { x = 1; } else { x = 2; }}מערכות הפעלה - תרגול 210
הדפסה מתואמת למסךשימוש ב-wait() יכול לפתור את הבעיה שראינו קודם כאשר מדפיסים למסך במקביל משני תהליכים:int main() { pid_t p = fork(); if (p > 0) { // parent waits for child wait(NULL); } printf(“hello”); return 0;}מערכות הפעלה - תרגול 215
קריאת המערכת waitpid()pid_t waitpid(pid_t pid, int *wstatus, int options);פעולה: המתנה לסיום בן ספציפי שמספרו pid.wait(), waitpid() הן קריאות מערכת חוסמות.כלומר חוסמות את התקדמות התהליך עד להתרחשות תנאי מסוים.באנגלית: blocking system calls.הארגומנט options מאפשר לשנות את ההתנהגות של waitpid() לקריאת מערכת לא חוסמת.אם options==WNOHANG קריאת המערכת תחזור מיד, כאשר ערך חזרה 0 משמעותו שאף תהליך בן עוד לא סיים, ואילו ערך חזרה חיובי הוא ה-pid של תהליך בן שסיים ונמצא עדיין במצב zombie.מערכות הפעלה - תרגול 216
קריאת המערכת exit()שאלה: למה בכלל לקרוא ל-exit(status) , אם אפשר פשוט לרשום return status בסוף פונקציית ה-main?תשובה: main היא לא באמת הפונקציה הראשית של התכנית...main() נקראת ע"י __libc_start_main() שאוספת את ערך החזרה של main() וקוראת ל-exit().int __libc_start_main(…) { …… exit(main(…));}מסקנה: הפונקציה exit תמיד נקראת לסיום סטנדרטי של התוכנית.מערכות הפעלה - תרגול 218
קריאות המערכת 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
אתחול תהליכים בלינוקסמשתמשים מתחברים לעבודה בלינוקס דרך מסופים (terminal).מסוף = מסך + מקלדת (מקומי או מרוחק).התהליך init יוצר תהליך בן עבור כל מסוף, אשר טוען ומבצע את המשימות הבאות לפי הסדר:איתחול של המסוף.התחברות של המשתמש עם שם משתמש וסיסמא באמצעות תכנית login.אם אושרה כניסת המשתמש: קריאה לתוכנית shell(כמו tcsh או bash) המאפשרת למשתמש להעביר פקודות למערכת ההפעלה.מערכות הפעלה - תרגול 225
דוגמה לשימוש בתהליכים - shellממשק שורת פקודה (command line).ייעוד עיקרי: לקבל פקודות ולבצע אותן באופן סדרתי.ה-shell מייצר תהליך בן עבור כל פקודה על-מנת לבצע אותה.כל פקודה ניתן להריץ בחזית (foreground) או ברקע (background).הרצה בחזית: האב (shell) ממתין לסיום הבן לפני קריאת הפקודה הבאה.הרצה ברקע: האב (shell) עובר מיד לקריאת הפקודה הבאה.ייעוד נוסף: להציג קבצים ותיקיות על-מנת לסייר במערכת.דוגמה חיה:https://www.tutorialspoint.com/unix_terminal_online.phpמערכות הפעלה - תרגול 226
דוגמת FCFSaverageResponseTime = (10 + 20 + 30) / 3 = 20כעת נסיר את הנחה 1 ("כל התהליכים רצים למשך אותו זמן"). לכל תהליך זמן ריצה משלו.תוכלו לחשוב על דוגמה שבה FCFS אינו יעיל?מערכות הפעלה - תרגול 59כל התהליכים רצים למשך אותו זמן.כל התהליכים מגיעים באותו זמן (t=0).אם תהליך התחיל לרוץ, אז הוא ירוץ עד לסיומו ללא הפסקות.התהליכים משתמשים רק במעבד ולא מבצעים I/O.זמן הריצה של כל התהליכים ידוע מראש.
אפקט השיירה (convoy effect)averageResponseTime = (100 + 110 + 120) / 3 = 110אלגוריתם FCFS עלול לסבול מ"אפקט השיירה": מצב שבו תהליך אחד ארוך מעכב הרבה תהליכים קצרים. מערכות הפעלה - תרגול 510
בלינוקס יש שני סוגי קישורים (links)soft / symbolic linkln -s src dstקישור סימבולי הוא קובץ חדש עם inode נפרד מזה של הקובץ המקורי.כתיבה דרך הקישור כותבת לקובץ אליו הוא מצביע.מחיקת הקישור (באמצעות הפקודה rm) לא תמחק את הקובץ המוצבע.אפשר ליצור קישורים סימבוליים גם לקובץ שלא קיים.hard linkln src dstקישור קשיח הוא שם נרדף לקובץ המקורי כי הוא מצביע ישירות ל-inode של הקובץ המקורי.כתיבה דרך הקישור כותבת לקובץ אליו הוא מצביע.מחיקת הקישור תקטין את מונה הקישורים של הקובץ (כפי שנשמר ב-inode).הקובץ יימחק מהדיסק רק כאשר כל ה-hard links אליו יימחקו.מערכות הפעלה - תרגול 1213
>> rm /A/helloמערכות הפעלה - תרגול 1219inode #2type=dirdatanameinode #A5B7inode #5type=dirdatanameinode #…………inode #13type=soft_linkdatainode #7type=dirdatanameinode #soft13……data block/A/helloקישור "שבור"!dangling link
The exam text, the skills it tests, and the exact slides are already in context.