זיכרון מטמון

במדעי המחשב, מטמון (באנגלית: Cache) הוא רכיב חומרה או תוכנה האוסף נתונים על בסיס ערכים מקוריים המאוחסנים במיקום אחר, או שהופקו קודם לכן באמצעות חישוב כלשהו. השימוש במטמון מאפשר שליפה מחודשת של המידע במהירות במקום לחזור אל המאגר המקורי שהוא יחסית איטי או מרוחק. השימוש מאפשר גם לאחזר את הנתונים הללו במהירות ובהשקעה מינימלית. באופן כללי, "מטמון" הוא אחסון של פריטים המבוקשים בתדירות גבוהה קרוב יותר למי שמבקש אותם (כדי להגדיל את מהירות הגישה אל אותם פריטים). דוגמה פשוטה להגדרה זו יכולה להיות השאלת מספר ספרים מהספרייה לצורך כתיבת עבודה, אנו מקרבים אלינו את הספרים לצורך שימוש תדיר בהם. המטמון מתווך בין לקוח המטמון (cache client), שזקוק לנתונים מסוימים, לבין מקורם. במצב שלפני שילוב המטמון במערכת, בכל פעם שהלקוח זקוק לנתון, הוא מאחזר אותו על פי כתובתו במקור, ונושא בעלות המלאה של גישה אליו. כאשר יש מטמון, מופנות בקשותיו של הלקוח למטמון, ולא ישירות למקור המידע. המטמון בודק אם הנתון המבוקש נמצא בידו; אם כן, הוא מוחזר ללקוח בלא לערב את מקור המידע; אם לא, הוא מאוחזר ממקור המידע ונשמר במטמון, כדי שבפעם הבאה שיבקש אותו הלקוח לא תידרש קריאתו מחדש. בדרך כלל קיימת מגבלה על כמות הנתונים שיכול המטמון להכיל, משום שלצד מהירות הגישה הגבוהה שלו ביחס למקור, הוא על פי רוב יקר יותר במונחים של עלות ליחידת מידע. על כן חייב המטמון להתמודד עם מצב שבו בבואו לאחסן בתוכו נתון שזה עתה אוחזר ממקור המידע, הוא יצטרך קודם כל למחוק נתון אחר כדי לפנות לו מקום. במצב זה פועל המטמון לפי אלגוריתם אחד מכמה אפשריים, כדי ליישם את מדיניות ההחלפה שלו. שיטה נפוצה אחת היא לבחור את הנתון שלא נדרש על ידי הלקוח מזה הזמן הרב ביותר (LRU - Least Recently Used). יעילותו של המטמון נמדדת ביחס שבין בקשות הלקוח שהוא מספק בעצמו, הנקראות "פגיעות" (cache hits), לכלל בקשות הלקוח. אלו שהוא ניגש בשבילן למקור נקראות "החטאות" (cache miss). ככל שיחס הפגיעה קרוב ל-1, כך גדלה יעילותו של המטמון. הסיבה שנעשה שימוש כה נרחב במטמונים השונים בעולם המחשבים היא שבמקרים רבים קיים דפוס בגישת הלקוח לנתונים, שאותו ניתן לנצל כדי להתאים לו אלגוריתם מטמון שיבטיח יחס פגיעה גבוה. דפוס נפוץ אחד כזה נקרא "מקומיות הייחוס", לפיו לקוח שניגש זה עתה לכתובת מסוימת סביר שייגש זמן קצר לאחר מכן לכתובות הסמוכות אליה. כאשר הלקוח מבקש לכתוב נתון, המטמון נוהג לפי מדיניות הכתיבה שלו. יש והמטמון כותב את הנתון למקור המידע מיד (write through), אך הוא יכול גם להשהות את הכתיבה, עד שהנתון הספציפי ייזרק מהמטמון לטובת נתון אחר (write back). במצב שבו ישנם לקוחות נוספים שעשויים לכתוב את אותו נתון למקור המידע (שלא דרך המטמון, או דרך מופע אחר שלו), אנו אומרים כי העותק של המטמון עשוי להיות לא מעודכן או עבש (stale). ערך מורחב – מדרג זיכרון המעבדים המודרניים כוללים זיכרון מטמון המוטמע בתוכם. זיכרון זה הוא זיכרון מחשב מהיר שקיבולתו קטנה, ותפקידו להאיץ את פעולות המעבד על ידי צמצום הגישה לזיכרון הראשי המאופיינת באיטיות ביחס למהירות המעבד. הגישה של המעבד אל זיכרון המטמון היא הישירה והמהירה ביותר, ועל כן פעולות המתבצעות עליו מהירות הרבה יותר מאלה המתבצעות על מידע מהזיכרון הראשי. מעבדים מודרניים מכילים יותר מרמה אחת של זיכרון מטמון, כל אחת מרמות אלה מתאימה לחלק אחר של פעולת המעבד בהרצת תוכניות. לעיתים מיוצרים מעבדים בגרסה שאינה כוללת את מלוא זיכרון המטמון או את חלקו. מעבדים אלה, כגון הסלרון של אינטל, זולים יותר מהמעבדים הכוללים את זיכרון המטמון בשלמותו, אך ביצועיהם איטיים יותר. מכיוון שכיום צוואר הבקבוק של ביצועי תוכנות במקרים רבים הוא בגישה לזיכרון, ניתן לקבל מתוכנות ייעודיות (כדוגמת Valgrind) נתונים על החטאות מטמון, שבאמצעותם ניתן לבצע מיטוב לתוכנה. זיכרון המטמון של הדיסק הקשיח מאיץ את זמן הגישה הממוצע לנתונים על הדיסק. בזיכרון המטמון מוחזקים נתונים מהדיסק הקשיח שמערכת ההפעלה ניגשה אליהם או צפויה לגשת אליהם (לפי עקרון המקומיות). מאחר שהגישה לדיסק עצמו איטית יותר בסדר גודל מגישה לזיכרון, כדאי ליצרני הדיסקים להכליל בדיסק עצמו כמות מסוימת של זיכרון מטמון, כדי להוריד את זמן הגישה הממוצע. גם אופי הקריאה מהמדיה המגנטית הוא כזה, שבדרך כלל בכל קריאה נקראים לא רק הנתונים שבוקשו, אלא גם נתונים אחרים, הסמוכים להם על הדיסק. נתונים אלה, אם כבר נקראו, כדאי לאחסן בזיכרון המטמון, למקרה שידרשו. עיקרון דומה משמש גם את דפדפני האינטרנט. הדפדפן שומר במאגר מקומי נתונים, דפי אינטרנט ותוכן נוסף שהועבר מהאינטרנט, מכיוון שהגישה למאגר מקומי מהירה מן הגישה לשרת באינטרנט, ולעיתים אף חוסכת בעלות כספית. מטמון הדפדפן הוא דוגמה מובהקת למידע שעשוי להיות "עבש" (לא מעודכן), כאשר אתרי האינטרנט המבוקשים מתעדכנים. לפיכך, פרוטוקול ה-HTTP (המשמש להעברת תוכן דפי האינטרנט) מגדיר שיטות לתיוג התוכן, וכן אסטרטגיות מטמון ליישום בשרת ובלקוח, שמטרתן להימנע ממצב שבו הדפדפן יציג מידע שאינו עדכני. לדוגמה, הפרוטוקול מאפשר "שליפה מותנית", בה השרת ישלח את התוכן רק אם חותמת הזמן שלו מאוחרת יותר מחותמת הזמן שצוינה על ידי הלקוח בפקודת השליפה. תוכנות ושירותים רבים משתמשים במטמון על מנת לשפר את מהירות עבודתם. לדוגמה, שירות ה-Domain Name System משתמש בזיכרון מטמון על מנת לשמור את הבקשות האחרונות של המשתמשים, ומספק להם תשובות מהירות יותר במקרה של בקשה חוזרת. גם בסיסי נתונים עושים שימוש רב בהטמנה. בין השאר הם שומרים במטמון את תוצאות ההידור של שאילתות SQL, כדי לבצע אותן מהר יותר בהרצות חוזרות. דוגמה נוספת היא ה-BranchCache. מחשבים עם מערכת הפעלה Windows 7 Ultimate ו-Windows 7 Enterprise המצויים באותה תת-רשת קטנה יכולים להעביר זה לזה קבצים שנשלחו אליהם מחוץ לתת הרשת במקום שכל אחד מהם ימתין מחדש לקבצים אלה מן השרת החיצוני. במקרה שתת-הרשת היא גדולה ושאחד המחשבים בה מצויד במערכת הפעלה Windows Server 2008 R2, האחרון ישמור קבצים כאלה עבור כל חבריו לתת הרשת במקום שכל אחד מהם יפנה שוב ושוב לכל אחד מהם[1]. צוואר בקבוק פון-נוימן מדרג זיכרון אוהד ברזילי, על האינטואיציה שבהטמנה, יולי 2011 - סרטון הסבר קצר בווידאו בלוג העברי - אינטרטנט