BSD, Windows, Linux سیستم های مدیریت حافظه

مقايسه سيستم هاي مديريت حافظه
BSD, Windows, Linux
چكيده:
در اين قسمت مي خواهيم سيستم مديريت حافظه يك سيستم عامل را مورد بررسي و كاوش قرار دهيم. ما ابتدا با يك نگاه جامع به سيستمهاي مديريت حافظه كه به اختصار به آنها MM نيز ميگويند ميپردازيم و بعد سيستم هاي مديريت حافظه را در سيستم عامل هاي واقعي Linux 2.4 ، Windows 2000 و BSD 4.4 با هم مقايسه مي كنيم.

فهرست عناوين

مقدمه ۴
سيستم های مديريت حافظه ۴
حافظه مجازی ۵
صفحه بندی ۵
مقايسه ۷
ساختمانهای داده ای برای تشريح فضای پروسس ۹
۴٫۴ BSD 9
Windows 11
Linux 12
توزيع فضای آدرس پروسس ۱۲
جابجايی صفحات ۱۳
۴٫۴ BSD 13
Windows 15
Linux 18
پيشنهادات و نتايج ۱۹

۱- مقدمه:
در اين مقاله زير سيستم هاي مديريت حافظه اين سيستم عامل ها را با هم مقايسه مي كنيم Linux 2.4 ، Windows 2000 و BSD 4.4 . BSD 4.4 به اين دليل انتخاب شد كه نماينده نسخه هاي مختلف Unix است كه بسياري از اصول و پايه هاي مهم طراحي يك سيستم عامل را داراست و امروزه بسياري از سيستم هاي عامل مانند: FreeBSD، NetBSD و OpenBSD بر مبناي آن ساخته شده اند. از همه مهمتر، Unix به صورت عالي مستند شده است و كتاب هاي بسياري در مورد آن نوشته شده اند. Windows 2000 انتخاب شده است، چون يك سيستم عامل عامه پسند است و براي كامپيوتر هاي شخصي و افراد مبتدي، بسيار كارا است و حالا هم به شكل يك سيستم عامل كاملا بالغ در آمده است.
Linux 2.4 را به اين دليل انتخاب كرديم كه هر روز هوا داران بيشتري پيدا مي كند و به نظر مي رسد كه جايگاه مهمي را در آينده پيدا خواهد كرد. ما خيلي مايل به خصوصيات و كارآيي هاي اين سيستم عامل عا نيستيم و در عوض مي خواهيم در اين مقاله به نحوه طراحي و معماري داخلي اين سيستم عامل ها نگاهي بياندازيم:

۲- سيستم هاي مديريت حافظه:
ما سيستم هاي مديريت حافظه را به اختصار، MM مي گوييم. MM ها بخش خيلي مهمي از هسته سيستم عامل خستند. كار اصلي آنها مديريت سلسله مراتب حافظه اصلي يا RAM و ديسك هاي سخت موجود بر روي ماشين مي باشد.
كار هاي مهم آن شامل: تخصيص حافظه و ازاد سازي آن براي پروسس هايي است كه از راهكار ها و پياده سازي حافظه مجازي (يا Virtual Memory) استفاده مي كنندكه با استفاده از ديسك سخت به عنوان حافظه اصلي اضافه كار مي كند.
سيستم حافظه بايد تا آنجايي كه امكان دارد بهينه شود، زيرا كه كارآيي آن به شكل فزاينده اي به كارآيي كل سيستم و سرعت آن بستگي دارد.

