קריאות מערכת ההפעלה הקשורות לתהליכיםכאשר משתמש רוצה לקבל מידע על התהליכים במערכת ההפעלה, עליו להשתמש בקריאות המערכת הבאות:
נפתור בעיה זו, על ידי ההנחה כי הצורה הנכונה של הקריאה לפונקציה היא כרונולוגית, ולכן בגלל שבעצם getprio התבצעה לפני יצירת התהליך החדש – זה בסדר שהחזרנו SYSERR. אולם, ישנה בעייה נוספת: יתכן שאחרי פקודת ה-restore נכנס תהליך אחר, ומת התליך בעל ה-id הנ"ל, ורק אז אנו מחזירים את עדיפותו. זוהי שגיאה, כי אם התהליך מת, אין לנו גישה לנתונים אלו לגביו. כדי לתקן את הבאג, יש לשמור את העדיפות במשתנה מקומי לפני ה-restore, ואז להחזיר את ערך המשתנה המקומי. למשל: retValue = pptr->pprio; restore(ps); return retValue; בפונקציה chprio באג זה נפתר. chprio(): בפונקציה זו ישנם שני באגים. הראשון: אמורה להיות בפונקציה זו קריאה ל-resched, ובפועל אין כזו. השני: לא שינינו את המקום של התהליך בתור ה-ready. פתרון אפשרי לבאגים: לפני הפקודה restore(ps), נוסיף את הקוד הבא: if (pptr->pstate == PRREADY) { dequeue(pid); ready(pid); } resched(); proc.h
תגיות המסמך: |
תוכן העניינים:
שיתוף: |
תודה
הסברתם את זה, כמו שאר הנושאים, באופן הכי ברור שיש.