העתקה בזמן כתיבה
ערך ללא מקורות
| ||
ערך ללא מקורות | |
Copy-on-write (נקראת גם COW ולעיתים גם Implicit Sharing[1] או Shadowing[2]) היא אסטרטגיית אופטימיזציה לניהול משאבים, אשר נעזרים בה בתכנות על מנת "להעתיק" אובייקטים גדולים ביעילות (למשל דפי זיכרון, קבצים, אובייקטים גדולים)[3].
ניהול זיכרון וירטואלי
[עריכת קוד מקור | עריכה]אסטרטגיית Copy-on-write נפוצה ביותר בניהול זיכרון על ידי מערכת ההפעלה בעת שיתוף זיכרון בין תהליכים שונים. יעילותה נובעת מההבנה שמספר משימות שונות יכולות להשתמש בעותקים זהים של מידע, כלומר אין צורך לבצע עותק של המידע לכל תהליך. במקום זה, ניתן להצביע על אותו המשאב מכל התהליכים הדורשים עותק זה. ורק כאשר אחד התהליכים מנסה לעדכן את המידע פרדיגמת COW תבצע את ההעתקה בפועל כדי לספק שני עותקים שונים לשני התהליכים.
דוגמה ל-COW במערכת linux: כאשר קריאת המערכת fork מופעלת, עותק של כל הדפים התואמים לתהליך האב נוצרים ונטענים לאזור זיכרון נפרד על ידי מערכת ההפעלה לטובת תהליך הבן. פעולה זו אינה נדרשת במקרים מסוימים. למשל, במקרה שנבצע דרך התהליך הבן את קריאת המערכת execv או בזמן יציאה לאחר זמן קצר מרגע ה-fork. כאשר תהליך הבן צריך להריץ פקודה לטובת תהליך האב, אין צורך להעתיק את דפי הזיכרון של האב, זאת מפני ש-execv מחליף את כל הזיכרון בכל מקרה.
במקרים כאלו, טכניקת COW באה לידי ביטוי. בעזרת טכניקה זו, כאשר מתרחש ה-fork, דפי תהליך האב לא מועתקים לתהליך הבן. במקום זאת, הדפים משותפים בין תהליך האב ותהליך הבן. בכל פעם שתהליך (אב או בן) משנה דף, נוצר עותק נפרד של הדף הספציפי אשר שונה לתהליך הרלוונטי. תהליך זה ישתמש בדף החדש במקום הדף המשותף בכל הפעולות העתידיות. התהליך האחר (זה אשר לא שינה את הדף) ממשיך להשתמש בעותק המקורי של הדף (אשר לא משותף יותר). זוהי בדיוק טכניקת COW מפני שהדף מועתק בזמן שכותבים אליו.
קישורים חיצוניים
[עריכת קוד מקור | עריכה]הערות שוליים
[עריכת קוד מקור | עריכה]- ^ Implicit Sharing | Qt Core 5.15.17, doc.qt.io
- ^ Ohad Rodeh, B-trees, shadowing, and clones, ACM Transactions on Storage 3, 2008-02-25, עמ' 2:1–2:27 doi: 10.1145/1326542.1326544
- ^ David Hildenbrand, Martin Schulz, Nadav Amit, Copy-on-Pin: The Missing Piece for Correct Copy-on-Write, Proceedings of the 28th ACM International Conference on Architectural Support for Programming Languages and Operating Systems, Volume 2, ASPLOS 2023, Association for Computing Machinery, 2023-01-30, עמ' 176–191 doi: 10.1145/3575693.3575716