28
הההההה ההההה ההההה1 1 – ההההה הההההה ה-Linux: הההה

מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

  • View
    261

  • Download
    14

Embed Size (px)

Citation preview

Page 1: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה

המשך :Linux- – ניהול זיכרון ב11תרגול

Page 2: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 2(c) 2003 ארז חדד

(1תוכן התרגול )מתאר זיכרון

מתאר אזור זיכרוןטבלאות דפים

טבלאות הדפים של תהליכיםיצירת תהליך חדשTLBטבלאות דפים של הגרעין

– טיפול בPage Faultזיהוי החריגהטיפול במרחב הזיכרון של הגרעיןטיפול במרחב הזיכרון של תהליך

Demand Paging

Page 3: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 3(c) 2003 ארז חדד

(1מתאר הזיכרון של תהליך )( מתאר זיכרוןmemory descriptor) הוא רשומה המכילה ,

מידע על מרחב הזיכרון של התהליך רשומה מסוגmm_struct

קובץ גרעיןinclude/linux/process.h

השדהmm במתאר תהליך מצביע על מתאר הזיכרון של התהליך

מתארי תהליכים, החולקים אותו מרחב זיכרון, מצביעים עלאותו מתאר זיכרון

לחוט גרעין ערך שדהmm הוא NULL אין לו מרחב זיכרון – משלו והוא משתמש במרחב הזיכרון ובמתאר הזיכרון של

תהליך משתמש שזומן לריצה לפניו כל מתארי הזיכרון שבמערכת מקושרים זה לזה ברשימה

מקושרת

Page 4: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 4(c) 2003 ארז חדד

(2מתאר הזיכרון של תהליך ):להלן מספר שדות המופיעים במתאר הזיכרון

mmapמצביע לרשימת מתארי אזורי הזיכרון – הרשימה של מתארי אזורי הזיכרון תמיד ממוינת לפי המיקום של כל

אזור בזיכרוןpgd-מצביע ל – Page Global Directory של מרחב הזיכרון

)שורש טבלאות הדפים – ראה בהמשך(mmlist מצביע קישור ברשימה הגלובלית של מתארי –

הזיכרוןrss מספר המסגרות שבשימוש מרחב זיכרון זה )דפים –

בזיכרון הראשי(total_vmסה"כ דפים באזורי הזיכרון –

Page 5: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 5(c) 2003 ארז חדד

(3מתאר הזיכרון של תהליך )mm_users, mm_countמוני שיתוף של מרחב הזיכרון –

mm_users סופר כמה תהליכי משתמש חולקים את מרחב הזיכרון

mm_count )סופר כמה תהליכים )גרעין + משתמש חולקים את מרחב הזיכרון, כאשר כל תהליכי המשתמש יחד נחשבים כאחד וכל תהליך גרעין בנפרד נחשב כאחד

כאשרmm_users = 0 מפונים אזורי הזיכרון והטבלאות , הממפות אותם. מרחב הזיכרון )וטבלאות המיפוי של אזור