۲-۱- حافظه مجازي:
ايده مهم در رابطه با سيستم هاي MM ، حافظه مجازي است. در گذشته در روز هاي اوليه كامپيوتر، محققان نياز روزافزون به حافظه را براي برنامه كاربردي احساس مي كردند. بنا بر اين ايده حافظه مجازي به وقوع پيوست. ايده اين است كه به يك برنامه به دروغ بگوييم كه مقادير زيادي حافظه براي استفاده آن موجود است. هسته يك چنين راهكاري را با استفاده از حافظه ثانويه ديسك سخت به وجود مي آورد تا احتياج به فضاي اضافي حافظه را پاسخ گويد. براي اينكه سيستم مديريت حافظه مجازي كار كند، ما احتياج به يك سري توابع نگاشتي داريم كه عمل ترجمه آدرس ها را به عهده مي گيرد و آدرس مجازي را به آدرس فيزيكي واقعي تبديل مي كند. آدرس مجازي آن آدرسي است كه برنامه از آن استفاده مي كند تا به يك نقطه از حافظه اشاره كند و آدرس فيزيكي، دقيقا آدرس همان نقطه اي از حافظه است كه براي باس محلي حافظه قرار داده مي شود. اين تابع عموما يكي از توابع صفحه بندي يا سگمنت بندي يا هر دوي آنها است كه وابسته به هسته سيستم عامل، معماري پردازنده و حالت هاي آن دارد.

۲-۲- صفحه بندي:
در صفحه بندي، فضاي آدرس (چه به شكل مجازي و چه واقعي) به صفحات ثابتي كه البته مي تواند داراي چندين سايز مختلف باشد، تقسيم بندي مي شود. صفحات به صورت جداگانه مي توانند به دست گرفته شوند و در مكان هاي مختلفي در حافظه اصلي يا ديسك سخت قرار داده شوند.

ترجمه آدرس عملا توسط بخش مديريت حافظه يا MMU انجام ميگيرد. با استفاده از يك جدول صفحه در شكل ۱ نشان داده شده است. جداول صفحه ارتباط بين صفحات مجازي و صفحات فيزيكي را مشخص ميكنند. به عنوان مثال كدام صفحه مجازي هم اكنون كدام صفحه فيزيكي را اشغال كرده است.
MMU آدرس حافظه مجازي را به آدرس حافظه فيزيكي تبديل ميكند كه شامل شماره Page Frame است و يك آفست در آن صفحه است. حفاظت ميتواند به صورت صفحه به صفحه اعمال شود.
از آنجاييكه فضاي آدرس مجازي نسبت به حافظه فيزيكي عظيم است ما بايد از ديسك سخت براي ذخيره صفحات كه در حافظه فيزيكي نمي توانند ذخيره شوند استفاده كنيم. در ارتباط با هر صفحه مجازي در جدول صفحه يك بيت وجود دارد كه مشخص ميكند كه صفحه در حافظه فيزيكي وجود دارد يا خير. اگر صفحه در حافظه فيزيكي موجود نباشد سخت افزار يك پيغام خطاي صفحه توليد ميكند و اين حالت استثنا در نرم افزار كنترل شده و صفحه مورد نياز را از روي هارد ديسك به حافظه فيزيكي منتقل ميكند يا اگر غير قابل قبول باشد يك پيغام خطا توليد ميشود.
كافمن و دنينگ ويژگيهاي سيستمهاي صفحه بندي را به سه سياست مهم تقسيم بندي و معين كرده اند:

۱٫ وقتي سيستم صفحات را به حافظه اصلي بار ميكند سياست واكشي اجرا ميشود.
۲٫ جايي كه سيستم صفحات را در داخل حافظه قرار ميدهد سياست جايگذاري اعمال ميشود.
۳٫ روشي را كه به كمك آن سيستم صفحاتي را كه بايد از حافظه برداشته شوند انتخاب ميكند وقتي كه صفحات براي تقاضاي جايگذاري موجود نبودند سياست جايگذاري جابجايي اجرا ميگردد.

سياست جايگذاري فقط براي بهينه ساختن رفتار هاي معيني اهميت دارد. بنابراين به صورت عملي رفتار يك سيستم صفحه بندي فقط وابسته به سيا ستهاي واكشي و جايگذاري دارد. در اكثر سيستمهاي مدرن براي سياست واكشي يك سيستم صفحه بندي خاصي استفاده ميگردد كه در آن سيستم فقط وقتي كه صفحه اي مورد نياز باشد آنرا به حافظه بار ميكند ولي به هر حال گاهي اوقات بعضي از صفحات كه انتظار ميرود مورد نياز شوند را نيز از قبل صفحه بندي و جايگذاري مي نمايد. در ارتباط با سياست جايگذاري صفحه الگوريتمهاي زيادي در طول سالها اخته شده اند. مقايسه كاركرد الگوريتم هاي جايگذاري صفحات در مقالات بسياري آمده است.

