در هر کامپیوتر از مجموعه ای منابع سخت افزاری و نرم افزاری استفاده می گردد که هر یک دارای جایگاه مختص به خود می باشند .
سیستم عامل ، مسئولیت مدیریت منابع موجود در یک کامپیوتر را برعهده دارد .
مجموعه پتانسیل های سخت افزاری و نرم افزاری موجود و نحوه مدیریت آنان توسط سیستم عامل ، میزان مفید بودن و کارآئی یک کامپیوتر را مشخص می نماید.
حافظه اصلی ( RAM ) یکی از مهمترین منابع سخت افزاری موجود در کامپیوتر است که با توجه به نقش محوری آن در اجرای برنامه های کامپیوتری ، همواره در معرض پرسش های فراوانی از جانب کاربران کامپیوتر است.
به عنوان نمونه ، شاید این سوال برای شما نیز مطرح شده باشد که تاثیر افزایش حافظه اصلی بر سرعت کامپیوتر چیست و در صورت افزایش حافظه اصلی ، آیا کارائی سیستم نیز به همان میزان افزایش خواهد یافت ؟
در این مطلب به بررسی این موضوع خواهیم پرداخت که چرا حافظه اصلی دارای یک نقش مهم و غیرقابل انکار در کارائی سیستم است .
ادامه بحث را با در نظر گرفتن دو فرضیه دنبال می نمائیم .
اول این که بر روی کامپیوتر از یکی از نسخه های سیستم عامل ویندوز 2000 ، XP و یا 2003 سی و دو بیتی استفاده می گردد و دوم این که از یک کامیپوتر مدل جدید با پتانسیل های سخت افزاری مناسب ، استفاده می شود .
هر سیستم عامل از یک مدل خاص برای مدیریت منبع ارزشمند حافظه اصلی استفاده می نماید .
نحوه مدیریت حافظه توسط سیستم عامل ، یکی از شاخص های مهم ارزیابی موفقیت یک سیستم عامل محسوب می گردد .
ویندوز نیز به عنوان یک سیستم عامل از این قاعده مستثنی نمی باشد.
ویندوز و مدیریت حافظه
زمانی که اولین نسخه ویندوز ارائه شده بود ، امکان مدیریت حافظه اندکی توسط آن وجود داشت .
در آن زمان ، حافظه گران بود و حتی در صورتی که استفاده کنندگان توان مالی تهیه آن را داشتند ، کامپیوترهای آن دوره قادر به استفاده از آن نبودند .
این وضعیت تا اواسط دهه 90 میلادی ادامه داشت و بسیاری از افرادی که دارای کامپیوتر بودند ، صرفا از 8 مگابایت حافظه اصلی استفاده می کردند که امکان ارتقاء آن به حداکثر 64 مگابایت وجود داشت .
قیمت بالا و ظرفیت بردهای اصلی سیستم ( مادر برد ) ، از جمله محدودیت های اساسی کامپیوترها در گذشته ای نه چندان دور است که قطعا هم اینک این وضعیت بهبود یافته است و استفاده کنندگان کامپیوتر از این بایت کمتر دچار مشکل می گردند.
در اکثر نسخه های ویندوز امکان استفاده از حافظه مجازی وجود دارد .
با توجه به این که قیمت حافظه هارد دیسک نسبت به حافظه اصلی بمراتب کمتر است ، ویندوز از فضای ذخیره سازی هارد دیسک به منظور جبران کمبود حافظه اصلی سیستم استفاده می نماید .
حافظه مجازی ، یک راه حل مناسب به منظور غلبه بر محدودیت حافظه اصلی است که دارای چالش های مختص به خود نیز می باشد :
کند بودن سرعت هارد دیسک نسبت به حافظه اصلی : هارد دیسک دارای سرعتی بمراتب پائین تر ( کندتر ) نسبت به حافظه اصلی است .
دستیابی به حافظه اصلی بر اساس نانوثانیه و سرعت هارد دیسک بر اساس میلی ثانیه اندازه گیری می شود .
عدم امکان استفاده مستقیم از حافظه مجازی : یکی دیگر از مسائل در ارتباط با حافظه مجازی ، عدم امکان استفاده مستقیم از آن است .
مثلا" فرض کنید که یک صفحه اطلاعات از حافظه اصلی بر روی هارد دیسک ( حافظه مجازی ) نوشته گردد .
در صورتی که در ادامه به اطلاعات موجود در این صفحه نیاز باشد ، کامپیوتر نمی تواند مستقیما" به آن دستیابی داشته باشد .
در چنین مواردی ، می بایست قبل از این که کامپیوتر بتواند از داده استفاده نماید ، داده درون حافظه اصلی مستقر گردد .
به فرآیند فوق paging گفته می شود .
Paging باعث کند شدن یک سیستم می گردد چراکه کامپیوتر مجبور است در زمانی که داده از هارد دیسک به درون حافظه اصلی منتقل می گردد ، عملیات جاری خود را متوقف و منتظر بماند .
در واقع ، علت اصلی استفاده از حافظه مجازی نیاز کامپیوتر به حافظه و عدم وجود ظرفیت لازم برای تامین خواسته های سیستم عامل است .
در صورتی که حافظه سیستم تکمیل شده باشد ، کامپیوتر نمی تواند یک نسخه از صفحه داده را از هارد دیسک به درون حافظه اصلی منتقل نماید .
در چنین مواردی فضائی برای استقرار داده در حافظه اصلی وجود نداشته و سیستم عامل می بایست یک صفحه داده موجود در حافظه اصلی را به حافظه مجازی منتقل نماید تا فضای لازم برای داده ئی که به وجود آن نیاز است ، ایجاد گردد .
( داده ئی که می بایست از هارد دیسک به درون حافظه اصلی کامپیوتر منتقل شود ) paging ، فرآیندی است که می بایست مدیریت گردد .
کامپیوتر می بایست از مکانی در حافظه اصلی به منظور ثبت وضعیت استفاده از حافظه استفاده نماید .
بنابراین ، سیستم می بایست قسمتی از حافظه خود را برای ثبت وضعیت صفحات و این که کدام صفحه در حافظه اصلی و کدام صفحه در حافظه مجازی است ، در نظر بگیرد.
علاوه بر این ، سیستم از سیکل های متعدد پردازنده ( CPU ) به منظور انتقال داده بین حافظه اصلی و حافظه مجازی استفاده می نماید .
در صورتی که نگرانی خاصی در رابطه با Paging وجود نداشته باشد ، کامپیوتر به سرعت وظایف خود را انجام خواهد داد .
حافظه بیشتر، کاهش وابستگی ویندوز به حافظه مجازی ، عدم استفاده از زمان پردازنده و منابع دیگری نظیر هارد دیسک را به دنبال خواهد داشت .
شاید بهترین گزینه این باشد که به اندازه ای حافظه به سیستم اضافه گردد تا درصد استفاده از حافظه مجازی به حداقل مقدار ممکن کاهش یابد .
با این که گزینه فوق ممکن است به عنوان یک راه حل عملی باشد ، ولی نمی توان زمینه استفاده از حافظه مجازی را از ویندوز سلب نمود .
ویندوز بگونه ای طراحی شده است که بتواند از حافظه مجازی استفاده نماید و سیستم عامل این انتظار را دارد که حافظه مجازی موجود و برای وی در دسترس باشد .
هر اندازه که به سیستم حافظه فیزیکی اضافه گردد ، وابستگی آن به حافظه مجازی کمتر خواهد شد.
شاید از بحث فوق اینگونه برداشت شود که علت اصلی استفاده از حافظه مجازی ، جبران کمبود حافظه اصلی است .
برداشت فوق با این که درست است ولی بیانگر تمامی ابعاد موضوع نمی باشد و تنها نیمی از حقیقت را شامل می شود .
به عنوان یک قانون ، شرکت مایکروسافت توصیه می نماید که پیکربندی حافظه مجازی بر اساس میزان حافظه فیزیکی ( RAM ) نصب شده بر روی ماشین ، انجام شود و حداقل ، حافظه مجازی 5 / 1 برابر حافظه اصلی باشد .
این بدان معنی است که اگر ماشینی دارای 512 مگابایت حافظه اصلی باشد ، ویندوز انتظار دارد که بتواند به حداقل 768 مگابایت حافظه مجازی دستیابی داشته باشد .
فرض کنید که به این نتیجه رسیده اید که 512 مگابایت حافظه اصلی نیاز شما را تامین نمی نماید و تصمیم می گیرید حافظه ماشین خود را به یک گیگابایت ارتقاء دهید.با این کار شما نیاز ویندوز به حافظه مجازی را هم افزایش داده اید.در چنین شرایطی ویندوز این انتظار را دارد که بتواند به حافظه مجازی با ظرفیتی معادل 5 / 1 گیگابایت دستیابی داشته باشد .
علیرغم این که ظرفیت Pagefile ماشین ( فایلی که از آن به عنوان حافظه مجازی استفاده می شود ) افزایش می یابد، این بدان معنی نخواهد بود که ماشین از pagefile به سختی استفاده می نماید .
عموما" عکس این موضوع صادق است .
نصب حافظه بیشتر ، باعث می شود که ویندوز کمتر مجبور به paging گردد .
حتی اگر ویندوز همچنان مجبور به استفاده از حافظه مجازی باشد ، حافظه اضافه نصب شده این اطمینان را ایجاد می نماید که page مرتبط با برنامه در حال اجراء ، در حافظه اصلی موجود است و سیستم عامل به دلیل کمبود حافظه مجبور نخواهد بود که آن را بر روی فضای ذخیره سازی حافظه جانبی منتقل نماید .
بدین ترتیب برنامه ها با سرعت بیشتری اجراء شده و در زمانی مطلوب نیاز کاربران را تامین و در نهایت کارآئی سیستم افزایش خواهد یافت .
آیا محدودیتی در ارتباط با حافظه وجود دارد ؟
در ابتدای بحث اشاره گردید که اطلاعات موجود در این مقاله صرفا" برای سیستم های 32 بیتی مفید بوده و در ارتباط با سیستم های 64 بیتی نمی باشد .
حقیقت این است که حتی سیستم های 64 بیتی نیز در ارتباط با حافظه مجازی می باشند ولی نسخه های 32 بیتی و 64 بیتی بطور کامل از مدل های حافظه مختلفی استفاده می نمایند .
سیستم های 32 بیتی صرفا" دارای 32 بیت بوده و می توانند حداکثر 4 گیگابایت حافظه اصلی را آدرس دهی نمایند .
یک سیستم 64 بیتی از لحاظ تئوری قادر به آدرس دهی 16 اگزابایت ( بیش از 16،000،000 گیگابایت حافظه RAM ) می باشد.
تولید یک ماشین که بتواند از این میزان حافظه حمایت نماید در حال حاضر هزینه بالائی داشته و مقرون به صرفه نمی باشد .
اکثر سیستم های 64 بیتی موجود میزان حافظه اصلی را محدود بین 8 گیگابایت و 256 ترابایت نموده اند .
محدودیت فضای آدرس دهی 4 گیگابایتی برای ماشین های 32 بیتی که برروی آنان ویندوز نصب شده است ، چه پیامدهائی را به دنبال دارد ؟
ویندوز بگونه ای طراحی شده است تا بتواند بطور کامل 4 گیگابایت حافظه را آدرس دهی نماید .
ویندوز فضای چهار گیگابایتی را به دو بخش مساوی تقسیم می نماید .
یکی از بخش ها توسط سیستم عامل و از بخش دیگر به منظور User mode ( یا برنامه ها ) استفاده می گردد .
در صورت نیاز می توان پیکربندی پیش فرض فوق را تغییر داد .
بدین منظور از فایل Boot.ini استفاده می گردد .
به عنوان نمونه می توان در فایل فوق از سوئیچ 3GB / استفاده نمود .
بدین ترتیب ویندوز پیکربندی پیش فرض خود را تغییر و از یک فضای یک گیگابایتی برای خود و از یک فضای 3 گیگاباتیی برای user mode استفاده می نماید .
بدین ترتیب ویندوز می تواند مدیریت بهتری را به منظور تامین خواسته برنامه های بزرگی نظیر Exchange server انجام دهد(هر گز از سوئیچ اشاره شده بر روی Small Business Server و یا یک کنترل کننده domain استفاده نگردد) .
معیار های زمانبندی در سیستم عامل عدالت (fairness) یعنی اطمینان از اینکه هر پروسس سهم عادلانه و منصفانهای از CPU را دریافت کند.
کارایی یا بهره وری (utilization- Efficiency) CPU یعنی اینکه CPU در تمام زمانها (حتی الامکان) مشغول باشد زمان پاسخ (Response Time) یعنی به حداقل رساندن زمان پاسخ برای فرمانهای محاورهای کاربر.
این زمان معمولاً با سرعت ابزار خروجی محدود میشود.
زمان برگشت (یا گردش کار Turnaround) یعنی به حداقل رساندن زمانی که کاربران دستهای باید منتظر بمانند تا خروجی آنها پدید آید .
فاصله زمانی از لحظه تحویل کار تا لحظه تکمیل کار را زمان برگشت مینامند ولی زمان پاسخ مدت زمانی است که از صدور یک تقاضا تا تولید اولین پاسخ آن طول میکشد (نه زمان خروجی کل برنامه) زمان بارگذاری در حافظه +زمان عملیات I/O +زمان اجراء+ زمان انتظاردر صف آماده = زمان گردش کار توان عملیاتی یا گذردهی (throughput) به تعداد پردازشهایی که در واحد زمان تکمیل میشوند توان عملیاتی میگویند.
الگوریتم زمانبندی باید به گونهای باشد که این معیار را افزایش دهد .
زمان انتظار (waiting time) الگوریتم زمانبندی CPU, بر میزان زمان اجرای پردازش یا اعمال I/O اثر نمیکند, بلکه فقط در زمان صرف شده جهت انتظار در صف آماده اثر میگذارد.
زمان انتظار , مجموع پریودهای زمانی صرف شده در صف آماده میباشد.
انواع زمانبندیها در سیستم عامل از یک جنبه زمانبندیهای پردازش در سیستم عامل به سه دسته : الف) دراز مدت (Long term scheduler) ب) کوتاه مدت(Short term scheduler) ج ) میان مدت تقسیم بندی میشوند.
در یک سیستم دسته ای پردازشهای بیشتری نسبت به آنچه فوراً میتوانند اجرا شوند تحویل داده میشوند .
این پردازشها در دیسک نگهداری میشوند .زمانبندی دراز مدت (یازمانبندی کار sheduler Job )پروسسهایی را انتخاب کرده و آنها را برای اجرا از دیسک به حافظه اصلی میآورد.
زمانبند کوتاه مدت (یا زمانبند CPU ) از بین پروسسهای موجود در حافظه اصلی که آماده اجرا هستند یک را انتخاب کرده و CPU را به آن اختصاص میدهد.
غالبا زمانبند کوتاه مدت هر صد میلی ثانیه یک بار اجراء میشود ولی زمانبند دراز مدت ممکن است هر چند دقیقه یک بار اجرا شود.
در واقع زمانبند دراز مدت در جه چند برنامگی (degree of multiprogramming) یعنی تعداد پردازشهای موجود در حافظه را کنترل میکند .
زمانبند دراز مدت وقت زایدی برای تصمیم گیری دارد ولی زمانبند کوتاه مدت میبایست خیلی سریع تصمیمی گیری کند.
زمانبند دراز مدت میبایست مخلوط مناسبی از پردازشهای CPU-limiter و I/O limited را جهت قرار گیری در حافظه انتخاب کند تا کارایی CPU و وسایل I/O بهینه شود.
در بعضی سیستمها مثل اغلب سیستم های اشتراک زمانی زمانبند دراز مدت وجود ندارد، چرا که هر پردازش در سیستم عامل جدید جهت زمانبند CPU در حافظه گذاشته میشود تا زمان پاسخ دهی به برنامه مناسب باشد.
البته بعضی سیستم عاملها از زمانبند میان مدت نیز استفاده میکنند.
بدین ترتیب که گاهی پروسس هایی از حافظه و در واقع از رقابت جهت دریافت CPU حذف شده و به دیسک برده میشوند (swap Out) .بدین ترتیب درجه چند برنامگی کاهش مییابد .
سپس در زمانی دیگر پردازش در سیستم عامل مذکور مجددا به حافظه آورده شده (swap in) و اجرایش از همان نقطه قبلی ادامه مییابد، این عملیات به نام مبادله (swapping)معروف است .
زمانبندی CPU به طوری کلی می تواند انحصاری (غیر قابل پس گرفتن non preemptive) یا غیر انحصاری (قابل پس گرفتن preemptive) باشد.
در سیستم انحصاری فقط هنگامی CPU ازپردازش در حال اجراء گرفته میشود که جهت عملیات I/O یا اتمام پردازش در سیستم عامل فرزند را رخداد دیگری بلوکه شود.
بنابراین مفهوم و پیاده سازی الگوریتم زمانبندی انحصاری ساده است .ولی ممکن است پردازشی برای مدت طولانی CPU را جهت محاسبات در اختیار بگیرد.
رد این حال پردازشهای دیگر برای مدتی طولانی انتظار خواهند کشید و این موضوع مخصوصاً برای سیستمهای اشتراک زمانی نامناسب است .لذا در اغلب سیستمها از یک زمان سنج(Timer) داخلی برای ایجاد وقفههای متناوب سخت افزاری جهت گرفتن CPUاستفاده میشود.
در هر وقفه در سیستم عامل ساعت، سیستم عامل اجرا میشود تا تصمیم بگیرد که آیا به پروسس در حال اجرا اجازه ادامه کار را بدهد یا اینکه چون پروسس به اندازه کافی از زمان CPU استفاده کرده آن را معلق نماید تا CPU به پروسس دیگری تخصیص داده شود.
فرکانس این وقفه در سیستم عاملهای ساعت معمولا بین 50تا60 بار در ثانیه است .
این نوع زمانبندی که در آن پس از تمام شدن برش زمانی معین ، CPU از گرفته میشود زمانبندی غیر انحصاری نام دارد.