. mm_count = 0הגרעין( מפונה כאשר בהתאם למה שהוזכר בעבר, חוט גרעין מנצל את מרחב

הזיכרון של תהליך המשתמש שרץ לפניו, מפני שאין לו נועד למנוע מצב בו mm_countמרחב זיכרון משלו.

מרחב הזיכרון מפונה כאשר הוא בשימוש ע"י חוט גרעין

Page 6: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 6(c) 2003 ארז חדד

(1מתאר אזור זיכרון ) ,מתאר איזור זיכרון לכל אזור זיכרון במרחב הזיכרון יש, כאמור

(memory region object) שהוא רשומה המכילה מידע לגבי אזור ,הזיכרון.

vm_mm מצביע למתאר הזיכרון של המרחב המכיל את האזור –vm_startכתובת התחלה של אזור הזיכרון – vm_endכתובת אחת אחרי האחרונה של אזור הזיכרון – vm_next מצביע למתאר אזור הזיכרון הבא ברשימת האזורים של –

המרחב המכיל את אזור הזיכרוןvm_page_prot ערכי ביטים שונים שיוצבו לכל הכניסות של הדפים –

באזור. vm_flags:דגלים המציינים תכונות של האזור, למשל –

VM_READ, VM_WRITE, VM_EXEC, VM_SHARED הרשאות: האם – מותר לקרוא/לכתוב/לבצע נתונים בדפים באזור, האם מותר לשתף דפים באזור

:לכל הרשאה כנ"ל מוגדרת "הרשאת הרשאה", לדוגמהVM_MAY_WRITE :VM_WRITEהאם מותר להדליק את

דגלים המציינים האם מותר לפנות את הדפים באזור מהזיכרון למאגר דפדוף VM_EXECUTABLE – אין לפנות את הדפים. VM_LOCKEDואיזה. לדוגמה –

– הדפדוף הוא לקובץ ריצה.

Page 7: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 7(c) 2003 ארז חדד

טבלאות הדפים כפי שלמדנו בתרגול הקודם לכל תהליך קיימת טבלת דפים

המכילה כניסה עבור כל דף במרחב הזיכרון של התהליך. רגיסטר מיוחד בשםcr3 מצביעה על טבלת הדפים של

התהליך הנוכחי. בתים עבור כל דף 4הטבלה אמורה להכיל כניסה בגודל

במרחב הזיכרון של התהליך כניסה של דף שלא הוקצה לשימוש מכילה ערךNULL (0 )כל הביטים

4כדי למפותGB 4 בדפים שלKB צריך מיליון כניסות – גודל לכל תהליך4MBהטבלה יכול להגיע ל-

עם זאת, תהליך מנצל בדרך-כלל רק חלק מזערי ממרחבהזיכרון הוירטואלי – לא כדאי להחזיק את הטבלה כולה

הפתרון: להחזיק שתי רמות היררכיה )או יותר( בטבלה אם מוקצה דף חדש לשימוש התהליך, צריך להקצות, לפי הצורך, דפים

נוספים לטבלאות ביניים בהיררכיה עד )לא כולל( השורש

Page 8: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 8(c) 2003 ארז חדד

טבלת דפים בשתי רמות31 22 21 12 11 0

cr3

Page Global Directory

Page

DIRECTORY TABLE OFFSET

+

+

Page Table +

Page 9: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 9(c) 2003 ארז חדד

מבנה כניסה בטבלת הדפים כניסה בטבלת הדפים היא בגודלbit 32 . המידע שכניסת הדפים מכילה תלוי בביטpresent

המציין האם הדף נמצא בזיכרון הראש.present = 1 הדף נמצא בזיכרון הדפים ואז הכניסה –

מכילה בנוסף את השדות המתארים את הדף בזיכרון הראשי.

present = 0)הדף נמצא על הדיסק )זיכרון המשני - .swapבאזור

Page 10: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 10(c) 2003 ארז חדד

(2מבנה כניסה בטבלת הדפים )present = 1 :שדות המתארים דף בזיכרון הראשי ,

ביטים כאשר הזיכרון 20 בה מאוחסן הדף )מספר המסגרת ביט(32הפיזי ממען

ביטaccessed מודלק ע"י החומרה בכל פעם שמתבצעת :גישה לכתובת בדף

ביטdirty מודלק ע"י החומרה בכל פעם שמתבצעת כתיבה :לנתון בדף

ביטread/write .קריאה 1 = קריאה בלבד. 0: הרשאת גישה = וכתיבה

:הרשאות הדף נקבעות לפי הרשאות האזור.ה"אלגוריתם" הוא אם יש הרשאתwrite באזור, מדליקים את r/w)הכל מותר( אחרת, אם באזור יש הרשאתread או execute מכבים את ,r/w מותר(

רק לקרוא( ביטuser/supervisor .גישה לקוד הגרעין 0: גישה מיוחסת =

= גישה לכל תהליך.1בלבד.

Page 11: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 11(c) 2003 ארז חדד

(3מבנה כניסה בטבלת הדפים )present = 0 הדף נמצא במאגר דפדוף , (swap)

מספר מאגר – מספר מאגר הדפדוף בו נמצא הדףברשימת מאגרי הדפדוף.

( מספר מגירהslot מספר המגירה במאגר – )הדפדוף שבה נמצא הדף.

מזהה המגירה )הצירוף שלעיל נקראSwapped-Out Page Identifier)

( הוא המקום של הביט 0 )שערכו 0ביטPresent בכניסה בטבלת הדפים.

מספר המגירה במאגר מספר המאגר 0017831

Page 12: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 12(c) 2003 ארז חדד

כניסה בטבלת הדפים עבור דפים באזור זיכרון משותף

)מתאר אזור זיכרון אינו ניתן לשיתוף. לכן אם לשניים )או יותרתהליכים יש אזור זיכרון משותף, יהיה לכל אחד מהם מתאר

