העתקה בזמן כתיבה

Copy-on-write (נקראת גם COW ולעיתים גם Implicit Sharing או Shadowing) היא אסטרטגיית אופטימיזציה לניהול משאבים, אשר נעזרים בה בתכנות על מנת "להעתיק" אובייקטים גדולים ביעילות (למשל דפי זיכרון, קבצים, אובייקטים גדולים).

 ניהול זיכרון וירטואלי 
אסטרטגיית Copy-on-write נפוצה ביותר בניהול זיכרון על ידי מערכת ההפעלה בעת שיתוף זיכרון בין תהליכים שונים. יעילותה נובעת מההבנה שמספר משימות שונות יכולות להשתמש בעותקים זהים של מידע, כלומר אין צורך לבצע עותק של המידע לכל תהליך. במקום זה, ניתן להצביע על אותו המשאב מכל התהליכים הדורשים עותק זה. ורק כאשר אחד התהליכים מנסה לעדכן את המידע פרדיגמת COW תבצע את ההעתקה בפועל כדי לספק שני עותקים שונים לשני התהליכים.

דוגמה ל-COW במערכת linux:
כאשר קריאת המערכת fork מופעלת, עותק של כל הדפים התואמים לתהליך האב נוצרים ונטענים לאזור זיכרון נפרד על ידי מערכת ההפעלה לטובת תהליך הבן. פעולה זו אינה נדרשת במקרים מסוימים.
למשל, במקרה שנבצע דרך התהליך הבן את קריאת המערכת execv או בזמן יציאה לאחר זמן קצר מרגע ה-fork.
כאשר תהליך הבן צריך להריץ פקודה לטובת תהליך האב, אין צורך להעתיק את דפי הזיכרון של האב, זאת מפני ש-execv מחליף את כל הזיכרון בכל מקרה.

במקרים כאלו, טכניקת COW באה לידי ביטוי.
בעזרת טכניקה זו, כאשר מתרחש ה-fork, דפי תהליך האב לא מועתקים לתהליך הבן. במקום זאת, הדפים משותפים בין תהליך האב ותהליך הבן.
בכל פעם שתהליך (אב או בן) משנה דף, נוצר עותק נפרד של הדף הספציפי אשר שונה לתהליך הרלוונטי.
תהליך זה ישתמש בדף החדש במקום הדף המשותף בכל הפעולות העתידיות.
התהליך האחר (זה אשר לא שינה את הדף) ממשיך להשתמש בעותק המקורי של הדף (אשר לא משותף יותר).
זוהי בדיוק טכניקת COW מפני שהדף מועתק בזמן שכותבים אליו.

קישורים חיצוניים

 הערות שוליים 

קטגוריה:תכנות