۳- مقايسه:
حال ميخواهيم بر روي سيستم هاي مديريت حافظه در Linux 2.4 ، Windows 2000 و BSD 4.4 متمركز شويم. سيستم حافظه مجازي در BSD 4.4 مبتني بر كد حافظه مجازي Mach 2.0,2.5,3.0 است. Windows2000 جزو سري طولاني سيستم عامل ها از زمان MS-DOS ساخته شده است.
Linux 2.4 به وسيله هكرها ساخته شد كه در اصل توسط Linux Torvalds ساخته شده است.
علاوه بر منابعي كه در جاهاي گوناگون براي اين سيستم عاملها وجود دارد اطلاعات بيشتري را ميتوانيد در مورد اين موضوع از لينكهاي ۱۸و۱۷ و۲۱ در انتهاي مقاله بدست آوريد.
به جاي آنكه سيستمهاي مديريت حافظه را براي تك تك اين سيستمها به صورت جزئي توضيح دهيم كه يك كار بس طولاني خواهد بود ما در اينجا بعضي از نقاط بارز آنها را با هم مقايسه ميكنيم.
هر سه سيستم داراي سيستم مديريت حافظه مدرني هستند و داراي نكات مشترك زيادي ميباشند. ساختارهاي دادهاي آنها خيلي به هم شبيه اندو خصوصيات هر يك نيز به يكديگر شباهت زيادي دارد. بعضي از شباهتهاي آنها نيز در زير آورده شده است:
۲ لايه انتزاعي سخت افزار: تمام اين سيستم عاملها داراي لايه اي هستند كه به آن Hardware Abstraction Layer يا HAL ميگويند كه كارهاي وابسته به سيستم را انجام ميدهد و بنابراين به بقيه هسته اجازه ميدهد كه به شكل مستقل از زيربناي سخت افزار كد شود. اين شيوه، انتقال سيستم عامل را به ديگر ساختارهاي سخت افزاري ممكن ميسازد.
۳ كپي در حال نوشتن: وقتي كه يك صفحه بايد به اشتراك گذاشته شود، سيستم فقط از يك صفحه با هر دو پروسس استفاده ميكند كه از همان كپي صفحه به صورت اشتراكي استفاده ميكنند. بهر حال وقتيكه يك پروسس يك عمل نوشتن بر روي يك صفحه انجام ميدهد يك كپي خصوصي براي آن پروسس ساخته ميشود كه بعدا ميتواند به صورت انفرادي از آن استفاده كند. اين كار راندمان بسيار بهتري را به دست ميدهد.
۴ صفحه بندي سايه اي: يك شي سايه براي شي اصلي ساخته ميشود به طوريكه شي سايه اي بعضي از صفحات خود را به صورت تغيير يافته از صفحات شي اصلي داراست. اما بقيه صفحات را با شي اصلي به اشتراك ميگذارد و آنها با عمل كپي به هنگام نوشتن شكل ميگيرند.
۵ يك شبه پشت صحنه: يك شبه پشت صحنه وجود دارد كه به صورت متناوبصدا زده ميشود و كارهايي را مانند خالي كردن (Flushing) و آزاد سازي حافظه بلا استفاده را انجم ميدهد.
۶ فايلهاي قرار داده شده در حافظه: يك فايل ميتواند بر روي حافظه قرار داده شود كه بعدا ميتواند با دستورات ساده خواندن و نوشتن اسنفاده شود.
۷ ارتباطات بين پروسسي: فايلهاي قرار داده شده بر روي حافظه بعدا اجازه داده ميشوند كه بين پروسسها به اشتراك گذاشته شوند كه يك شيوه را براي ارتباطات بين پرو سس ها فراهم مي آورد.
در بخش زير ما اين سيستم ها را از نظر ويژگيهاي خاص آنها با هم مقايسه ميكنيم.

۳-۱- ساختما نهاي داده اي براي تشريح فضاي پروسس:
حال ما به مطالعه ساختمان داده هايي كه سيستمها براي نگه داري و ذخيره رد حافظه مجازي استفاده ميكنند ميپردازيم:

۳-۱-۱-BSD 4.4:
در BSD 4.4 ساختمان داده ها در شكل ۲ نشان داده شده اند. از آنجاييكه هر پروسس اساسا داراي فضاي آدرس مجازي مسطح خود است اين ساختار براي هر پروسس تكرار ميشود..
ساختار هاي اساسي عبارتند از :
۱ Vm_map_entry
2 Vm_map
3 Vm_space
4 Vm_page
5 Shadow object
6 Object

شكل۲) ساختارهاي داده اي براي مديريت حافظه مجازي پروسس

Vm_pMap يك لايه وابسته به سخت افزار است و وظيفه انجام مديريت حافظه را در پايين ترين سطح خود به عهده دارد و عموما شيوه هاي مختلفي را كه پروسسور هاي گوناگون براي برنامه نويسي حافظه مجازي دارند را پشتيباني ميكند و كد وابسته به سخت افزار را فق در يك موجول قرار ميدهد و موجب ميشود كه بقيه كد مربوط به حافظه مجازي مستقل از سخت افزار باشد. اين كار منجر به يك طراحي پيمانه ا ي و موجولار ميشود و انتقال كد به معماريهاي گوناگون را به نسبت آسانتر و سريعتر ميكند.
ساختار vm_map داراي يك اشاره گر به vm_pmap و يك زنجيره vm_pMap_entry است.
يك vm_map_entry براي هر ناحيه همسا يگي از حافظه مجازي استفاده ميشود كه داراي همان حقوق حفاظت و وراثت است. سپس به زنجيره اي از اشيا vm_object اشاره ميكند. آخرين چيز در ليست شي واقعي است مثل فايل و ديگري سايه شي ها هستند.
سايه شي ها در شاخه ديگري از كار مقيسه ما بحث خواهند شد. شي داراي يك اشاره گر به يك ليست از اشيا vm_page است كه نشان دهنده صفحات حافظه فيزيكي واقعي هستند. اين صفحات در حافظه اصلي به عنوان حافظه نهان از ديسك سخت شناخته ميشوند كه يكي از مفاهيم حافظه مجازي است.
همچنين Vm_object داراي اشاره گر هايي به توابعي است كه اعمالي را بر روي آن انجام ميدهند.

۳-۱-۲-Windows:
ساختارهاي دادهاي كه در WinodwsNT هستند در شكل ۳ نشان داده شده اند.

ساختار هاي داده اي Windows NT براي مديريت حافظه مجازي پروسس

به جاي يك ليست پيوندي Windows NT آنرا به شكل يك درخت نگه داري ميكند. هر نود اين درخت شناسه آدرس مجازي يا Virtual address Descriptor يا VAD ناميده ميشود. هر VAD نشانگر يك بازه از آدرسهاست كه داراي پارامتر هاي حفاظتي يكساني هستند و اطلاعات وضعيت را نگه داري ميكنند. اين درخت همچنين متعادل سازي شده است به اين معني كه عمق آن هميشه به ميزان حداقل نگه داري ميشود و اين موضوع اين مطلب را ميرساند كه زمان جستجو يعني مدت زمان كه طول ميكشد تا يك نود شامل يك آدرس را پيدا كنيم به صورت نسبي كم خواهد بود.
VAD هر نود درخت را به صورت يكي از مقادير حالت نگه داري، آزاد يا رزرو شده علامت ميزند.
نگه دارها آنهايي هستند كه مورد استفاده قرار گرفته اند. به عنوان مثال ديتا يا كد بر روي آنها ريخته شده است.
آنهائيكه مارك آزاد خورده اند هنوز مورد استفاده قرار نگرفته اند و آنهاييكه رزرو خورده اند آنهايي هستند كه قابل دسترس براي استفاده و نگاشتن نيستند تا زمانيكه حالت رزرو شده از روي آنها برداشته شود.
رزرواسيون در مواقع بخصوصي مورد استفاده قرار ميگيرد به عنوان مثال يك نود ميتواند براي پشته يك Thread هنگام ساخته شدن آن رزرو شود. پيوند به ريشه درخت در PCB يا Process control Block نگهداري ميشود.