אזור זיכרון משלו, שמצביע לרצף הדפים המשותף. עבור כל דף באזור הזיכרון המשותף תהיה כניסה בטבלת

הדפים של כל אחד מהתהליכים..הכניסה הזו תצביע על אותה מסגרת/מגירה המכילה את הדף הכניסות המצביעות על אותו דף בטבלאות הדפים של

תהליכים שונים יכולות להכיל הרשאות שונות.

Page 13: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 13(c) 2003 ארז חדד

יצירת מרחב זיכרון לתהליך חדש (1) תהליך בן יכול להיווצר כשותף למרחב הזיכרון של האב

למשל, כאשר יוצרים חוטים( במקרה זה רק מגדילים את מונה השיתוףmm_users של מתאר )

הזיכרון של תהליך האבמאידך, תהליך הבן יכול לקבל מרחב זיכרון משלו

למשל, בקריאתfork)(במקרה שכזה צריך להעתיק את מרחב הזיכרון של האב לזה של הבן

:פעולת העתקה פשוטה של מרחב זיכרון היא:הרבה זמן דרוש לביצוע העתקה של כל הדפים, דבר העלול יקרה

למסורבלת מאוד)(forkלהפוך את קריאת :אם תהליך הבן, כמקובל במקרים רבים, מבקש לטעון )ייתכן( מיותרת

(, אז מרחב )(execveתוכנה חדשה מיד עם תחילת ביצועו )קריאה ל-הזיכרון שלו יאותחל מחדש, כך שההעתקה מיותרת

Page 14: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 14(c) 2003 ארז חדד

יצירת מרחב זיכרון לתהליך חדש (2) ,לפיכךLinux משתמשת בטכניקת Copy On Write )COW( ,

המודרניות:UNIXהמקובלת בכל סוגי מערכות דפים הניתנים לכתיבה שאינם יכולים להיות משותפים )כדוגמת דפי

נתונים ומחסנית(, מוגדרים בתחילה כמשותפים אבל מועתקים לעותק פרטי כאשר אחד התהליכים השותפים )האב או הבן( מנסה לכתוב

אליהם לראשונה שאר הדפים )כדוגמת דפי קוד או דפי נתונים לקריאה בלבד( הופכים

למשותפים בין מרחבי הזיכרון של האב והבן

החסרון של טכניקתCOW הוא שלאחר fork)( כתיבה ראשונה ,לכל דף שאינו משותף יקרה בגלל הטיפול בחריגת דף.

Page 15: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 15(c) 2003 ארז חדד

יצירת מרחב זיכרון לתהליך חדש (3) טכניקתCOW משולבת ביצירת מרחב הזיכרון החדש של הבן

באופן הבא:Linuxב- הפונקציהcopy_mm)( המופעלת מתוך ,do_fork)( יוצרת ,

עבור תהליך הבן עותק של מתאר הזיכרון של תהליך האב :לכל אזור זיכרון של האב

מתאר אזור הזיכרון מועתק למתאר אזור זיכרון חדש של הבן הכניסות בטבלאות הדפים הממפות את האזור מועתקות לכניסות

בטבלאות הבן – כל הדפים הופכים למשותפים( דפים ששייכים לאזור שאינו ניתן לשיתוףVM_SHARE וניתן )כבוי

דלוק( מסומנים בטבלת הדפים של VM_MAY_WRITEלכתיבה ) כבוי(r/rwהאב והבן כדפים לקריאה בלבד )ביט

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

מונה השיתוף במגירה.

Page 16: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 16(c) 2003 ארז חדד

יצירת מרחב זיכרון לתהליך חדש (4) ברגע שהאב או הבן ינסו לכתוב לדף, תיגרם חריגת

Page Fault. המערכת קובעת אם לשכפל את הדף לפי ערךcount:

אםcount > 1 הדף משוכפל לעותק חדש במסגרת ,מוקצית אחרת

במסגרת ה"ישנה" מבוצעcount-- ובחדשה count == 1בעותק החדש מאופשרת הכתיבה

( אחרתcount == 1הגרעין פשוט מאפשר כתיבה בדף ,)

Page 17: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 17(c) 2003 ארז חדד

)Linux )1 ב-TLBטיפול ב-

