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

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

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

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

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

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

תכנות