OS PyramidTechnion 234123 · Operating Systemsbasics → exam
Stage 4: Kernel Modules
OS-Winter2022-examCQuestion 4core20 pts
Full original question text (raw OCR)

שאלה 4 - מודולים (20 נק') 1. (2 נק') מודולים מאפשרים להוסיף לגרעין לינוקס, בזמן ריצה, קטעי קוד חדשים שרצים בהרשאות משתמש. הטענה נכונה: כן / לא נימוק: 2. (2 נק') האם ניתן ליצור 2 קבצי device בעלי אותו minor number? הטענה נכונה: כן / לא נימוק: 3. (3 נק') מני 2 הבדלים בין התקן תווים להתקן בלוקים תשובה: 4. (2 נק') נתונות הפקודות הבאות: 1. cat /dev/zero 2. echo "hi" > /dev/null 3. echo "hi" > /dev/random 4. cat /dev/null הקיפי את כל הפקודות אשר יתקבל בהן EOF נימוק: 5. (3 נק') המקרו MAJOR והמקרו MINOR מחזירים את המספר הראשי (major number) והמספר המשני (minor number) עבור התקן (device) מסוים. מהיכן הם שולפים אותם (כלומר איפה הם שמורים)? א. file descriptor של ההתקן ב. במבנה נתונים ייעודי של הגרעין (שהוא לא chrdevs) ג. בכניסות המתאימות במערך chrdevs ד. בתוך הinode של ההתקן. נימוק: 6. (4 נק') נתאר את התרחיש הבא: יצרנו 2 מודולים עם אותו הקוד בדיוק, ורק שמות המודולים הם שונים. כעת נטען את 2 המודולים עם major numbers שונים: M1, M2. כעת, ניצור שני קבצי device: 1. /dev/a בעל major number ששווה ל M1 2. /dev/b בעל major number ששווה ל M2 כאשר תהליך יפתח את dev/b/ ויבצע פעולה שתגרור קריאה לioctl, איזו טענה נכונה? A. הנתונים לא מספקים מספיק מידע כדי לדעת איזה מבין המודולים יבצע את הפעולה- זה תלוי בין היתר גם minor number שלהם. B. המודול M1 יבצע את הקריאה ioctl C. המודול M2 יבצע את הקריאה ioctl D. שני המודולים יבצעו את הקריאה נימוק: 7. (4 נק') נסתכל על קטע הקוד הבא: 1. #define MOD_NAME "MY_MODULE" 2. int my_major = 0; struct file_operations my_fops = { .open = my_open, .release = my_release, .read = my_read, .write= my_write, .llseek= NULL, .ioctl= my_ioctl, .owner= OWNER, }; 3. my_major = register_chrdev(my_major, MOD_NAME, &my_fops); בהנחה שקיים מודול בשם "MY_MODULE", ושכל הפונקציות של my_fops ממומשות כראוי, אילו מהטענות הבאות נכונה? A. בסיום שורה 3 יירשם דרייבר עם MAJOR NUMBER ששווה ל- 0 B. רישום הדרייבר לא יתבצע מכיוון שלא העברנו את הMINOR NUBER כפרמטר C. בסיום שורה 3 יירשם דרייבר עם MAJOR NUMBER שהמערכת תקצה D. רישום הדרייבר לא יתבצע מכיוון שב my_fops הפונקציה llseek מצביעה על NULL נימוק:

  1. 1· short_answer· 2 ptsKernel Modules

    (2 נק') מודולים מאפשרים להוסיף לגרעין לינוקס, בזמן ריצה, קטעי קוד חדשים שרצים בהרשאות משתמש. הטענה נכונה: כן / לא נימוק:

    libc syscall wrapper caching pitfallsHard link vs symlink inode behavior
  2. 2· short_answer· 2 ptsKernel Modules

    (2 נק') האם ניתן ליצור 2 קבצי device בעלי אותו minor number? הטענה נכונה: כן / לא נימוק:

    libc syscall wrapper caching pitfallsHard link vs symlink inode behavior
  3. 3· short_answer· 3 ptsKernel Modules

    (3 נק') מני 2 הבדלים בין התקן תווים להתקן בלוקים תשובה:

    libc syscall wrapper caching pitfallsHard link vs symlink inode behavior
  4. 4· short_answer· 2 ptsKernel Modules

    (2 נק') נתונות הפקודות הבאות: 1. cat /dev/zero 2. echo "hi" > /dev/null 3. echo "hi" > /dev/random 4. cat /dev/null הקיפי את כל הפקודות אשר יתקבל בהן EOF נימוק:

    libc syscall wrapper caching pitfallsHard link vs symlink inode behavior
  5. 5· mcq· 3 ptsKernel Modules

    (3 נק') המקרו MAJOR והמקרו MINOR מחזירים את המספר הראשי (major number) והמספר המשני (minor number) עבור התקן (device) מסוים. מהיכן הם שולפים אותם (כלומר איפה הם שמורים)? א. file descriptor של ההתקן ב. במבנה נתונים ייעודי של הגרעין (שהוא לא chrdevs) ג. בכניסות המתאימות במערך chrdevs ד. בתוך הinode של ההתקן. נימוק:

    Hard link vs symlink inode behavior
  6. 6· mcq· 4 ptsKernel Modules

    (4 נק') נתאר את התרחיש הבא: יצרנו 2 מודולים עם אותו הקוד בדיוק, ורק שמות המודולים הם שונים. כעת נטען את 2 המודולים עם major numbers שונים: M1, M2. כעת, ניצור שני קבצי device: 1. /dev/a בעל major number ששווה ל M1 2. /dev/b בעל major number ששווה ל M2 כאשר תהליך יפתח את dev/b/ ויבצע פעולה שתגרור קריאה לioctl, איזו טענה נכונה? A. הנתונים לא מספקים מספיק מידע כדי לדעת איזה מבין המודולים יבצע את הפעולה- זה תלוי בין היתר גם minor number שלהם. B. המודול M1 יבצע את הקריאה ioctl C. המודול M2 יבצע את הקריאה ioctl D. שני המודולים יבצעו את הקריאה נימוק:

    libc syscall wrapper caching pitfallsHard link vs symlink inode behavior
  7. 7· mcq· 4 ptsKernel Modules

    (4 נק') נסתכל על קטע הקוד הבא: 1. #define MOD_NAME "MY_MODULE" 2. int my_major = 0; struct file_operations my_fops = { .open = my_open, .release = my_release, .read = my_read, .write= my_write, .llseek= NULL, .ioctl= my_ioctl, .owner= OWNER, }; 3. my_major = register_chrdev(my_major, MOD_NAME, &my_fops); בהנחה שקיים מודול בשם "MY_MODULE", ושכל הפונקציות של my_fops ממומשות כראוי, אילו מהטענות הבאות נכונה? A. בסיום שורה 3 יירשם דרייבר עם MAJOR NUMBER ששווה ל- 0 B. רישום הדרייבר לא יתבצע מכיוון שלא העברנו את הMINOR NUBER כפרמטר C. בסיום שורה 3 יירשם דרייבר עם MAJOR NUMBER שהמערכת תקצה D. רישום הדרייבר לא יתבצע מכיוון שב my_fops הפונקציה llseek מצביעה על NULL נימוק:

    libc syscall wrapper caching pitfalls

The exam question — original PDF

pages 9, 10, 11

Exactly as it appears on the exam paper.

loading page 9
loading page 10
loading page 11

Built from these components

Ordered basic → advanced. Master the earlier ones first.

L3libc syscall wrapper caching pitfallsL3Hard link vs symlink inode behavior

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.

Lecture 11–12slide 34inodes & *stat syscalls

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

Lecture slide — text above is the material (no raster available).
Tutorial 2slide 18קריאת המערכת exit()שאלה: למה בכלל לקרוא ל-exit(status) , אם אפשר פשוט לרשום return status בסוף פונקציית ה-main?תשובה:...

קריאת המערכת exit()שאלה: למה בכלל לקרוא ל-exit(status) , אם אפשר פשוט לרשום return status בסוף פונקציית ה-main?תשובה: main היא לא באמת הפונקציה הראשית של התכנית...main() נקראת ע"י __libc_start_main() שאוספת את ערך החזרה של main() וקוראת ל-exit().int __libc_start_main(…) { …… exit(main(…));}מסקנה: הפונקציה exit תמיד נקראת לסיום סטנדרטי של התוכנית.מערכות הפעלה - תרגול 218

Tutorial 2slide 22קריאות המערכת getpid(), getppid()pid_t getpid();קריאת מערכת המחזירה לתהליך הקורא את ה-pid של עצמו

קריאות המערכת getpid(), getppid()pid_t getpid();קריאת מערכת המחזירה לתהליך הקורא את ה-pid של עצמו.pid_t getppid();קריאת מערכת המחזירה את ה-PID של תהליך האב של התהליך הקורא.שאלה: מה המשמעות של getppid() == 1 עבור תהליך משתמש טיפוסי?תשובה: תהליך האב הוא init. קורה למשל אם תהליך הבן יתום.מערכות הפעלה - תרגול 222

Tutorial 2slide 24דוגמת קודמסכמתprintf("pid = %d\n", getpid());pid_t pid = fork();if (pid == 0) { printf("child pid = %d\n", getpid());...

דוגמת קודמסכמת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

Tutorial 13slide 13בלינוקס יש שני סוגי קישורים (links)soft / symbolic linkln -s src dstקישור סימבולי הוא קובץ חדש עם inode נפרד מזה של ה...

בלינוקס יש שני סוגי קישורים (links)soft / symbolic linkln -s src dstקישור סימבולי הוא קובץ חדש עם inode נפרד מזה של הקובץ המקורי.כתיבה דרך הקישור כותבת לקובץ אליו הוא מצביע.מחיקת הקישור (באמצעות הפקודה rm) לא תמחק את הקובץ המוצבע.אפשר ליצור קישורים סימבוליים גם לקובץ שלא קיים.hard linkln src dstקישור קשיח הוא שם נרדף לקובץ המקורי כי הוא מצביע ישירות ל-inode של הקובץ המקורי.כתיבה דרך הקישור כותבת לקובץ אליו הוא מצביע.מחיקת הקישור תקטין את מונה הקישורים של הקובץ (כפי שנשמר ב-inode).הקובץ יימחק מהדיסק רק כאשר כל ה-hard links אליו יימחקו.מערכות הפעלה - תרגול 1213

Tutorial 13slide 19>> rm /A/helloמערכות הפעלה - תרגול 1219inode #2type=dirdatanameinode #A5B7inode #5type=dirdatanameinode #…………inode #1...

>> rm /A/helloמערכות הפעלה - תרגול 1219inode #2type=dirdatanameinode #A5B7inode #5type=dirdatanameinode #…………inode #13type=soft_linkdatainode #7type=dirdatanameinode #soft13……data block/A/helloקישור "שבור"!dangling link

Ask Gemini
OS-Winter2022-examC · Q4 — question + its material already loaded
Pick a shortcut above or ask anything about this question.
The exam text, the skills it tests, and the exact slides are already in context.