Translation Lookaside Buffer )TLB(( זהו מטמון - cache של )כניסות בטבלת הדפים הצמוד לכל מעבד, שמטרתו לחסוך תרגומים

חוזרים של אותה כתובת ליניארית לפיזית )ראה תרגול קודם(חוסך את הגישה לזיכרון )כפול מספר רמות ההיררכיה( לצורך חישוב

ישנם מצבים בהם גרעיןLinux-חייב לפסול בעצמו כניסות ב TLB: כאשר מתבצע עדכון של רשומה בטבלת הדפים המופיעה גם

, כמו למשל בטעינת דף או בפינוי דףTLBב--למעשה, בכל טעינת ערך חדש ל( בכל החלפת הקשרcr3 )

של TLB( אוטומטית של תוכן ה-invalidationמתבצעת פסילה )המעבד.

Page 18: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 18(c) 2003 ארז חדד

)Linux )2 ב- TLBטיפול ב- ישנם מצבים בהםLinux-מצליח להימנע מפסילת תוכן ה TLB

בעת ביצוע החלפת הקשר: כאשר התהליך הבא לביצוע חולק את אותו מרחב זיכרון

)אותן טבלאות דפים( יחד עם התהליך הקודם.כלומר, כאשר מדובר בשני חוטים של אותו יישום..

( כאשר התהליך הבא לביצוע הוא חוט גרעיןkernel thread )ksoftirq_CPUnכמו

לחוטי גרעין אלו אין מרחב זיכרון משלהם – הם פועליםעל מרחב הזיכרון של הגרעין. עם זאת, חוט גרעין מנצל

את טבלאות הדפים של תהליך המשתמש שרץ לפניו, מפני שאין לו טבלאות דפים משלו.

Page 19: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 19(c) 2003 ארז חדד

(1מרחב הזיכרון של הגרעין ) 1בתרגול הקודם הזכרנו שGB של מרחב הזיכרון של המעבד שייך

למרחב הזיכרון של הגרעין.זיכרון זה כולל את טבלאות הדפים של התהליכים הזיכרון שבשימוש גרעיןLinux לעולם אינו מפונה לדיסק

(swapped) מרחב הזיכרון של הגרעין ממופה לקטע קבוע של הזיכרון

הוירטואלי של כל תהליך באופן זה, הכתובת )הלוגית( של כל אובייקט בגרעין נשארת קבועה

בכל מרחבי הזיכרון של תהליכי המשתמש קטע הזיכרון הליניארי המשמש את הגרעין הוא מהכתובת

0xc0000000 ומעלה )"הג'יגהבייט הרביעי"(, המוגדרת בקבועים PAGE_OFFSET-ו TASK_SIZE

קבועים אלו מוגדרים בקבצי הגרעיןinclude/asm-i386/page.h בהתאמהinclude/asm-i386/processor.hו-

Page 20: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 20(c) 2003 ארז חדד

(2מרחב הזיכרון של הגרעין ) הגרעין מחזיק טבלת דפים משלו הקרויהKernel

Master Page Global Directory טבלה זו מתעדכנת בכל פעם שהגרעין מקצה ומשחרר

דפים לשימוש עצמו בלבד אף תהליך לא משתמש בטבלה זו – תפקידה הוא לשמש

כמקור ממנו מתעדכנות טבלאות הדפים של תהליכי המשתמש בכל הנוגע לדפים שבשימוש הגרעין

על עדכון טבלאות הדפים של תהליכי המשתמש מתוךטבלת הדפים של הגרעין נלמד בהמשך

Page 21: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 21(c) 2003 ארז חדד

)Linux )1 ב-Page Faultטיפול ב- מנגנון הטיפול בחריגותPage Fault הינו חלק מרכזי במנגנון