۳-۱-۳- Linux:
لينوكس ساختار داده هاي حافظه مجازي را به شكل مشابهي با unix پياده سازي ميكند. آن يك ليست پيوندي از vm_area_structs نگه داري مينمايد. اينها ساختارهايي هستند كه مناطق پيوسته اي از حافظه را نمايش ميدهند كه داراي پارامتر هاي حفاظتي يكساني ميباشند. اين ليست هر گاه يك صفحه شامل مكان بخصوصي باشد كه بايد يافت شود مورد جستجو قرار ميگيرد. اين ساختار همچنين بازه آدرسهايي را كه به آنها نگاشته ميشود و مود حفاظتي در حافظه قرار دارد (غير قابل صفحه بندي) و سمتي را كه در حافظه رشد ميكند (بالا يا پايين) را ضبط ميكند. همچنين خصوصي يا عمومي بودن منطقه را نيز ضبط ميكند. اگر تعداد عناصر وارد شده در آن از يك عدد بخصوصي مثلا ۳۲ بيشتر شود آنگاه ليست پيوندي به يك درخت تبديل مي شود. اين شيوه بسيار خوبي است كه از بهترين ساختار در بهترين شرايط استفاده ميكند.

۳-۲- توزيع فضاي آدرس پروسس:
هر سه سيستم فضاي آدرس مجازي پروسس را به يك شكل توزيع ميكنند. فضاهاي بالاتر به وسيله مورد استفاده قرار ميگيرد و پروسس ميتواند بخش پايين تر را استفاده كند. فضاي متعلق به بخش هسته تمام پروسسها معمولا به يك كد آدرس هسته اشاره ميكند. بنابراين هنگاميكه يك پروسس سوئيچ ميكند ما بايد كه مقادير جدول صفحه بخش پائيني را جابجا كنيم در حاليكه بخش بالايي به همان صورت باقي ميماند. در لينوكس و BSD معمولا ۳ گيگا بايت براي پروسس و ۱ گيگا بايت براي هسته داده ميشود در حاليكه در Windows2000 به هر كدام ۲ گيگا بايت ميدهيم.

۳-۳- جابجايي صفحات:
جابجايي صفحات بخش مهم هر سيستم مديريت حافظه اي ميبا شد. اساسا جابجايي صفحات مشخص ميكند كه هنگامي كه به فضاي آزاد بيشتري در حافظه نياز داشتيم كدام صفحه به خارج يعني خارج از حافظه منتقل شود.
الگوريتم ايده آل جابجايي صفحات اين است كه آن صفحه اي را كه دير تر از همه دوباره ممكن است نياز شود را برداريم. با انجام اين كار موجب ميشويم كه حداقل تعداد خطاهاي صفحه رخ دهد و بنابراين حداقل زمان در جابجايي صفحات بين حافظه اصلي و ثانويه به وجود مي آيد. در عوض كارايي و بازدهي سيستم بالا مي رود. اما از آنجاييكه امكان ندارد كه بفهميم كدام صفحات در آينده مورد نياز ميشوند، الگوريتم جابجايي صفحه ايده ال غير ممكن است كه پياده سازي شود.
حال بگذاريد كه ببينيم چگونه هر كدام از سيستمها براي جابجايي صفحات كار ميكنند.

