זיכרון מטמון

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

פעולת המטמון

המטמון מתווך בין לקוח המטמון (cache client), שזקוק לנתונים מסוימים, לבין מקורם. במצב שלפני שילוב המטמון במערכת, בכל פעם שהלקוח זקוק לנתון, הוא מאחזר אותו על פי כתובתו במקור, ונושא בעלות המלאה של גישה אליו. כאשר יש מטמון, מופנות בקשותיו של הלקוח למטמון, ולא ישירות למקור המידע. המטמון בודק אם הנתון המבוקש נמצא בידו; אם כן, הוא מוחזר ללקוח בלא לערב את מקור המידע; אם לא, הוא מאוחזר ממקור המידע ונשמר במטמון, כדי שבפעם הבאה שיבקש אותו הלקוח לא תידרש קריאתו מחדש.
בדרך כלל קיימת מגבלה על כמות הנתונים שיכול להכיל המטמון, משום שלצד מהירות הגישה הגבוהה שלו ביחס למקור, הוא על פי רוב יקר יותר במונחים של עלות ליחידת מידע. על כן חייב המטמון להתמודד עם מצב שבו בבואו לאחסן בתוככיו נתון שזה עתה אוחזר ממקור המידע, הוא יצטרך קודם כל למחוק נתון אחר כדי לפנות לו מקום. במצב זה פועל המטמון לפי אלגוריתם אחד מכמה אפשריים, כדי ליישם את מדיניות ההחלפה שלו. שיטה נפוצה אחת, היא לבחור את הנתון שלא נדרש על ידי הלקוח מזה הזמן הרב ביותר (least recently used).
יעילותו של המטמון נמדדת ביחס שבין בקשות הלקוח שהוא מספק בעצמו, הנקראות פגיעות (cache hit), לכלל בקשות הלקוח. אלו שהוא ניגש בשבילן למקור נקראות החטאות (cache miss). ככל שיחס הפגיעה קרוב לאחת, כך גדלה יעילותו של המטמון. הסיבה שנעשה שימוש כה נרחב במטמונים השונים בעולם המחשבים, היא שבמקרים רבים קיים דפוס בגישת הלקוח לנתונים, שאותו ניתן לנצל כדי להתאים לו אלגוריתם מטמון שיבטיח יחס פגיעה גבוה. דפוס נפוץ אחד כזה נקרא מקומיות הייחוס, לפיו לקוח שניגש זה עתה לכתובת מסוימת, סביר שיגש זמן קצר לאחר מכן לכתובות הסמוכות אליה.
כאשר הלקוח מבקש לכתוב נתון, המטמון נוהג לפי מדיניות הכתיבה שלו. יש והמטמון כותב את הנתון למקור המידע מיד (write through), אך הוא יכול גם להשהות את הכתיבה, עד שהנתון הספציפי ייזרק מהמטמון לטובת נתון אחר (write back). במצב שבו ישנם לקוחות נוספים שעשויים לכתוב את אותו נתון למקור המידע (שלא דרך המטמון, או דרך מופע אחר שלו), אנו אומרים כי העותק של המטמון עשוי להיות לא מעודכן או עבש (stale).

זיכרון מטמון של דיסק קשיח

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

זיכרון מטמון של דפדפן

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

יישומים נוספים

תוכנות ושירותים רבים משתמשים במטמון על מנת לשפר את מהירות עבודתם. לדוגמה, שירות ה-Domain Name System משתמש בזיכרון מטמון על מנת לשמור את הבקשות האחרונות של המשתמשים, ומספק להם תשובות מהירות יותר במקרה של בקשה חוזרת. גם בסיסי נתונים עושים שימוש רב בהטמנה. בין השאר הם שומרים במטמון את תוצאות ההידור של שאילתות SQL, כדי לבצע אותן מהר יותר בהרצות חוזרות.
דוגמה נוספת היא ה-BranchCache. מחשבים עם מערכת הפעלה Windows 7 Ultimate ו-Windows 7 Enterprise המצויים באותה תת-רשת קטנה יכולים להעביר זה לזה קבצים שנשלחו אליהם מחוץ לתת הרשת במקום שכל אחד מהם ימתין מחדש לקבצים אלה מן השרת החיצוני. במקרה שתת-הרשת היא גדולה ושאחד המחשבים בה מצויד במערכת הפעלה Windows Server 2008 R2, האחרון ישמור קבצים כאלה עבור כל חבריו לתת הרשת במקום שכל אחד מהם יפנה שוב ושוב לכל אחד מהם.