הזיכרון הוירטואלי באמצעות חריגה זו, החומרה מתריעה על אחת משתי

האפשרויות הבאות:גישה לדף שאינו נמצא בזיכרון

ביטpresentבכניסה המתאימה בטבלת הדפים כבוי גישה לא חוקית )שלא לפי ההרשאות בטבלת הדפים( לדף שנמצא

בזיכרוןלמשל: ניסיון כתיבה לדף שמותר לקריאה בלבד

על הגרעין לנתח את נסיבות החריגה ולהחליט אם היא אכןחוקית או לא וכיצד לטפל בה

לדוגמה: גישה לדף שאינו נמצא בזיכרון ואינו בתוך אזורי הזיכרון אינהחוקית, בסופו של דבר, ויש לטפל בה ככזו

מאידך, ניסיון לכתיבה לדף שמותר לקריאה בלבד עשויה להיות חוקיתCopy On Writeבהחלט, כפי שקורה ב-

Page 22: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 22(c) 2003 ארז חדד

)Linux )2 ב-Page Faultטיפול ב-:החומרה מעבירה לשגרת הטיפול נתונים על החריגה

ביטים הנשמר במחסנית:3קוד שגיאה של 0אם ביט( כבוי, החריגה נגרמה בגישה לדף שאינו בזיכרון present == 0 .)

אחרת, החריגה בגלל גישה לא חוקית לדף בזיכרון כבוי, הגישה הייתה לקריאה או לביצוע קוד. אחרת, הגישה 1אם ביט

הייתה לכתיבה כבוי, הגישה הייתה כשהמעבד ב-2אם ביט kernel mode אחרת, הגישה .

user modeהייתה ב- ערך הכתובת הוירטואלית שגרמה לחריגה נשמר ברגיסטרcr2