۳-۳-۱-:BSD 4.4
اين سيستم از صفحه بندي صفحات مورد نياز (با مقداري پيش صفحه بندي)براي سياست واكشي خود استفاده ميكند و يك الگوريتم تقريبي حداقل استفاده اخير سراسري دارد كه به آن از اين به بعد LRUكه مخفف Approximate Least Recently used است. صفحه بندي بر حسب تقاضا به اين معني است كه آنها فقط وقتي كه مورد نياز باشند به حافظه آورده ميشوند. براي خارج كردن صفحات سيستم با يك الگوريتم جابجايي سراسري كار ميكند. سراسري به اين معني است كه سيستم صفحه اي را كه بايد خارج شود بدون در نظر گرفتن پروسسي كه از آن اسفاده ميكند انتخاب ميكند و اين به اين معناست كه صفحات تمام پروسسها يكسان در نظر گرفته مي شوند و پارامتر هاي ديگري براي انتخاب بكار ميرود. سيستم حافظه اصلي را به ۴ بخش تقسيم ميكند:
۱) Wired: اين صفحات قفل شده اند و قابل جابجايي و خارج كردن از حافظه نمي باشند. اين صفحات معمولا به وسيله هسته استفاده ميشوند.
۲) Active: صفحاتي كه به نظر ميرسند به صورت فعالي مورد استفاده قرار ميگيرند در اين ليست قرار داده ميشوند.
۳) Inactive: اين صفحات غيرفعال كه داراي محتواي شناخته شده هستند ولي براي مدت زماني مورد استفاده نبوده اند.
۴) Free:صفحاتي كه داراي محتواي شناخته شدهاي نيستندو بنابراين بلافاصله مورد استفاده قرار ميگيرند.
يك شبه صفحه براي نگهداري مقداري از حافظه آزاد در سيستم استفاده مي شود. شبه صفحه پروسسي است كه اول از همه در مود هسته آغاز به كار ميكند و تا زمانيكه كامپيوتر خاموش شود باقي ميماند.

هدف شبه صفحه اين است كه يك مقدار حداقلي(معمولا ۵% از حافظه) را از صفحات در ليست آزاد نگه داري كند. كه اين مقدار در free_min نگهداري ميشود. متغير ديگري بنام Free_target وجود دارد كه معمولا ۷% از حافظه است. هر وقت كه به مقدار free_target برسيم شبه كارش را متوقف ميكند.
همچنين بايد مقدار صفحات غير فعال را نگه داري كنيم كه حداقل آن (كه معمولا ۳۳ % از حافظه است ) در inactive_target نگه داري ميشود. وليكن مقدار آن با گذشت زمان به صورت اتوماتيك توسط سيستم تنظيم ميشود. بنابراين هرگاه كه ميزان حافظه آزاد به زير free_min برسد شبح فراخواني ميشود. شبح شروع به اسكن ليست غيرفعال از قديميترين به جديدترين ميكند و كار هاي زير را براي هر صفحه انجام ميدهد:
۱ اگر صفحه پاك و غير ارجاع باشد به ليست آزاد ببر.

۲ اگر به توسط يك پروسس فعال اشاره شده باشد آنرا از ليست غير فعال به ليست فعال منتقل كن.
۳ اگر صفحه كثيف باشد و در حال حاضر در swap file نوشته شده باشد فعلا از آن عبور كن.
۴ اگر صفحه كثيف نيست و به صورت فعال استفاده نميشود پس آنرا روي ديسك برگردان.

بعد از اسكن كردن شبح چك ميكند كه ليست غير فعال كوچكتر از مقدار inactive_target باشد. سپس شروع به اسكن ليست فعال ميكند تا بعضي از صفحات را به ليست غير فعال برگرداند.

همچنين در BSD يك ايده جابجايي Swapping وجود دارد. وقتي كه نتواند با خطاهاي صفحه همراهي كند حتي وقتي كه كار ها ي خود را انجام ميدهد يا اگر پروسسي براي بيش از ۲۰ ثانيه غير فعال بماند شبح خروج از حافظه به حالت swappingميرود. در مود swapping آن پروسسي كه براي بيشترين زمان اجرا شده است گرفته شده وبه طور كامل به داخل ديسك سخت منتقل ميشود.

۳-۳-۲- Windows:

سيستمي كه توسط ويندوز براي اين كار مورد استفاده قرار ميگيرد بسيار بغرنج و پيچيده است. ويندوز از شيوه صفحه بندي مورد نياز كلاستر شده Clustered Demand Paging براي واكشي صفحات و از الگوريتم ساعت براي جابجايي صفحات استفاده ميكند. در روش Clustered Demand Paging صفحات فقط وقتي كه مورد نياز باشند به حافظه آورده مي شوند. همچنين به جاي آوردن يكي ويندوز معمولا يك كلاستر از آنها را كه شامل ۱ تا ۸ صفحه است را مي آورد كه بستگي به وضعيت فعلي سيستم دارد. هسته ۵ نوع خطاي صفحه دريافت ميكند.:

۱) صفحه اي كه به آن رجوع ميشود در حافظه قرار نگرفته است.

