שאלת מבחן במערכות הפעלה - האוניברסיטה הפתוחה 2015 - אותות
מתי הכרחי לחסום סיגנלים (
א. כאשר תהליך עומד לגשת למבנה נתונים שגם אחד או יותר מה-
ב. כאשר תהליך שמטרתו לפגוע במערכת (וירוס, למשל) רוצה למנוע מתהליכים אחרים לשלוח לו סיגנלים שיגרמו למותו (כגון
ג. כאשר תהליך נמצא בשליטת
ד. כאשר תהליך נמצא בכניסה לשגרת טיפול בפסיקה.
signals)? תזכורת: חסימת סיגנלים מתבצעת על ידי עדכון של מסכת סיגנלים חסומים (blocked signals mask) והעברתה ל sigaction.א. כאשר תהליך עומד לגשת למבנה נתונים שגם אחד או יותר מה-
signal handlers בתוכנית ניגשים אליו.ב. כאשר תהליך שמטרתו לפגוע במערכת (וירוס, למשל) רוצה למנוע מתהליכים אחרים לשלוח לו סיגנלים שיגרמו למותו (כגון
SIGKILL).ג. כאשר תהליך נמצא בשליטת
debugger ורוצה להשתחרר ממנו על ידי חסימת סיגנל SIGSTOP.ד. כאשר תהליך נמצא בכניסה לשגרת טיפול בפסיקה.
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
האוניברסיטה הפתוחהמועד 822015סמסטר ב
★★★★★
אותותתנאי מרוץקטע קריטיסנכרון
שגרת טיפול בסיגנל יכולה להפריע לריצת התהליך בכל נקודת זמן. חשבו מה עלול לקרות אם ההפרעה מתרחשת באמצע עדכון של מבנה נתונים משותף.
התשובה הנכונה היא א'. הסיבה לכך היא למנוע תנאי מרוץ (race condition). כאשר תהליך ניגש למבנה נתונים משותף, הוא נכנס לקטע קריטי. אם יגיע סיגנל בזמן שהתהליך נמצא בתוך הקטע הקריטי (כלומר, מבנה הנתונים במצב לא עקבי), ושגרת הטיפול בסיגנל (signal handler) ניגשת גם היא לאותו מבנה נתונים, עלולה להתרחש השחתה של הנתונים. חסימת הסיגנל לפני הכניסה לקטע הקריטי מבטיחה שה-handler לא ירוץ ויפריע לפעולת התהליך על המשאב המשותף. לאחר היציאה מהקטע הקריטי, ניתן לבטל את חסימת הסיגנל בבטחה.
שאר האפשרויות שגויות:
שאר האפשרויות שגויות:
- ב', ג': לא ניתן לחסום את הסיגנלים
SIGKILLו-SIGSTOP. זוהי הגנה של מערכת ההפעלה המאפשרת לה תמיד לסיים או לעצור תהליכים, גם אם הם זדוניים או תקועים. - ד': כניסה לשגרת טיפול בפסיקה (interrupt) היא פעולה ברמת הליבה (kernel), בעוד שחסימת סיגנלים באמצעות
sigactionהיא מנגנון ברמת המשתמש (user-space). הליבה אכן חוסמת פסיקות נוספות בזמן טיפול בפסיקה, אך זהו מנגנון נפרד ושונה מחסימת סיגנלים על ידי תהליך.