حافظه مجازی
در این تمرین شما با صورتها و شكلهای مختلفی از مكانیزم حافظه مجازی در ویندوز NT آشنایی پیدا خواهید كرد علیرغم اغلب دیگر سیستمهای عامل، ویندوز NT یك API ساده و روشنی را برای اداره كردن بعضی شكلها و صورتهای حافظه مجازی تهیه میكند(معمولاً حافظه مجازی بطور كامل توسط برنامه نویس كاربردیاش روشن و واضح میگردد) در این تمرین شما در موارد زیر اطلاعاتی یاد خواهید گرفت:
سازماندهی سیستم حافظه مجازی ویندوز NT
چگونه فضای حافظه مجازی خود را كنترل كنید؟
چگونه یك وسیله آگاه كننده و گزارش دهنده بنویسید؟
جزئیات GlobalMemory Status , GetsystemInfo – VirtualQuery – VirtualUnlock – VirtualLock – VirtueaFree – VirtualAlloc
معرفی
حافظه مجازی صفحهبندی یا Paging Virtual Memory در بسیاری از سیستمهای عامل امروزی بكار گرفته میشود. در یك سیستم صفحهبندی شده، هر فرآیندی یك فضای آدرس دهی مجازی خاص خود دارد كه برای ارجاع دیگر اشیاء بكار گرفته میشود كه معمولاً محتوای یك محل یا موقعیتی از حافظه است بخشی از فضای آدرس دهی مجازی توسط ویراستار خطی ( Link editor ) تعریف میشوند وقتی كه آن یك تصویر قابل اجرایی بوجود میآورد كه در واقع فایل اجرایی یا EXE است. تعداد باقیمانده از فضای آدرسدهی میتواند بطور پویا در زمان اجرا توسط روشهایی كه در این تمرین توضیح داده خواهد شد تعر یف شود. بعد از اینكه قسمت پایدار و ثابت از فضای آدرسدهی مجازی ایجاد شد در حافظه ثانویه ذخیره خواهد شد ( معمولاً در بخش یا Partition از وسیله ذخیرهسازی كهPaging disk نام دارد ). به منظور عملیتر شدن شما میتوانید Paging disk را مشابه فایل در نظر بگیرید.
در یك كامپیوتر معمول و مرسوم پردازنده تنها میتواند دستورات را واكشی كند یا دادههایی را كه در حافظه اولیه یا قابل اجرا ( كه معمولاً RAM خوانده میشوند. ) واقع شدهاند را بارگذاری كند. حافظه اولیه در مقایسه با حافظه ثانویه كوچكتر و سریعتر است. حافظه اولیه خیلی گرانتر از حافظه ثانویه است بنابراین بطور معمول در زمره اجزای با ارزشتر از نظر حجم اما كوچكتر از حافظههای ثانویه قرار دارند.
اغلب كامپیوترها حافظه اولیه كافی حتی برای ذخیره فضای آدرسدهی مجازی كامل یك فرآیند را هم ندارند بنابراین در یك زمان تعداد زیادی فضا روی حافظه ثانویه برای ذخیره فضای آدرسدهی مجازی تعداد زیادی فرآیند وجود خواهد داشت. حافظه اولیه همچنین خیلی سریعتر از حافظه ثانویه میباشد. پردازنده میتواند یك بایت را در 2 سیكل پردازنده در حافظه اولیه بخواند یا بنویسید. اما همین عمل هزاران سیكل از پروسسور را برای نوشتن یا خواندن اطلاعات در حافظه ثانویه نیازمند است.
برای نگهداری فضای حافظه اولیه یك سیستم حافظه مجازی صفحهبندی شده در هر زمان داده شده تنها بخشی از فضای آدرسدهی مجازی تعداد مختلفی از فرآیندها را بارگذاری یا ( Load ) میكند. همانطور كه Thread ها در فضای آدرسدهی فرآیندهایشان اجرا میشوندبخشی از فضای آدرسدهی مجازی كه در حال حاضر در حال استفاده است در حافظه اولیه بارگذاری میشود و در همان حال دیگر بخشهای فضای آدرسدهی در حافظه ثانویه قرار گرفتهاند. زمانی كه فرآیندی به بخشی از فضای آدرسدهی مجازی دیگر نیاز ندارد ( حداقل برای مدتی ) از آن بخش در حافظه ثانویه كپی گرفته میشود. این به موقعیتی از حافظه اولیه كه مورد استفاده برای ذخیره بخشی از فضای آدرسدهی مجازی قرار گرفته بود این اجازه را میدهد كه برای ذخیره بخش دیگری از فضای آدرسدهی مجازی در زمان دیگری بكار گرفته شود.
در یك سیستم حافظه مجازی سنجش در كارایی بوسیله كپی كردن یك بلوك از حافظه در حافظه اولیه یا بازگرداندن به حافظه ثانویه در زمانی كه یك جابهجایی بین دوسطح از سلسله مرتبه حافظ مورد نیاز و ضروری باشد بدست میآید كارایی از این واقعیت بدست میآید كه عملیات ورودی و خروجی حافظه ثانویه وابسته به بلوكها میباشد. این یعنی اگر تنها یك كلمه ( Word ) اطلاعات از حافظه ثانویه مورد نیاز باشد همه بلوك باید خوانده شود تابه آن كلمه برسیم. همچنین نسبت به مكانی كه همه آن بلوك در حافظه اولیه قرار داد هم احساس است تا زمانی كه باید خوانده شود تابه لغت گم شده برسیم.
فواید دیگری در بارگذاری همه بلوكها نسبت به فقط یك كلمه وجود دارد. هنگامی كه یك نخ یا Thread به مكانی چون I رجوع میكند احتمال زیادی وجود دارد كه بخواهد به مكان I+1 در آینده نزدیك رجوع كند به این مفهوم محلیت یا Locality گفته میشود. یك حافظه مجازی صفحهبندی شده بلوكهای با اندازة ثابت را بارگذاری میكند و یا برمیدارد كه به آنها صفحه یا Page گفته میشود كه در زمانی كه دادهها و اطلاعات را بین حافظه اولیه و ثانویه در جهت رفت و برگشت حركت میدهد انجام میگیرد. حد و مرز صفحهها یا Page ها كاملاً توسط برنامهنویس مشخص و واضح میشود. شكل 1 عملیات یك سیستم حافظه مجازی صفحهبندی شده بطور عام را خلاصه میكند.
زمانی كه یك نخ یا Thread به آدرس مجازی K رجوع میكند ( مرحله 1 در شكل ) حافظه مجازی ابتدا تعدا صفحات یا Page هایی كه آدرس مجازی K را در بردارد تعیین میكند (مرحله2 در شكل ) اگر صفحه در حال حاضر در حافظه اولیه بارگذاری شده بود و موجود بود ( مرحله 3 در شكل ) سیستم حافظه مجازی آدرس مجازی را به آدرس فیزیكی متناظر با آن موقعیت در حافظه اولیه كه همان Page Frame است تبدیل میكند ( جایی كه صفحه هدف در آن واقع شده است. ) اگر صفحه در همان زمان كه به آن رجوع شده بارگذاری نشده بود اجرای Thread عادی دچار وقفه میشود تا زمانی كه مدیریت حافظه صفحه مقصد را در Page Frame بارگذاری كند به محضی كه آن صفحه بارگذاری شد اجرا ادامه پیدا خواهد كرد در مرحله 4 رجوع به آدرس مجازی K دوباره با آدرس فیزیكی در حافظه اولیه تعیین میگردد ( مكانی كه موقعیت مجازی K در حال حاضر آنجا بارگذاری شده است. )
حافظه مجازی
در این تمرین شما با صورتها و شكلهای مختلفی از مكانیزم حافظه مجازی در ویندوز NT آشنایی پیدا خواهید كرد علیرغم اغلب دیگر سیستمهای عامل، ویندوز NT یك API ساده و روشنی را برای اداره كردن بعضی شكلها و صورتهای حافظه مجازی تهیه میكند(معمولاً حافظه مجازی بطور كامل توسط برنامه نویس كاربردیاش روشن و واضح میگردد) در این تمرین شما در موارد زیر اطلاعاتی یاد خواهید گرفت: سازماندهی سیستم حافظه مجازی ویندوز NT چگونه فضای حافظه مجازی خود را كنترل كنید؟ چگونه یك وسیله آگاه كننده و گزارش دهنده بنویسید؟ جزئیات GlobalMemory Status , GetsystemInfo – VirtualQuery – VirtualUnlock – VirtualLock – VirtueaFree – VirtualAlloc معرفی
حافظه مجازی صفحهبندی یا Paging Virtual Memory در بسیاری از سیستمهای عامل امروزی بكار گرفته میشود. در یك سیستم صفحهبندی شده، هر فرآیندی یك فضای آدرس دهی مجازی خاص خود دارد كه برای ارجاع دیگر اشیاء بكار گرفته میشود كه معمولاً محتوای یك محل یا موقعیتی از حافظه است بخشی از فضای آدرس دهی مجازی توسط ویراستار خطی ( Link editor ) تعریف میشوند وقتی كه آن یك تصویر قابل اجرایی بوجود میآورد كه در واقع فایل اجرایی یا EXE است. تعداد باقیمانده از فضای آدرسدهی میتواند بطور پویا در زمان اجرا توسط روشهایی كه در این تمرین توضیح داده خواهد شد تعر یف شود. بعد از اینكه قسمت پایدار و ثابت از فضای آدرسدهی مجازی ایجاد شد در حافظه ثانویه ذخیره خواهد شد ( معمولاً در بخش یا Partition از وسیله ذخیرهسازی كهPaging disk نام دارد ). به منظور عملیتر شدن شما میتوانید Paging disk را مشابه فایل در نظر بگیرید. در یك كامپیوتر معمول و مرسوم پردازنده تنها میتواند دستورات را واكشی كند یا دادههایی را كه در حافظه اولیه یا قابل اجرا ( كه معمولاً RAM خوانده میشوند. ) واقع شدهاند را بارگذاری كند. حافظه اولیه در مقایسه با حافظه ثانویه كوچكتر و سریعتر است. حافظه اولیه خیلی گرانتر از حافظه ثانویه است بنابراین بطور معمول در زمره اجزای با ارزشتر از نظر حجم اما كوچكتر از حافظههای ثانویه قرار دارند. اغلب كامپیوترها حافظه اولیه كافی حتی برای ذخیره فضای آدرسدهی مجازی كامل یك فرآیند را هم ندارند بنابراین در یك زمان تعداد زیادی فضا روی حافظه ثانویه برای ذخیره فضای آدرسدهی مجازی تعداد زیادی فرآیند وجود خواهد داشت. حافظه اولیه همچنین خیلی سریعتر از حافظه ثانویه میباشد. پردازنده میتواند یك بایت را در 2 سیكل پردازنده در حافظه اولیه بخواند یا بنویسید. اما همین عمل هزاران سیكل از پروسسور را برای نوشتن یا خواندن اطلاعات در حافظه ثانویه نیازمند است.برای نگهداری فضای حافظه اولیه یك سیستم حافظه مجازی صفحهبندی شده در هر زمان داده شده تنها بخشی از فضای آدرسدهی مجازی تعداد مختلفی از فرآیندها را بارگذاری یا ( Load ) میكند. همانطور كه Thread ها در فضای آدرسدهی فرآیندهایشان اجرا میشوندبخشی از فضای آدرسدهی مجازی كه در حال حاضر در حال استفاده است در حافظه اولیه بارگذاری میشود و در همان حال دیگر بخشهای فضای آدرسدهی در حافظه ثانویه قرار گرفتهاند. زمانی كه فرآیندی به بخشی از فضای آدرسدهی مجازی دیگر نیاز ندارد ( حداقل برای مدتی ) از آن بخش در حافظه ثانویه كپی گرفته میشود. این به موقعیتی از حافظه اولیه كه مورد استفاده برای ذخیره بخشی از فضای آدرسدهی مجازی قرار گرفته بود این اجازه را میدهد كه برای ذخیره بخش دیگری از فضای آدرسدهی مجازی در زمان دیگری بكار گرفته شود. در یك سیستم حافظه مجازی سنجش در كارایی بوسیله كپی كردن یك بلوك از حافظه در حافظه اولیه یا بازگرداندن به حافظه ثانویه در زمانی كه یك جابهجایی بین دوسطح از سلسله مرتبه حافظ مورد نیاز و ضروری باشد بدست میآید كارایی از این واقعیت بدست میآید كه عملیات ورودی و خروجی حافظه ثانویه وابسته به بلوكها میباشد. این یعنی اگر تنها یك كلمه ( Word ) اطلاعات از حافظه ثانویه مورد نیاز باشد همه بلوك باید خوانده شود تابه آن كلمه برسیم. همچنین نسبت به مكانی كه همه آن بلوك در حافظه اولیه قرار داد هم احساس است تا زمانی كه باید خوانده شود تابه لغت گم شده برسیم. فواید دیگری در بارگذاری همه بلوكها نسبت به فقط یك كلمه وجود دارد. هنگامی كه یك نخ یا Thread به مكانی چون I رجوع میكند احتمال زیادی وجود دارد كه بخواهد به مكان I+1 در آینده نزدیك رجوع كند به این مفهوم محلیت یا Locality گفته میشود. یك حافظه مجازی صفحهبندی شده بلوكهای با اندازة ثابت را بارگذاری میكند و یا برمیدارد كه به آنها صفحه یا Page گفته میشود كه در زمانی كه دادهها و اطلاعات را بین حافظه اولیه و ثانویه در جهت رفت و برگشت حركت میدهد انجام میگیرد. حد و مرز صفحهها یا Page ها كاملاً توسط برنامهنویس مشخص و واضح میشود. شكل 1 عملیات یك سیستم حافظه مجازی صفحهبندی شده بطور عام را خلاصه میكند.زمانی كه یك نخ یا Thread به آدرس مجازی K رجوع میكند ( مرحله 1 در شكل ) حافظه مجازی ابتدا تعدا صفحات یا Page هایی كه آدرس مجازی K را در بردارد تعیین میكند (مرحله2 در شكل ) اگر صفحه در حال حاضر در حافظه اولیه بارگذاری شده بود و موجود بود ( مرحله 3 در شكل ) سیستم حافظه مجازی آدرس مجازی را به آدرس فیزیكی متناظر با آن موقعیت در حافظه اولیه كه همان Page Frame است تبدیل میكند ( جایی كه صفحه هدف در آن واقع شده است. ) اگر صفحه در همان زمان كه به آن رجوع شده بارگذاری نشده بود اجرای Thread عادی دچار وقفه میشود تا زمانی كه مدیریت حافظه صفحه مقصد را در Page Frame بارگذاری كند به محضی كه آن صفحه بارگذاری شد اجرا ادامه پیدا خواهد كرد در مرحله 4 رجوع به آدرس مجازی K دوباره با آدرس فیزیكی در حافظه اولیه تعیین میگردد ( مكانی كه موقعیت مجازی K در حال حاضر آنجا بارگذاری شده است. )
کامپیوتر