OS PyramidTechnion 234123 · Operating Systemsbasics → exam
Stage 1: Introduction
2017B_Spring_AQuestion 1core25 pts

נתון הקוד של התוכנית C הבאה. הבהרה: uint32_t מייצג טיפוס שלם אי-שלילי של 32-ביט. באופן דומה uint64_t מייצג טיפוס שלם אי-שלילי של .64-ביט הנחה: המערכת היא לינוקס 32-ביט כפי שנלמדה בתירגולים. 1 uint64_t extend(uint32_t low, uint32_t high) { 2 uint64_t lsw = (uint64_t)low; // convert to 64 bit 3 uint64_t msw = (uint64_t)high << 32; 4 return msw | lsw; 5 } 6 7 int main(int argc, char* argv[]) { 8 // ... 9 uint64_t l = extend(0x1234, 0x51); 10 // ... 11 }

Full original question text (raw OCR)

שאלה 1 - קריאות לפונקציות נתון הקוד של התוכנית C הבאה. הבהרה: uint32_t מייצג טיפוס שלם אי-שלילי של 32-ביט. באופן דומה uint64_t מייצג טיפוס שלם אי-שלילי של .64-ביט הנחה: המערכת היא לינוקס 32-ביט כפי שנלמדה בתירגולים. 1 uint64_t extend(uint32_t low, uint32_t high) { 2 uint64_t lsw = (uint64_t)low; // convert to 64 bit 3 uint64_t msw = (uint64_t)high << 32; 4 return msw | lsw; 5 } 6 7 int main(int argc, char* argv[]) { 8 // ... 9 uint64_t l = extend(0x1234, 0x51); 10 // ... 11 }

  1. א· trace· 5 ptsIntroduction

    (5 נק') השלימו את תמונת המחסנית בהרצת התוכנית כאשר היא נמצאת בשורה 4 לעיל. הסבירו את תשובתכם לפני הקריאה ב-main כתובת החזרה return address Old esi Old edi Old ebx

    libc syscall wrapper caching pitfalls
  2. ב· short_answer· 5 ptsIntroduction

    (5 נק') באיזה רגיסטר או רגיסטרים תוחזר תוצאת החישוב ומה יהיו הערכים ברגיסטרים אלו? הסבר.

    libc syscall wrapper caching pitfalls
  3. ג· short_answer· 5 ptsIntroduction

    (5 נק') בהנחה ש-main עושה שימוש בכל הרגיסטרים לפני הקריאה ל-extend ולאחר הקריאה ל-extend אילו רגיסטרים חייבים להישמר על-ידי main טרם הקריאה ל-extend? הסבר.

    libc syscall wrapper caching pitfalls
  4. ד· trace· 5 ptsIntroduction

    (5 נק') בתרגולים ראינו שניתן במקרים מסויימים להגדיר פונקציות עם קונבנציית קריאה בסגנון FASTCALL. באופן דומה לסעיף א, השלימו את מצב המחסנית בשורה 4 בתוכנית לעיל, כאשר מוסיפים את השורה הבאה לפני הגדרת הפונקציה extend (נניח בשורה 0): unsigned long long extend(unsigned int low, unsigned int high) __attribute__((regparm(2))); return address

    libc syscall wrapper caching pitfalls
  5. ה· code· 5 ptsIntroduction

    (5 נק') הצג מימוש קצר ככל האפשר ב-assembly לפונקציה extend מסעיף ד. הסבר את המימוש:

    libc syscall wrapper caching pitfalls

The exam question — original PDF

pages 2, 3, 4

Exactly as it appears on the exam paper.

loading page 2
loading page 3
loading page 4

Built from these components

Ordered basic → advanced. Master the earlier ones first.

L3libc syscall wrapper caching pitfalls

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.

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

Ask Gemini
2017B_Spring_A · Q1 — 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.