چرا کشها و حافظه مجازی بیشتر از آنچه بهنظر میرسند شبیهاند
کشینگ، که پیشتر در این مجموعه بحث شد، و حافظه مجازی، که نیز پیشتر بحث شد، ممکن است بهنظر برسند موضوعات کاملاً جداگانهای هستند — یکی با SRAM سریع نزدیک به پردازنده سروکار دارد، دیگری با ترجمه آدرس و جابهجایی داده به دیسک. در واقعیت، هر دو سیستم همان مسئله زیربنایی را حل میکنند: تصمیمگیری درباره چگونگی سازماندهی یک لایه ذخیرهسازی کوچکتر و سریعتر که یک زیرمجموعه مفید از یک لایه بزرگتر و کندتر را نگه میدارد. این مسئله مشترک میتواند دقیقاً به چهار پرسش تجزیه شود.
پرسش اول: یک بلوک کجا میتواند قرار گیرد
این پرسش، به نام Block Placement، میپرسد چقدر انعطافپذیری در انتخاب اینکه یک بلوک داده کجا برود در ذخیرهسازی کوچکتر و سریعتر وجود دارد. یک کش مستقیمنگاشتشده، که پیشتر درباره اصول کش بحث شد، دقیقاً یک مکان بهازای هر بلوک اجازه میدهد، در حالی که یک طرح کاملاً associative هر مکانی را اجازه میدهد، و طرحهای set-associative، که پیشتر هنگام بهبود کارایی کش بحث شد، در میانه قرار دارند. سیستمهای حافظه مجازی، که پیشتر در این مجموعه بحث شد، معمولاً در سطح صفحه کاملاً associative هستند، چون هزینه یک page fault بهاندازه کافی بالاست که حداکثر انعطافپذیری جایگذاری ارزش دفترداری اضافه را دارد.
پرسش دوم: یک بلوک چگونه پیدا میشود
این پرسش، به نام Block Identification، میپرسد سیستم چگونه تعیین میکند آیا داده درخواستشده واقعاً حاضر است. کشها از رویکرد مقایسه tag که پیشتر در این مجموعه بحث شد استفاده میکنند، در حالی که سیستمهای حافظه مجازی از فرآیند جستجوی جدول صفحه که پیشتر بحث شد استفاده میکنند، هر دو اساساً به همان هدف تأیید یک تطابق پیش از اعلام یک hit خدمت میکنند.
پرسش سوم: در یک Miss چه اتفاقی میافتد
این پرسش، به نام Block Replacement، میپرسد کدام بلوک موجود باید تخلیه شود تا برای داده تازه مورد نیاز جا باز شود وقتی ذخیرهسازی پر است. سیاستهای رایج شامل جایگزینی بلوک Least Recently Used (LRU)، بر اساس اصل محلیت زمانی که پیشتر در این مجموعه بحث شد، یا صرفاً جایگزینی یک بلوک بهطور تصادفی، که ارزانتر برای پیادهسازی است اما بهطور میانگین کمی کمکاراتر است.
پرسش چهارم: نوشتنها چگونه مدیریت میشوند
این پرسش، به نام Write Policy، میپرسد وقتی یک برنامه دادهای که در لایه ذخیرهسازی سریعتر وجود دارد را تغییر میدهد چه اتفاقی میافتد. دو رویکرد رایج وجود دارند:
Write-Through: هر نوشتن بلافاصله هم لایه سریعتر و هم لایه کندتر زیر آن را بهروزرسانی میکند، و آنها را همیشه سازگار نگه میدارد، به قیمت ترافیک نوشتن اضافه به لایه کندتر.Write-Back: یک نوشتن فقط بلافاصله لایه سریعتر را بهروزرسانی میکند، و بلوک را بهعنوان تغییریافته علامتگذاری میکند، و تغییر فقط بعداً به لایه کندتر منتقل میشود، وقتی آن بلوک در نهایت نیاز به تخلیه دارد، که ترافیک نوشتن را به قیمت پیچیدگی دفترداری اضافه کاهش میدهد.
چرا این دید یکپارچه مفید است
تشخیص اینکه هر سطح از سلسلهمراتب حافظه به همین چهار پرسش پاسخ میدهد، فقط با مبادلات خاص متفاوتی متناسب با سرعت و هزینه نسبی آن سطح، درک یک سیستم حافظه جدید یا ناآشنا را بسیار سریعتر میکند: بهجای یادگیری مجموعهای کاملاً جدید از مفاهیم، همان چارچوب چهار-پرسشی صرفاً میتواند دوباره اعمال شود، با پاسخهای خاص تنظیمشده برای محدودیتهای آن سطح خاص.