שגרת הטיפול בחריגה נקראתdo_page_fault)( ומוגדרת arch/i386/mm/fault.cבקובץ הגרעין

-בשקפים הבאים נציג מקרים חשובים של טיפול בPage Fault כיצד הם מאובחנים ומטופלים

Page 23: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 23(c) 2003 ארז חדד

(1עדכון טבלאות של דפי הגרעין ) מעל( אם הגישה הייתה לכתובת בגרעיןTASK_SIZE בדף )

כבויים(:2 ו-0 )ביטים kernel modeלא קיים, במצב במקרה זה, כנראה שמדובר במצב שהגרעין הקצה

לעצמו דפים ועדכן רק את הטבלאות המרכזיות שלו – kernel master page global directoryה-

כל רמות ההיררכיה קישורטיפול התגובה הוא לפיכך ומטה( בטבלת מרחב הזיכרון הנוכחי PGDהחסרות )מה-

לאילו של טבלאות הגרעין אם אין אובייקטים מתאימים באחת הרמות בטבלה

המרכזית של הגרעין, סימן שהגישה שגויה – הודעת (kernel oopsתקלה והשבתת המערכת )

Page 24: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 24(c) 2003 ארז חדד

(2עדכון טבלאות של דפי הגרעין )

בצורה זו מעודכנות טבלאות הדפים של מרחבי זיכרוןשל תהליכי משתמש לגבי דפים שבשימוש הגרעין

אם הגרעין משחרר דפים )ומעדכן את הטבלאות שלובהתאם( השינוי משתקף מיידית בכל המרחבים

האחרים משתי סיבות: הגרעין לעולם לא משחרר את האובייקטים שבתוך הטבלה-מתחת ל( הכניסותPGD בטבלת הדפים של מרחב זיכרון )

לאובייקטים שבתוך הטבלה של הגרעין )ולא מקושרותלהעתקים שלהם(

Page 25: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 25(c) 2003 ארז חדד

(1דפדוף לפי דרישה ) ,אם הכתובת המבוקשת נמצאת בתוך אחד מאזורי הזיכרון

הגישה בהתאם להרשאות והדף המבוקש אינו בזיכרון, יש לטעון את הדף המבוקש לזיכרון

כפי שהזכרנו בתרגול הקודם, הטכניקה של טעינת דף כאשר(Demand Pagingדפדוף לפי דרישה )הוא נדרש נקראת

( יש שלוש אפשרויות לכך שהדף אינו בזיכרוןpresent == 0 (:PTEבכניסה ב-

הכניסה מכילה ערך שאינוNULL כלומר מזהה דף פיזי של ,(swapנמצא במאגר דפדוף – דף ממופה אנונימי )

הכניסה מכילה ערךNULL : דף "בתול" - ממופה אנונימי שהתהליכים החולקים

במרחב הזיכרון מעולם לא ניגשו אליו או לפחות מעולם לא כתבו אליו

דף ממופה לקובץ שפונה/לא נטען במרחב זיכרון זה

Page 26: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 26(c) 2003 ארז חדד

(2דפדוף לפי דרישה ) במקרה של דף שנמצא בדיסק )ממופה אנונימי או ממופה

לקובץ(, מבוצעת טעינה של הדף מהדיסק, הפרטים בתרגול הבא.:אם הדף "בתול" אזי

אם הגישה לכתיבה – מוקצית מסגרת חדשה הממולאת מודלק( , נגיש PG_dirtyאפסים, הדף מסומן מלוכלך )

)(mark_page_accessedלאחרונה אם בגישה לקריאה – הכניסה בטבלת הדפים מצביעה על

וממולא ZERO_PAGEמסגרת דף קבוע מיוחד הקרוי , כך שבכתיבה הראשונה לדף read-onlyאפסים. דף זה מסומן

Copy On Writeהוא ישוכפל לעותק פרטי לפי עיקרון ה- כפי שהוזכר קודם, פעולה של הוספת דף למיפוי הקיים יכולה

לכלול גם הוספת כניסות מתאימות בכל הרמות של טבלת הדפים

Linux ב-Page Faultטיפול ב-

Page 27: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 27(c) 2003 ארז חדד

טיפול בתקלות:החריגה נקבעת כתקלה - גישה לא חוקית - אם

הפעולה )קריאה או כתיבה( לא מורשית לפי הרשאותהאזור

גישה מקוד משתמש לדפי הגרעיןגישה לכתובת בתחום המשתמש שאיננה בתוך אזור זיכרון

לכלל זה יש חריג אחד – כתיבה למחסנית, שעלולה "לגלוש" מעברלאזור הזיכרון הנוכחי שלה

-32פעולת כתיבה יחידה למחסנית יכולה להגדיל אותה לכל היותר ב (pushaבתים )פעולת

לכן, אם הפעולה היא כתיבה בהתאם להרשאות, אזור הזיכרון הוא 32 דלוק(, וכתובת הגישה היא עד VM_GROWDOWNמחסנית )

בתים מתחת לתחילת אזור המחסנית, מוקצה דף נוסף למחסנית וביצוע הכתיבה מאופשר

אם הגישה הייתה מקוד תהליך משתמש, נשלח לתהליךsignal מסוג SIGSEGV"לאמור "גישה לא חוקית לזיכרון ,

– אם הגישה הייתה מקוד גרעין, מוכרזת תקלת מערכתkernel oops

Page 28: מערכות הפעלה תרגול 11 – ניהול זיכרון ב-Linux: המשך

מערכות הפעלה - תרגול 11 28(c) 2003 ארז חדד

Page Faultדיאגרמה של טיפול ב-yes no

yes no

yes no

no

yes no

yesyes no

no yes

bad_area

Address in a memory region

Write access

Region is writable

Copy On WritePage is present

Region is readable or executable

in User Mode

Address is a wrong system call parameter

Demand paging Send SIGSEGV Kill process and kernel “Oops”

“Fixup code” )typically send

SIGSEGV(