Page Cache Flashcards
מה היתרון והחסרון בwrite-back?
יתרון:
צמצום של מספר הכתיבות לדיסק.
חסרון:
אובדן אמינות - המידע בזיכרון עלול ללכת לאיבוד אם יש נפילת מתח.
מה היתרונות והחסרונות של read-ahead?
יתרון: פחות החטאות במטמון הדפים במידה והחיזוי נכון.
חיסרונות:
בזבוז זיכרון במידה והחיזוי שגוי.
במידה והדיסק עמוס בבקשות קריאה/כתיבה,אז העומס הנוסף של קריאה מראש עלול לפגוע בביצועים של כלל המערכת.
מהם שני האופנים של גישה לדיסק בלינוקס? וכיצד עושים זאת?
- קריאה/כתיבה באמצעות קריאות המערכת read()/write()
קריאת המערכת מביאה את המידע מהדיסק למטמון הדפים, ואז מעתיקה את הנתונים הרלוונטים אל או מהחוצצים (buffer) של המשתמש.
- מיפוי קובץ לזיכרון באמצעות קריאת המערכת mmap()
קריאת המערכת יוצרת איזור זיכרון חדש ולא קוראת/כותבת מידע מהדיסק.
ניהול זיכרון עצל/דחייני.
נסיון גישה לזיכרון יגרום לחריגת דף שתקרא את המידע מהדיסק למטמון הדפים, ואז תעדכן את טבלת הדפים להצביע ישירות למסגרות של מטמון הדפים.
מהם שני אופני הפעולה של mmap?
- מגובה קובץ (file-backed)
אזור הזיכרון מכיל מידע שמקורו בקובץ פתוח.
לדוגמה: אזור הקוד, אשר מגבה את הקובץ הבינארי של התוכנית.
קריאה/כתיבה לאזור זיכרון מגובה קובץ מתורגמת לקריאה/כתיבה למקום המתאים בתוך הקובץ. - אנונימי (anonymous)
אזור הזיכרון מכיל מידע שאינו קשור לשום קובץ, אלא לזיכרון הדינמי של התהליך.
לדוגמה: אזורי הזיכרון של המחסנית והערימה.
כמה מסגרות פיזיות יוקצו עבור קטע הקוד הבא:
int fd = open(“scene.dat”, O_RDONLY);
char* buffer = (char)malloc(3PAGE_SIZE);
read(fd, buffer, 3*PAGE_SIZE);
6
הקריאה מ-fd שהוא מגובה קובץ תביא 3 מסגרות למטמון הדפים מהדיסק.
אם מאלוק השתמשה בmmap אז buffer הוא איזור זיכרון אנונימי ולכן המסגרות של scene.dat ישוכפלו ויוצבעו מהערימה.
מהם היתרונות של mmap?
- חיסכון בזמן – אין צורך להעתיק את המידע ממטמון הדפים לחוצצים של התהליך.
- חיסכון בזיכרון – אין חוצצים במרחב המשתמש ולכן אין שכפול מידע שכבר קיים במטמון הדפים.
בנוסף, אם המיפוי משותף , אז כל התהליכים משתפים ביניהם את אותה מסגרת בזיכרון הפיזי. - ממשק פשוט ונוח למתכנת – ניגשים לקובץ כפי שניגשים לזיכרון.
קריאת מערכת אחת במקום הרבה קריאות מערכת read(),write(). - קריאה דחיינית – העתקת המידע נעשית רק בעקבות ניסיון גישה שיוצר חריגת דף.
שימו לב: זה יכול להיות חיסרון של mmap(), למשל כאשר רוצים לקרוא רק כמה בתים מהקובץ, כי אז המחיר של חריגת דף יהיה משמעותי.
מהם החסרונות של mmap?
- כדי למפות קובץ שלם יש למצוא אזור זיכרון פנוי ורציף במרחב הווירטואלי שהוא בגודל הקובץ.
- קריאת המערכת mmap() איטית יחסית ל-read().
לכן read() עדיפה כאשר רוצים לקרוא רק כמה בתים מהקובץ.
מה ההבדל בין MAP_SHARED לבין MAP_PRIVATE?
מיפוי משותף MAP_SHARED
מטמון הדפים מחזיק עותק יחיד של המידע.
כל המיפויים המשותפים מצביעים לעותק הזה.
כתיבות מצד תהליך כלשהו ייראו גם אצל תהליכים אחרים הממפים את אותו הקובץ.
כתיבות לאיזור הזיכרון יחלחלו בסופו של דבר לקובץ בדיסק.
מיפוי פרטי MAP_PRIVATE
מטמון הדפים מחזיק עותק יחיד של המידע, אבל הוא מוגן באמצעות copy-on-write.
בהתחלה, כל המיפויים מצביעים לעותק הזה.
כתיבות מצד תהליך כלשהו יגרמו לחריגת דף והעתקת המידע למסגרת חדשה.
כתיבות לא יגיעו חזרה לדיסק.
מה גודל מטמון הדפים?
בלינוקס אין חסם על גודל מטמון הדפים.
כל בקשה של הגרעין להוסיף מסגרת למטמון הדפים נענית בחיוב.
כאשר יש הרבה זיכרון פנוי ניתן לנצל אותו כדי להגדיל את מטמון הדפים וכך לשפר את הביצועים שלו.
גם בקשות של תהליכים להקצאת מסגרת נענות תמיד בחיוב.
לאן PFRA (PFRA = Page Frame Reclamation Algorithm).
מפנה מסגרות?
- מסגרות של מטמון הדפים – יפונו חזרה לקבצים המתאימים בדיסק.
רק במידה והמסגרות מסומנות כ-dirty, כלומר אם נכתב אליהן מידע חדש. - מסגרות אנונימיות (לדוגמה מסגרות המכילות את המחסנית או הערימה של תהליכי משתמש) – יפונו לאיזור מיוחד בדיסק הנקרא מאגר דפדוף או swap area.
האם PFRA יכול לפנות מגרות ששייכות לגרעין?
לא
מהו מאגר דפדוף?
מאגר דפדוף (swap area) הוא אזור מיוחד בדיסק אליו מפונים דפים מהזיכרון.
מה היתרון של מספר מאגרי דפדוף שונים?
שיפור בביצועים של swapping ע”י כתיבה במקביל למספר מאגרי דפדוף.
אלגוריתם הדפדוף משתדל להקצות מגירות ברצף לדפים מפונים.
למה עדיף ברצף?
: כדי לשפר את זמן הגישה לדיסק (גישה סדרתית היא מהירה יותר – מפחית סיבובים של הזרוע המגנטית, משפר את ה-seek latency).
מהו המבנה של מאגר דפדוף?
כל מאגר דפדוף הוא שטח דיסק המחולק למגירות (slots).
כל מגירה היא בדיוק בגודל דף / מסגרת (4KB).
המגירה הראשונה מכילה מידע ניהולי על המאגר: גודל, גרסה, וכו’.