۲) يك اخطار حفاظتي اتفاق ميافتد.
۳) يك صفحه اشتراكي نوشته شده است.
۴) پشته نياز به رشد دارد.
۵) صفحه ارجاع شده در حافظه آمده است ولي در حال حاضر در حافظه كامل نگاشته نشده است.

دو خطاي اول جبران ناپذيرند و قابل درست شدن نميباشند. سومي نشانگر يك تلاش براي نوشتن بر روي يك صفحه فقط خواندني را نشان ميدهد. آن صفحه را يك جاي ديگر كپي كن و از صفحه جديد براي خواندن و نوشتن استفاده كن و در اين روش كپي به هنگام نوشتتن كار ميكند. خطاي ۴ با پيدا كردن يك صفحه اضافي پاسخ داده ميشود.
مهمترين مساله راجع به سيستم هاي صفحه بندي ويندوز اين است كه به صورت سنگيني از ايده working_set استفاده ميكند. Working_set مقدار فضاي حافظه اي تعريف ميشود كه به يك پروسس داده شده است. بنابراين working_set شامل صفحاتي از خود است كه در حافظه اصلي موجودند. سايزworking_set يك مقدار ثابت نيست بنابراين مضراتي كه بوسيله استفاده از آنها ميايد كمتر ميشود.
الگوريتم ساعت كه توسط ويندوز استفاده ميشود به صورت محلي عمل ميكند وقتي كه يك خطاي صفحه رخ ميدهد و working_set پروسس خطا كننده كمتر مقدار آستانه حداقل است آنگاه آن صفحه به Working_set اضافه ميشود. از طرف ديگر اگر working set اگر از يك مقدار آستانه ديگري بالاتر باشد آنگاه آن از اندازه آن كم ميشود.

بنابراين الگوريتم را ميتوان سراسري ناميد. اما سيستم يك سري بهينه سازي هاي سراسري نيز انجام ميدهد. به عنوان مثال، مقدار working_set پروسس ها را افزايش ميدهد كه موجب رخداد تعداد زيادي از خطا هاي صفحه ميگردد و مقدار working_set را براي آنهاييكه به حافظه كافي نياز ندارند كاهش ميدهد.

در عوض كار كردن وقتي كه يك خطاي صفحه رخ مي دهد درست مانند unix ويندوز نيز يك شبح كاري thread نيز دارد. اما در اينجا Balance Set Manager ناميده ميشود. اين شبح هر ثانيه صدا زده ميشود و ميزان حافظه آزاد را چك ميكند كه به مقدار كافي باشد. اگر نبود آنگاه Working set Manager را صدا ميكند و آن تا زمانيكه مقدار حافظه به بالاي مقدار آستانه برسد باقي ميماند. آن نيز working_set هاي پروسس را از قديمي و بزرگ تا جديد و كوچك چك ميكند و برحسب اينكه چه تعداد خطاي صفحه توليد كرده باشند آنها را زياد يا كم ميكنند. اگر بيت ارجاع يك صفحه پاك يا صفر باشد آنگاه شمارنده مرتبط به صفحه يكي اضافه ميشود و اگر بيت ارجاع يك باشد، صفر ميشود.

شكل ۴)ساختار داده ويندوز NT براي مديريت حافظه مجازي پروسس

بعد از اسكن صفحات با بالا ترين شماره از Working_Set برداشته ميشوند. بنابراين ويژگي سراسري بودن اين الگوريتم ساعت بدليل كار working Set Manager داده ميشود. ويندوز ليست صفحات را به ۴ بخش تقسيم ميكند:

۱) ليست صفحات تغيير يافته
۲) ليست صفحات در حال انتظار

۳) ليست صفحات آزاد
۴) ليست صفحات صفر شده.

اينها در شكل نشان داده شده اند. صفحات آزاد آن صفحات پاكي اند كه به هيچ پروسسي مرتبط نشده اند. ليست صفر شده ها ليست صفحاتي اند كه اگر احتياج شود صفر ميشوند.
نقل و انتقالات بين اين ليستها توسط Working set Manager و تعدادي ديگر از Threadهاي شبح مانند: Swapper Threadو صفحه نگاشته شده و نويسنده صفحات تغيير يافته انجام ميشود.