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

Slides:



Advertisements
Similar presentations
1 Formal Specifications for Complex Systems (236368) Tutorial #4 Refinement in Z: data refinement; operations refinement; their combinations.
Advertisements

טבלאות סמלים נכתב ע"י אלכס קוגן סמסטר חורף, תשס"ח.
מערכות הפעלה תרגול 5 – תהליכים ב-Linux (3). מערכות הפעלה - תרגול 52 (c) ארז חדד 2003 תוכן התרגול החלפת הקשר (context switch) ב-Linux יצירת תהליך חדש ב-Linux.
מערכות הפעלה תרגול 4 – החלפת הקשר (context switch)
Operating Systems, 112 Practical Session 10, Memory Management continues 1.
מערכות הפעלה תרגול 7 – ק/פ ותקשורת תהליכים ב-Linux.
מערכות הפעלה תרגול 5 – תהליכים ב-Linux (3). מערכות הפעלה - תרגול 52 (c) ארז חדד 2003 תוכן התרגול החלפת הקשר (context switch) ב-Linux יצירת תהליך חדש ב-Linux.
A. Frank File Organization קובץ ישיר מתקדם Advanced Direct File.
חורף - תשס " ג DBMS, Design1 שימור תלויות אינטואיציה : כל תלות פונקציונלית שהתקיימה בסכמה המקורית מתקיימת גם בסכמה המפורקת. מטרה : כאשר מעדכנים.
מערכות הפעלה ( אביב 2009) חגית עטיה © 1 פסיקות  סוגי פסיקות  איך מערכת ההפעלה מטפלת בפסיקות  דוגמא : קלט בעזרת פסיקות.
מערכות הפעלה תרגול 3 – תהליכים ב-Linux (1). מערכות הפעלה - תרגול 32 (c) ארז חדד 2003 תוכן התרגול מבוא לתהליכים ב-Linux API לעבודה עם תהליכים מבוא לניהול.
מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux פסיקות ב-IA32:  סוגי הפסיקות  טבלת.
מערכות הפעלה תרגול 10 – זיכרון וירטואלי ב- Linux.
שאלות חזרה לבחינה. שאלה דיסקים אופטיים מסוג WORM (write-once-read-many) משמשים חברות לצורך איחסון כמויות גדולות של מידע באופן קבוע ומבלי שניתן לשנותו.
הגנה במערכות מתוכנתות תרגול 1 – המחשב האישי הערה: שקפים אלה אינם מהווים תחליף לחומר התרגולים המפורסם באתר הקורס, ומשמשים כעזר הוראה בלבד.
מערכות הפעלה ( אביב 2009) חגית עטיה © 1 ניהול זיכרון  מבוא : מטרות ניהול הזיכרון.  מנגנונים : מרחב כתובות וירטואלי / פיזי. חלוקת זכרון קבועה מול דפדוף.
אוטומט מחסנית הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 11.
מערכות הפעלה תרגול 6 – חוטים ב-Linux.
מערכות הפעלה תרגול 9 – פסיקות ב-Linux. מערכות הפעלה - תרגול 92 (c) ארז חדד 2003 תוכן התרגול מבוא לפסיקות ב-Linux פסיקות ב-IA32:  סוגי הפסיקות  טבלת.
מערכות הפעלה תרגול 3 – תהליכים ב-Linux (1). מערכות הפעלה - תרגול 32 (c) ארז חדד 2003 תוכן התרגול מבוא לתהליכים ב-Linux API לעבודה עם תהליכים מבוא לניהול.
Map-Reduce Input: a collection of scientific articles on different topics, each marked with a field of science –Mathematics, Computer Science, Biology,
מערכות הפעלה חזרה. מערכות הפעלה - שאלות חזרה2 (c) רסקין לאוניד 2005 שאלה1.
מערכות הפעלה ( אביב 2009) חגית עטיה © 1 תהליכים - דייאט : חוטים  מוטיבציה  חוטי משתמש וחוטי מערכת  תמיכת מערכת ההפעלה  דוגמאות ושימושים.
A. Frank File Organization Indexed-Sequential File Introduction Thanks to Tamar Barnes.
1 Formal Specifications for Complex Systems (236368) Tutorial #5 Refinement in Z: data refinement; operations refinement; their combinations.
מערכות הפעלה תרגול 12 – ניהול זיכרון ב-Linux : המשך.
מערכות הפעלה תרגול 2 – קריאות מערכת ב-Linux. מערכות הפעלה - תרגול 22 (c) ארז חדד 2003 תוכן התרגול קריאה לפונקציות ב-Linux קריאה לשירותי מערכת ב-Linux.
(C) Yohai Devir January מבנה מחשבים ספרתיים תרגול מס ' 12: זיכרון וירטואלי ב - VAX מבוסס על תרגולים מאת מורן גביש ואורן קצנגולד.
תרגול 10 – זיכרון וירטואלי ב-Linux
Formal Specifications for Complex Systems (236368) Tutorial #6 appendix Statecharts vs. Raphsody 7 (theory vs. practice)
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
מרץ 2002אלן אזאגורי ©1 מבנה מערכות הפעלה מרץ אלן אזאגורי (מרצה אחראי) ארז חדד.
מערכות הפעלה תרגול 6 – חוטים ב-Linux. מערכות הפעלה - תרגול 62 (c) ארז חדד 2003 תוכן התרגול מבוא לחוטים ב-Linux כיצד גרעין Linux תומך בחוטים עבודה עם חוטים.
מערכות הפעלה ( אביב 2009) חגית עטיה ©1 מערכת קבצים log-structured  ה log הוא העותק היחיד של הנתונים  כאשר משנים בלוק (data, header) פשוט כותבים את הבלוק.
תהליכים  מהו תהליך ?  מבני הנתונים לניהול תהליכים.  החלפת הקשר.  ניהול תהליכים ע " י מערכת ההפעלה.
ניהול זיכרון  מבוא : מטרות ניהול הזיכרון.  מנגנונים : מרחב כתובות וירטואלי / פיזי. ניהול טבלת הדפים. מדיניות החלפת דפים.
מערכות הפעלה תרגול 12 – ניהול זיכרון ב-Linux : המשך.
מערכות הפעלה ( אביב 2006) חגית עטיה © 1 ניהול זיכרון  מבוא : מטרות ניהול הזיכרון.  מנגנונים : מרחב כתובות וירטואלי / פיזי. חלוקת זכרון קבועה מול דפדוף.
מערכות הפעלה תרגול 1 - מבוא. מערכות הפעלה - תרגול 12 (c) ארז חדד 2003 ברוכים הבאים לקורס מערכות הפעלה! אדמיניסטרציה סקירה בסיסית של ארכיטקטורת IA32 (80386+)
מערכות הפעלה תרגול 6 – חוטים ב-Linux. מערכות הפעלה - תרגול 62 (c) ארז חדד 2003 תוכן התרגול סינכרוניזציה בגרעין של Linux מבוא לחוטים ב-Linux כיצד גרעין.
מערכות הפעלה תרגול 2 - הכרת Linux. מערכות הפעלה - תרגול 22 (c) ארז חדד 2003 תוכן התרגול הדגמה מעשית:  כיצד לקבל עזרה בעבודה ב-Linux  כתיבת תכנית ראשונה.
1 Data Structures, CS, TAU, Perfect Hashing בעיה: נתונה קבוצה S של n מפתחות מתחום U השוואה ל- Hash : * טבלה קבועה (Hash רגיל - דינאמי) * רוצים זמן קבוע.
עקרון ההכלה וההדחה.
מערכות הפעלה ( אביב 2006) חגית עטיה © 1 סיכום הקורס.
מערכת הקבצים : יסודות  מבוא : מטרות מערכת קבצים  מנשק המשתמש : פעולות על קבצים, ארגון קבצים, הגנה  תכונות של דיסקים.  מימושים : בסיסיים וקצת על מימושים.
מערכות הפעלה תרגול 1 - מבוא. מערכות הפעלה - תרגול 12 (c) ארז חדד 2003 ברוכים הבאים לקורס מערכות הפעלה! אדמיניסטרציה סקירה בסיסית של ארכיטקטורת IA32 (80386+)
מערכות הפעלה תרגול 1 - מבוא. מערכות הפעלה - תרגול 12 (c) ארז חדד 2003 ברוכים הבאים לקורס מערכות הפעלה! אדמיניסטרציה סקירה בסיסית של ארכיטקטורת IA32 (80386+)
מערכות הפעלה ( אביב 2004) חגית עטיה © 1 תהליכים  מהו תהליך ?  מבני הנתונים לניהול תהליכים.  החלפת הקשר.  ניהול תהליכים ע " י מערכת ההפעלה.
1 Spring Semester 2007, Dept. of Computer Science, Technion Internet Networking recitation #3 Internet Control Message Protocol (ICMP)
ניהול זיכרון  מבוא : מטרות ניהול הזיכרון.  מנגנונים : מרחב כתובות וירטואלי / פיזי. ניהול טבלת הדפים. מדיניות החלפת דפים.
מערכות הפעלה תרגול 4 – תהליכים ב-Linux (2). מערכות הפעלה - תרגול 42 (c) ארז חדד 2003 תוכן התרגול אלגוריתם זימון התהליכים ב-Linux  איך בוחרים, בכל נקודת.
(C) Yohai Devir January מבנה מחשבים ספרתיים זכרון וירטואלי מבוסס על תרגול של מורן גביש.
פיתוח מערכות מידע Class diagrams Aggregation, Composition and Generalization.
Computer Structure 2012 – VM 1 Computer Structure X86 Virtual Memory and TLB Franck Sala Updated by tomer gurevich Slides from Lihu and Adi’s Lecture.
Methods public class Demonstrate { public static void main (String argv[]) { public static void main (String argv[]) { int script = 6, acting = 9, directing.
תכנות מכוון עצמים ושפת ++C וויסאם חלילי. TODAY TOPICS: 1. Function Overloading & Default Parameters 2. Arguments By Reference 3. Multiple #include’s 4.
שיתוף PDT בין חוטים PDT Thread A Process Descriptor File Object 1 File Object 2 File 1 File 2 pthread_create Thread B Process Descriptor ה PDT משותף לכל.
עקרונות תכנות מונחה עצמים תרגול 11: OOP in C++. Outline  Where do the objects live ?  Inheritance  Slicing  Overriding vs Shadowing.
Object Oriented Programming
Object Oriented Programming
מערכות הפעלה ערן טרומר סמסטר א' תשע"ב
עבודה עם נתונים באמצעות ADO.NET
פרוקטוז, C6H12O6 , חד-סוכר מיוחד
OS Virtualization.
תרגול 2 – קריאות מערכת ב-Linux
תרגול 12 – ניהול זיכרון ב-Linux: המשך
בחירת חומר גלם כתב: עמרי שרון.
תהליכים-דייאט: חוטים מוטיבציה חוטי משתמש וחוטי מערכת
פרק תשיעי – מדיניות ניהול זיכרון וירטואלי
Computer Architecture and Assembly Language
Presentation transcript:

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

מערכות הפעלה - תרגול 112 (c) ארז חדד 2003 תוכן התרגול (1) מתאר זיכרון  מתאר אזור זיכרון טבלאות דפים  טבלאות הדפים של תהליכים  יצירת תהליך חדש  TLB  טבלאות דפים של הגרעין טיפול ב – Page Fault  זיהוי החריגה  טיפול במרחב הזיכרון של הגרעין  טיפול במרחב הזיכרון של תהליך Demand Paging

מערכות הפעלה - תרגול 113 (c) ארז חדד 2003 מתאר הזיכרון של תהליך (1) מתאר זיכרון (memory descriptor), הוא רשומה המכילה מידע על מרחב הזיכרון של התהליך  רשומה מסוג mm_struct קובץ גרעין include/linux/process.h השדה mm במתאר תהליך מצביע על מתאר הזיכרון של התהליך  מתארי תהליכים, החולקים אותו מרחב זיכרון, מצביעים על אותו מתאר זיכרון  לחוט גרעין ערך שדה mm הוא NULL – אין לו מרחב זיכרון משלו והוא משתמש במרחב הזיכרון ובמתאר הזיכרון של תהליך משתמש שזומן לריצה לפניו כל מתארי הזיכרון שבמערכת מקושרים זה לזה ברשימה מקושרת

מערכות הפעלה - תרגול 114 (c) ארז חדד 2003 מתאר הזיכרון של תהליך (2) להלן מספר שדות המופיעים במתאר הזיכרון:  mmap – מצביע לרשימת מתארי אזורי הזיכרון הרשימה של מתארי אזורי הזיכרון תמיד ממוינת לפי המיקום של כל אזור בזיכרון  pgd – מצביע ל-Page Global Directory של מרחב הזיכרון (שורש טבלאות הדפים – ראה בהמשך)  mmlist – מצביע קישור ברשימה הגלובלית של מתארי הזיכרון  rss – מספר המסגרות שבשימוש מרחב זיכרון זה (דפים בזיכרון הראשי)  total_vm – סה"כ דפים באזורי הזיכרון

מערכות הפעלה - תרגול 115 (c) ארז חדד 2003 מתאר הזיכרון של תהליך (3)  mm_users, mm_count – מוני שיתוף של מרחב הזיכרון mm_users סופר כמה תהליכי משתמש חולקים את מרחב הזיכרון mm_count סופר כמה תהליכים (גרעין + משתמש) חולקים את מרחב הזיכרון, כאשר כל תהליכי המשתמש יחד נחשבים כאחד וכל תהליך גרעין בנפרד נחשב כאחד כאשר mm_users = 0, מפונים אזורי הזיכרון והטבלאות הממפות אותם. מרחב הזיכרון (וטבלאות המיפוי של אזור הגרעין) מפונה כאשר mm_count = 0. בהתאם למה שהוזכר בעבר, חוט גרעין מנצל את מרחב הזיכרון של תהליך המשתמש שרץ לפניו, מפני שאין לו מרחב זיכרון משלו. mm_count נועד למנוע מצב בו מרחב הזיכרון מפונה כאשר הוא בשימוש ע"י חוט גרעין

מערכות הפעלה - תרגול 116 (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_LOCKED – אין לפנות את הדפים. VM_EXECUTABLE – הדפדוף הוא לקובץ ריצה.

מערכות הפעלה - תרגול 117 (c) ארז חדד 2003 טבלאות הדפים כפי שלמדנו בתרגול הקודם לכל תהליך קיימת טבלת דפים המכילה כניסה עבור כל דף במרחב הזיכרון של התהליך. רגיסטר מיוחד בשם cr3 מצביעה על טבלת הדפים של התהליך הנוכחי. הטבלה אמורה להכיל כניסה בגודל 4 בתים עבור כל דף במרחב הזיכרון של התהליך  כניסה של דף שלא הוקצה לשימוש מכילה ערך NULL (כל הביטים 0) כדי למפות 4GB בדפים של 4KB צריך מיליון כניסות – גודל הטבלה יכול להגיע ל-4MB לכל תהליך עם זאת, תהליך מנצל בדרך-כלל רק חלק מזערי ממרחב הזיכרון הוירטואלי – לא כדאי להחזיק את הטבלה כולה הפתרון: להחזיק שתי רמות היררכיה (או יותר) בטבלה  אם מוקצה דף חדש לשימוש התהליך, צריך להקצות, לפי הצורך, דפים נוספים לטבלאות ביניים בהיררכיה עד (לא כולל) השורש

מערכות הפעלה - תרגול 118 (c) ארז חדד 2003 טבלת דפים בשתי רמות cr3 Page Global Directory Page DIRECTORYTABLEOFFSET + + Page Table +

מערכות הפעלה - תרגול 119 (c) ארז חדד 2003 מבנה כניסה בטבלת הדפים כניסה בטבלת הדפים היא בגודל bit 32. המידע שכניסת הדפים מכילה תלוי בביט present המציין האם הדף נמצא בזיכרון הראש. present = 1 – הדף נמצא בזיכרון הדפים ואז הכניסה מכילה בנוסף את השדות המתארים את הדף בזיכרון הראשי. present = 0- הדף נמצא על הדיסק (זיכרון המשני) באזור swap.

מערכות הפעלה - תרגול 1110 (c) ארז חדד 2003 מבנה כניסה בטבלת הדפים (2) present = 1, שדות המתארים דף בזיכרון הראשי:  מספר המסגרת בה מאוחסן הדף (20 ביטים כאשר הזיכרון הפיזי ממען 32 ביט)  ביט accessed: מודלק ע"י החומרה בכל פעם שמתבצעת גישה לכתובת בדף  ביט dirty: מודלק ע"י החומרה בכל פעם שמתבצעת כתיבה לנתון בדף  ביט read/write: הרשאת גישה. 0 = קריאה בלבד. 1 = קריאה וכתיבה הרשאות הדף נקבעות לפי הרשאות האזור.ה"אלגוריתם" הוא: 1. אם יש הרשאת write באזור, מדליקים את r/w (הכל מותר) 2. אחרת, אם באזור יש הרשאת read או execute, מכבים את r/w (מותר רק לקרוא)  ביט user/supervisor: גישה מיוחסת. 0 = גישה לקוד הגרעין בלבד. 1 = גישה לכל תהליך.

מערכות הפעלה - תרגול 1111 (c) ארז חדד 2003 מבנה כניסה בטבלת הדפים (3) present = 0, הדף נמצא במאגר דפדוף (swap)  מספר מאגר – מספר מאגר הדפדוף בו נמצא הדף ברשימת מאגרי הדפדוף.  מספר מגירה (slot) – מספר המגירה במאגר הדפדוף שבה נמצא הדף. הצירוף שלעיל נקרא מזהה המגירה (Swapped-Out Page Identifier)  ביט 0 (שערכו 0) הוא המקום של הביט Present בכניסה בטבלת הדפים. מספר המגירה במאגרמספר המאגר

מערכות הפעלה - תרגול 1112 (c) ארז חדד 2003 כניסה בטבלת הדפים עבור דפים באזור זיכרון משותף מתאר אזור זיכרון אינו ניתן לשיתוף. לכן אם לשניים (או יותר) תהליכים יש אזור זיכרון משותף, יהיה לכל אחד מהם מתאר אזור זיכרון משלו, שמצביע לרצף הדפים המשותף. עבור כל דף באזור הזיכרון המשותף תהיה כניסה בטבלת הדפים של כל אחד מהתהליכים. הכניסה הזו תצביע על אותה מסגרת/מגירה המכילה את הדף. הכניסות המצביעות על אותו דף בטבלאות הדפים של תהליכים שונים יכולות להכיל הרשאות שונות.

מערכות הפעלה - תרגול 1113 (c) ארז חדד 2003 יצירת מרחב זיכרון לתהליך חדש (1) תהליך בן יכול להיווצר כשותף למרחב הזיכרון של האב  למשל, כאשר יוצרים חוטים  במקרה זה רק מגדילים את מונה השיתוף (mm_users) של מתאר הזיכרון של תהליך האב מאידך, תהליך הבן יכול לקבל מרחב זיכרון משלו  למשל, בקריאת fork()  במקרה שכזה צריך להעתיק את מרחב הזיכרון של האב לזה של הבן פעולת העתקה פשוטה של מרחב זיכרון היא:  יקרה: הרבה זמן דרוש לביצוע העתקה של כל הדפים, דבר העלול להפוך את קריאת fork() למסורבלת מאוד  (ייתכן) מיותרת: אם תהליך הבן, כמקובל במקרים רבים, מבקש לטעון תוכנה חדשה מיד עם תחילת ביצועו (קריאה ל-execve()), אז מרחב הזיכרון שלו יאותחל מחדש, כך שההעתקה מיותרת

מערכות הפעלה - תרגול 1114 (c) ארז חדד 2003 יצירת מרחב זיכרון לתהליך חדש (2) לפיכך, Linux משתמשת בטכניקת Copy On Write (COW), המקובלת בכל סוגי מערכות UNIX המודרניות:  דפים הניתנים לכתיבה שאינם יכולים להיות משותפים (כדוגמת דפי נתונים ומחסנית), מוגדרים בתחילה כמשותפים אבל מועתקים לעותק פרטי כאשר אחד התהליכים השותפים (האב או הבן) מנסה לכתוב אליהם לראשונה  שאר הדפים (כדוגמת דפי קוד או דפי נתונים לקריאה בלבד) הופכים למשותפים בין מרחבי הזיכרון של האב והבן החסרון של טכניקת COW הוא שלאחר fork(), כתיבה ראשונה לכל דף שאינו משותף יקרה בגלל הטיפול בחריגת דף.

מערכות הפעלה - תרגול 1115 (c) ארז חדד 2003 יצירת מרחב זיכרון לתהליך חדש (3) טכניקת COW משולבת ביצירת מרחב הזיכרון החדש של הבן ב- Linux באופן הבא:  הפונקציה copy_mm(), המופעלת מתוך do_fork(), יוצרת עבור תהליך הבן עותק של מתאר הזיכרון של תהליך האב  לכל אזור זיכרון של האב: מתאר אזור הזיכרון מועתק למתאר אזור זיכרון חדש של הבן הכניסות בטבלאות הדפים הממפות את האזור מועתקות לכניסות בטבלאות הבן – כל הדפים הופכים למשותפים דפים ששייכים לאזור שאינו ניתן לשיתוף (VM_SHARE כבוי) וניתן לכתיבה (VM_MAY_WRITE דלוק) מסומנים בטבלת הדפים של האב והבן כדפים לקריאה בלבד (ביט r/rw כבוי) אם דף משותף נמצא בזיכרון, מוגדל מונה השיתוף במסגרת (count). אחרת, עבור דף ממופה אנונימי שנמצא בדיסק, מוגדל מונה השיתוף במגירה.

מערכות הפעלה - תרגול 1116 (c) ארז חדד 2003 יצירת מרחב זיכרון לתהליך חדש (4) ברגע שהאב או הבן ינסו לכתוב לדף, תיגרם חריגת Page Fault. המערכת קובעת אם לשכפל את הדף לפי ערך count:  אם count > 1, הדף משוכפל לעותק חדש במסגרת מוקצית אחרת במסגרת ה"ישנה" מבוצע count-- ובחדשה count == 1 בעותק החדש מאופשרת הכתיבה  אחרת (count == 1), הגרעין פשוט מאפשר כתיבה בדף

מערכות הפעלה - תרגול 1117 (c) ארז חדד 2003 טיפול ב-TLB ב-Linux (1) Translation Lookaside Buffer (TLB) - זהו מטמון (cache) של כניסות בטבלת הדפים הצמוד לכל מעבד, שמטרתו לחסוך תרגומים חוזרים של אותה כתובת ליניארית לפיזית (ראה תרגול קודם)  חוסך את הגישה לזיכרון (כפול מספר רמות ההיררכיה) לצורך חישוב ישנם מצבים בהם גרעין Linux חייב לפסול בעצמו כניסות ב-TLB:  כאשר מתבצע עדכון של רשומה בטבלת הדפים המופיעה גם ב- TLB, כמו למשל בטעינת דף או בפינוי דף בכל החלפת הקשר (למעשה, בכל טעינת ערך חדש ל-cr3) מתבצעת פסילה (invalidation) אוטומטית של תוכן ה-TLB של המעבד.

מערכות הפעלה - תרגול 1118 (c) ארז חדד 2003 טיפול ב-TLB ב- Linux (2) ישנם מצבים בהם Linux מצליח להימנע מפסילת תוכן ה-TLB בעת ביצוע החלפת הקשר:  כאשר התהליך הבא לביצוע חולק את אותו מרחב זיכרון (אותן טבלאות דפים) יחד עם התהליך הקודם...כלומר, כאשר מדובר בשני חוטים של אותו יישום  כאשר התהליך הבא לביצוע הוא חוט גרעין (kernel thread) כמו ksoftirq_CPUn לחוטי גרעין אלו אין מרחב זיכרון משלהם – הם פועלים על מרחב הזיכרון של הגרעין. עם זאת, חוט גרעין מנצל את טבלאות הדפים של תהליך המשתמש שרץ לפניו, מפני שאין לו טבלאות דפים משלו.

מערכות הפעלה - תרגול 1119 (c) ארז חדד 2003 מרחב הזיכרון של הגרעין (1) בתרגול הקודם הזכרנו ש 1GB של מרחב הזיכרון של המעבד שייך למרחב הזיכרון של הגרעין. זיכרון זה כולל את טבלאות הדפים של התהליכים הזיכרון שבשימוש גרעין Linux לעולם אינו מפונה לדיסק (swapped) מרחב הזיכרון של הגרעין ממופה לקטע קבוע של הזיכרון הוירטואלי של כל תהליך באופן זה, הכתובת (הלוגית) של כל אובייקט בגרעין נשארת קבועה בכל מרחבי הזיכרון של תהליכי המשתמש קטע הזיכרון הליניארי המשמש את הגרעין הוא מהכתובת 0xc ומעלה ("הג'יגהבייט הרביעי"), המוגדרת בקבועים PAGE_OFFSET ו-TASK_SIZE  קבועים אלו מוגדרים בקבצי הגרעין include/asm-i386/page.h ו- include/asm-i386/processor.h בהתאמה

מערכות הפעלה - תרגול 1120 (c) ארז חדד 2003 מרחב הזיכרון של הגרעין (2) הגרעין מחזיק טבלת דפים משלו הקרויה Kernel Master Page Global Directory  טבלה זו מתעדכנת בכל פעם שהגרעין מקצה ומשחרר דפים לשימוש עצמו בלבד  אף תהליך לא משתמש בטבלה זו – תפקידה הוא לשמש כמקור ממנו מתעדכנות טבלאות הדפים של תהליכי המשתמש בכל הנוגע לדפים שבשימוש הגרעין  על עדכון טבלאות הדפים של תהליכי המשתמש מתוך טבלת הדפים של הגרעין נלמד בהמשך

מערכות הפעלה - תרגול 1121 (c) ארז חדד 2003 טיפול ב-Page Fault ב-Linux (1) מנגנון הטיפול בחריגות Page Fault הינו חלק מרכזי במנגנון הזיכרון הוירטואלי באמצעות חריגה זו, החומרה מתריעה על אחת משתי האפשרויות הבאות:  גישה לדף שאינו נמצא בזיכרון ביט present בכניסה המתאימה בטבלת הדפים כבוי  גישה לא חוקית (שלא לפי ההרשאות בטבלת הדפים) לדף שנמצא בזיכרון למשל: ניסיון כתיבה לדף שמותר לקריאה בלבד על הגרעין לנתח את נסיבות החריגה ולהחליט אם היא אכן חוקית או לא וכיצד לטפל בה  לדוגמה: גישה לדף שאינו נמצא בזיכרון ואינו בתוך אזורי הזיכרון אינה חוקית, בסופו של דבר, ויש לטפל בה ככזו  מאידך, ניסיון לכתיבה לדף שמותר לקריאה בלבד עשויה להיות חוקית בהחלט, כפי שקורה ב- Copy On Write

מערכות הפעלה - תרגול 1122 (c) ארז חדד 2003 טיפול ב-Page Fault ב-Linux (2) החומרה מעבירה לשגרת הטיפול נתונים על החריגה:  קוד שגיאה של 3 ביטים הנשמר במחסנית: אם ביט 0 כבוי, החריגה נגרמה בגישה לדף שאינו בזיכרון (present == 0). אחרת, החריגה בגלל גישה לא חוקית לדף בזיכרון אם ביט 1 כבוי, הגישה הייתה לקריאה או לביצוע קוד. אחרת, הגישה הייתה לכתיבה אם ביט 2 כבוי, הגישה הייתה כשהמעבד ב-kernel mode. אחרת, הגישה הייתה ב-user mode  ערך הכתובת הוירטואלית שגרמה לחריגה נשמר ברגיסטר cr2 שגרת הטיפול בחריגה נקראת do_page_fault() ומוגדרת בקובץ הגרעין arch/i386/mm/fault.c בשקפים הבאים נציג מקרים חשובים של טיפול ב-Page Fault כיצד הם מאובחנים ומטופלים

מערכות הפעלה - תרגול 1123 (c) ארז חדד 2003 עדכון טבלאות של דפי הגרעין (1) אם הגישה הייתה לכתובת בגרעין (מעל TASK_SIZE) בדף לא קיים, במצב kernel mode (ביטים 0 ו-2 כבויים):  במקרה זה, כנראה שמדובר במצב שהגרעין הקצה לעצמו דפים ועדכן רק את הטבלאות המרכזיות שלו – ה-kernel master page global directory  טיפול התגובה הוא לפיכך קישור כל רמות ההיררכיה החסרות (מה-PGD ומטה) בטבלת מרחב הזיכרון הנוכחי לאילו של טבלאות הגרעין אם אין אובייקטים מתאימים באחת הרמות בטבלה המרכזית של הגרעין, סימן שהגישה שגויה – הודעת תקלה והשבתת המערכת (kernel oops)

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

מערכות הפעלה - תרגול 1125 (c) ארז חדד 2003 דפדוף לפי דרישה (1) אם הכתובת המבוקשת נמצאת בתוך אחד מאזורי הזיכרון, הגישה בהתאם להרשאות והדף המבוקש אינו בזיכרון, יש לטעון את הדף המבוקש לזיכרון כפי שהזכרנו בתרגול הקודם, הטכניקה של טעינת דף כאשר הוא נדרש נקראת דפדוף לפי דרישה (Demand Paging) יש שלוש אפשרויות לכך שהדף אינו בזיכרון (present == 0 בכניסה ב-PTE):  הכניסה מכילה ערך שאינו NULL, כלומר מזהה דף פיזי של דף ממופה אנונימי ( נמצא במאגר דפדוף – swap)  הכניסה מכילה ערך NULL: דף "בתול" - ממופה אנונימי שהתהליכים החולקים במרחב הזיכרון מעולם לא ניגשו אליו או לפחות מעולם לא כתבו אליו דף ממופה לקובץ שפונה/לא נטען במרחב זיכרון זה

מערכות הפעלה - תרגול 1126 (c) ארז חדד 2003 דפדוף לפי דרישה (2) במקרה של דף שנמצא בדיסק (ממופה אנונימי או ממופה לקובץ), מבוצעת טעינה של הדף מהדיסק, הפרטים בתרגול הבא. אם הדף "בתול" אזי:  אם הגישה לכתיבה – מוקצית מסגרת חדשה הממולאת אפסים, הדף מסומן מלוכלך (PG_dirty מודלק), נגיש לאחרונה mark_page_accessed()  אם בגישה לקריאה – הכניסה בטבלת הדפים מצביעה על מסגרת דף קבוע מיוחד הקרוי ZERO_PAGE וממולא אפסים. דף זה מסומן read-only, כך שבכתיבה הראשונה לדף הוא ישוכפל לעותק פרטי לפי עיקרון ה-Copy On Write  כפי שהוזכר קודם, פעולה של הוספת דף למיפוי הקיים יכולה לכלול גם הוספת כניסות מתאימות בכל הרמות של טבלת הדפים טיפול ב-Page Fault ב-Linux

מערכות הפעלה - תרגול 1127 (c) ארז חדד 2003 טיפול בתקלות החריגה נקבעת כתקלה - גישה לא חוקית - אם:  הפעולה (קריאה או כתיבה) לא מורשית לפי הרשאות האזור  גישה מקוד משתמש לדפי הגרעין  גישה לכתובת בתחום המשתמש שאיננה בתוך אזור זיכרון לכלל זה יש חריג אחד – כתיבה למחסנית, שעלולה "לגלוש" מעבר לאזור הזיכרון הנוכחי שלה  פעולת כתיבה יחידה למחסנית יכולה להגדיל אותה לכל היותר ב-32 בתים (פעולת pusha)  לכן, אם הפעולה היא כתיבה בהתאם להרשאות, אזור הזיכרון הוא מחסנית (VM_GROWDOWN דלוק), וכתובת הגישה היא עד 32 בתים מתחת לתחילת אזור המחסנית, מוקצה דף נוסף למחסנית וביצוע הכתיבה מאופשר אם הגישה הייתה מקוד תהליך משתמש, נשלח לתהליך signal מסוג SIGSEGV, לאמור "גישה לא חוקית לזיכרון" אם הגישה הייתה מקוד גרעין, מוכרזת תקלת מערכת – kernel oops

מערכות הפעלה - תרגול 1128 (c) ארז חדד 2003 דיאגרמה של טיפול ב-Page Fault yesno yesno yesno yes no yes no yes bad_area Address in a memory region Write accessRegion is writable Copy On Write Page is present Region is readable or executable in User Mode Address is a wrong system call parameter Demand pagingSend SIGSEGV Kill process and kernel “Oops” “Fixup code” (typically send SIGSEGV)