سیستم عامل کوثر

سیستم عامل فارسی کوثر

سیستم عامل کوثر

سیستم عامل فارسی کوثر

سیستم عامل کوثر

سیستم عامل کوثر یک سیستم عامل فارسی بر پایه معماری X86 می باشد. هدف این سیستم عامل تا اطلاع ثانوی آزمایشی / آموزشی می باشد. این سیستم عامل بر پایه هیچ سیستم عامل دیگری مانند لینوکس و ... نمی باشد و از ابتدا توسط توسعه دهندگان آن نوشته شده است.
ما از علاقمندان به برنامه نویسی و طراحی سیستم در همکاری و توسعه این سیستم عامل استقبال می کنیم. نیازی نیست که شما برنامه نویسی و یا ... خبره باشید. حتی با دانش کم هم می توان به ما کمک کرد.
امید است بعد از مراحل آموزشی به مرحله بهره برداری از یک سیستم عامل کاملا بومی برسیم.
emadrezvani@chmail.ir

آخرین نظرات
نویسندگان

۹ مطلب با موضوع «بخش تخصصی مدیریت حافظه» ثبت شده است

جدول صفحه - نیاز حافظه مجازی

مازیار نون | پنجشنبه, ۱۹ تیر ۱۳۹۳، ۱۰:۰۷ ب.ظ

سلام

هنگامیکه در پروژه ای صحبت از حافظه مجازی می شود باید برای ترجمه آدرس ها راهکاری در نظر گرفته شود. حافظه مجازی بدون جدول صفحه و شناخت و درک ترجمه آدرس ها امکان پیاده سازی برای آن وجود ندارد. این در تمام پروژه های رسمی از ویندوز تا لینوکس کاملاً واضح و قابل اثبات است.

در این پست می خوام در مورد یکی از روش های ترجمه که در سیستم های مدرن استفاده می شود بپردازم.

در این روش اطلاعات نگاشت به جداول صفحه ای سازماندهی می شود ، که کلکسیونی از مدخل های جدول صفحه (PTE) هستند. هر PTE معمولاً اطلاعاتی برای تنها یک صفحه در یک زمان نگهداری می کند. به طور حداقلی ، یک PTE نشان می دهد که آیا صفحه مجازی در حافظه اصلی است ، بر روی دیسک است ، یا تخصیص نیافته است. با گذشت زمان ، حافظه مجازی برای اداره کاربردهای اضافی تکامل می یابد ، این کاربردها شامل حفاظت از فضای آدرس و حفاظت سطح صفحه است. بنابراین یک PTE معمولاً در حال حاضر شامل اطلاعات اضافی از جمله اینکه آیا صفحه دارای کد اجرایی است ، آیا آن تغییر کرده است اگر تغییر کرده است توسط چه کسی تغییر انجام شده است ، می باشد.

اغلب سیستم عامل های امروزی ، مانند ویندوز ، لینوکس ، و گونه های مختلف UNIX ، از فضای آدرس و حفاظت سطح صفحه در چنین روشی پشتیبانی می کنند.

با PTE ، سیستم عامل باید قادر به مشخص کردن موارد زیر باشد:

  • شماره شناسایی دارنده صفحه : شناسه فضای آدرس ، که گاهی اوقات یک کلید دسترسی نامیده می شود.
  • شماره صفحه مجازی
  • تعیین اینکه آیا PTE شامل اطلاعات ترجمه معتبر است: تعیین یک بیت اعتبار
  • اطلاعات ترجمه صفحه: موقعیت آن در حافظه (شماره قاب صفحه یا PFN) یا موقعیت بر روی دیسک (برای مثال ، یک شماره بلاک دیسک یا یک آفست به یک فایل جابجایی).
  • اطلاعات حفاظتی صفحه ، از جمله تعیین فقط خواندنی ، فقط نوشتنی ، خواندنی-نوشتنی.
  • تعیین اینکه آیا بر روی صفحه به تازگی نوشته شده است.
  • تعیین اینکه آیا به این صفحه به تازگی دسترسی شده: این به ما در روش های جایگزینی صفحه که من بعداً توضیح خواهم داد کمک می کند.
سیستم عامل از بیت های ارجاع و تغییر برای پیاده سازی یک تخمین برای به حداقل رساندن سیاست های جایگزینی صفحه استفاده می کند.
سیستم عامل به طور دوره ای بیت ارجاع را از تمام صفحات نگاشت شده به منظور اندازه گیری استفاده از صفحه پاک می کند.
در روش های جایگزینی صفحه با مشاهده بیت تغییر باید تصمیم گرفت که صفحه بر روی دیسک بازنویسی شود یا خیر. که این کار قبل از جایگزینی صفحه انجام می شود.

سازمان PTE به این صورت است که ممکن است به بعضی از آیتم ها به طور ضمنی ، اجازه مشاهده داده می شود. برای مثال ، در اغلب پیاده سازی ها نیاز به شماره صفحه مجای و شماره قاب صفحه نیست. به این ترتیب سازمان PTE به صورتی است که در روش های مراجعه باعث کاهش در PTE می شود.
در PTE ، در صورتیکه هر فرآیند دارای جدول صفحه خود است یا اگر مکانیزم دیگری به جز شناسه های فضای آدرس وجود دارد که با آدرس های تولید شده توسط فرآیندهای نامرتبط متفاوت است ، نیازی به شناسه فضای آدرس نیست.

مدلی که در بالا به طور خلاصه توضیح دادم در بسیاری از سیستم عامل های رسمی به کار گرفته شده است و نتایج خوبی برای مدل توسعه ارائه داده است از جهت باید با دقت بالا و با شناخت دقیق معماری و سازمان اداره کردن حافظه روش را به کار گرفت. این روش تا حدودی باعث کاهش سربار و حتی فضای به کار گرفته شده در حافظه شد.


  • مازیار نون

سلام

با توجه به اینکه پروژه وارد فاز طراحی مدیریت حافظه شده است من در این پست کوتاه ، به ساختار داده ترجمه آدرس مجازی به فیزیکی می پردازم.

نکته: این ساختار داده بسیار ساده است و در بسیاری از سیستم عامل ها متفاوت می باشد.


برای ترجمه آدرس ، شما نیاز به یک ساختار داده دارید که با استفاده از آن بتوانید پروسه ترجمه آدرس را مدیریت کنید.

ابتدا یک جدول به نام جدول صفحه را مدل سازی کنید.

این جدول شامل:

  • اندیس : شماره صفحه مجازی (حافظه مجازی)
  • هر خانه جدول شامل:
             - شماره صفحه: شماره صفحه فیزیکی (حافظه اصلی)
             - بیت حضور: تعیین کننده اینکه صفحه در حافظه اصلی است یا خیر؟
             - بیت تغییر: تعیین کننده اینکه آیا صفحه در حافظه اصلی تغییر کرده است.
             - بیت فقط خواندنی: تعیین کننده اینکه صفحه فقط خواندنی است.
             - بیت ارجاع: تعیین کننده اینکه آیا به صفحه مراجعه شده است.

استفاده از سایر بیت ها بستگی به نیاز پروژه شما دارد.

تعریف ساختار داده:

struct TranslateTable
{
تعریف اندیس:
int NumVpage;

تعریف شماره صفحه:
int NumPhPage;

تعریف بیت ها به ترتیب بالا:
bool Pr_page;
bool Mdf;
bool R_onley;
bool Ref_page;
}

نکته: البته می توان به جای bool از یک نوع داده مناسب دیگر استفاده کرد.
با تشکر
تیم سیستم عامل کوثر

  • مازیار نون

انتخاب روش های مدیریت حافظه - بخش ششم

مازیار نون | شنبه, ۱۴ تیر ۱۳۹۳، ۰۹:۲۶ ب.ظ

سلام

قبل از آنکه به ادامه مطالب بپردازم لازم است مسئله ای را اینجا مطرح کنم.

من در واقع قبل از آنکه پست های مربوط به سیستم عامل را اینجا بگذارم باید می گفتم که این پست ها آموزش برای طراحی سیستم عامل نیست بلکه با توافقاتی که با آقای رضوانی مدیر تیم کردیم قرار شد که مطالبی به طور خلاصه و هدف دار به عنوان یک نیازسنجی در وبلاگ مطرح کنیم و از طریق آن بتوانیم برای طراحی بخش های مختلف برنامه ریزی و تصمیم گیری کنیم و اصلاً به این پست ها به عنوان مسئله آموزشی برای بازدیدکنندگان نیست.اما احتمالاً یک عده ای کمی از بازدیدکنندگان فکر می کنند که ما شاید داریم مبانی طراحی سیستم عامل را مطرح می کنیم در صورتی که سایت های بسیاری در اینترنت و کتاب های فراوانی است که این مسائل را در آن مطرح می کند. بنده به هیچ عنوان منکر این حقیقت نیستم که سایت های بسیار زیادی و تازه بهتر از مطالب ما و کامل تر در اینترنت است که مطالب آموزشی بهتری را ارائه می دهد. اتفاقاً پیشنهاد هم می کنم که می توانید با جستجو در اینترنت به منابع غنی تر و بهتری در مورد سیستم عامل و سایر مسائل مرتبط دست پیدا کنید.

ما در واقع در این وبلاگ یک جورایی تبادل اطلاعات بین اعضای تیم انجام می دهیم که بتوانیم برنامه ریزی درستی در مورد طراحی سیستم عامل داشته باشیم. که این باتوجه به آزاد بودن پروژه در نظر گرفته شده است.

********************************************

در ادامه مطالب تصمیم گرفتم که کمی خلاصه تر به موضوع مدیریت حافظه بپردازم ولی به احتمال بسیار زیادی در پست های آینده به طور جداگانه به معماری حافظه مجازی به طور تخصصی و تکنیکی خواهم پرداخت.

در بخش قبلی در مورد یکی از ساده ترین روش های ترجمه آدرس پرداختم. اما یک مشکل بزرگ هر جدول صفحه برای فرآیند بود که ممکن بود بسیار بزرگ شود و با توجه به محدودیت های حافظه این روش ذخیره سازی جدول صفحه منطقی نبود. خوب یک راه حل این است که جدول صفحه هم صفحه بندی شود به این ترتیب آن بخشی از جدول صفحه متشکل از شماره قاب های صفحات در حال اجرا فقط در حافظه اصلی قرار می گیرد.

راه حلی دیگر استفاده از روشی است که بضی از معماری های سیستم از آن استفاده می کنند آن هم روش دو سطحی است در این روش شما یک جدول راهنما دارید که شما را به جداول اصلی راهنمایی می کند.

Hash table ها به ما در زمینه های مختلف کمک بسیاری می کنند از این جهت می توانیم از آنها در طراحی جدول صفحه استفاده کنیم به این ترتیب که روشی تحت عنوان جدول صفحه معکوس پیشنهاد شد که در اغلب معماری های سیستم استفاده می شود در این روش شماره صفحه از قالب آدرس مجازی را باید یک جدول hash نگاشت شود ، که این کار توسط یک تابع hash انجام می شود بدین ترتیب شما باید یک اشاره گر به جدول صفحه معکوس داشته باشید که جدول صفحه معکوس متشکل از شماره صفحه ، اندیس فرآیند ، بیت های کنترل کننده ، اشاره گر زنجیره ای است. در این روش یک قسمت ثابت از حافظه اصلی به جداول ها اختصاص می یابد و اینکار مستقل از تعداد فرآیندها است.بدین ترتیب شما به صفحه با شماره قاب به جای شماره صفحه در حافظه مجازی ، مراجعه می کنید.

مسئله بعدی در رابطه با صفحه بندی با حافظه مجازی مراجعات به حافظه است که ممکن باعث کاهش کارایی و سربار زیاد شود. به این ترتیب که باید دو مراجعه به حافظه صورت گیرد یک مراجعه به جدول صفحه و یک مراجعه برای fetch کلمه از حافظه است.یکی از راهکارها استفاده از حافظه نهان است که به این روش TLB گفته می شود در TLB همان راهکار حافظه پنهان استفاده می شود به این صورت که شماره قاب صفحاتی که اخیراً مراجعه شده است در آن قرار داده می شود. در این طرح الگوریتمی شما با شماره صفحه به TLB مراجعه می کنید اگر صفحه مورد نظر (شماره قاب) در TLBبود که پروسه تبدیل آدرس انجام می شود در غیر اینصورت باید به جدول صفحه مراجعه کنید.این باعث ایجاد دو نرخ می شود نرخ اصابت و عدم اصابت. اما اگر صفحه در جدول صفحه بود TLB مانند حافظه نهان به روز می شود و این کار با تولید یک خطای صفحه انجام می شود.

تا اینجای کار من یکسری مطالب ابتدایی را به طور خلاصه در مورد روش های مدیریت حافظه با صفحه بندی گفتم. از این مرحله به بعد مطالب تحت یک مقاله و در مورد یک مسئله خاص خواهم گفت.

با تشکر

تیم سیستم عامل کوثر

  • مازیار نون

انتخاب روش های مدیریت حافظه - بخش پنجم

مازیار نون | پنجشنبه, ۱۲ تیر ۱۳۹۳، ۱۲:۱۸ ب.ظ

سلام

در مطالب در مورد مدیریت حافظه وارد بحث صفحه بندی با حافظه مجازی شدیم در ادامه مطالب وضعیت صفحه بندی با حافظه مجازی را بررسی می کنیم.

وضعیت صفحه بندی با حافظه مجازی متفاوت با صفحه بندی ساده است.در واقع حافظه مجازی برای صفحه بندی توصیف شد و به عنوان یک ابزار مهم و کاربردی در سطح مدیریت حافظه محسوب می شود.

ما در صفحه بندی ساده یک جدول صفحه داشتیم که برای دسترسی به قاب های حافظه که صفحات در آن قرار داشتند به آن مراجعه می کردیم  این جدول شامل آدرس قاب مورد نظر بود که با اندیس این جدول که نشان دهنده شماره صفحه بود ما به قاب مورد نظر دسترسی داشتیم.اما در صفحه بندی با حافظه مجازی ما بجای مفهوم آدرس منطقی با آدرس مجازی سروکار داریم چرا؟ چون که آدرس منطقی آدرسی از حافظه ثانویه نبود در حالیکه آدرس مجازی آدرسی از حافظه ثانویه است که شبیه آدرس واقعی (آدرس فیزیکی) حافظه اصلی است.آدرس مجازی زمانیکه فقط از صفحه بندی استفاده می شود مانند آدرس منطقی شامل انحراف و شماره صفحه است اما یک تفاوت وجود دارد آن هم در جدول صفحه است در جدول صفحه هر خانه جدول (سطر جدول) شامل 4 بخش مجزاست : شماره قاب ، بیت های کنترل کننده ، M  و P.

شماره قاب که مانند جدول صفحه در صفحه بندی ساده است.

بیت های کنترل کننده برای اشتراک گذاری صفحه ها بین فرآیندها ، ایمنی در برابر دخالت های فرآیندها و ... است.برای هرکدام از آنها شما باید یک بیت تخصیص دهید.

بیت P که نشان دهنده حضور صفحه مورد نظر در حافظه اصلی است.

بیت M که نشان دهنده تغییر یا عدم تغییر صفحه است.

در مورد بیت P به این صورت است که به جدول صفحه مراجعه می شود با بررسی این بیت حضور و عدم حضور صفحه در حافظه اصلی مشخص می شود.

در مورد بیت M هنگامیکه صفحه به داخل حافظه اصلی بارگذاری می شود احتمال دارد که تغییر کند با این بیت می توان بررسی کرد که اگر صفحه تغییر کرده است ، صفحه روی حافظه ثانویه بازنویسی شود یا خیر.

برای ترجمه آدرس شما نیاز به یک سخت افزار ترجمه دارید. در این سال ها تحقیقات بسیاری انجام شد که هرکدام رویکردهای مختلفی را برای ترجمه ارائه دادند.

در ترجمه آدرس شما باید آدرس مجازی را که تشکیل شده از انحراف و شماره صفحه را بخوانید و سپس آن را به یک آدرس واقعی (فیزیکی) که تشکیل شده از انحراف و شماره قاب تبدیل نمایید.

اما جدول صفحه خود در کجا نگه داری می شود؟ جدول صفحه را می توان در حافظه اصلی نگه داری کرد.

مراحل ترجمه آدرس به این صورت است که شما یک ثبات دارید که به ابتدای جدول صفحه (آفست جدول صفحه) اشاره می کند.این ثبات وقتیکه فرآیند در زمان اجرا (حالت اجرا) است آدرس ابتدای جدول صفحه را نگه داری می کند اما چرا؟ چون که جدول صفحه پویا است و در طرح حافظه مجازی گاهی کوچک و گاهی بزرگ می شود در این صورت اگر شما آدرس ابتدای جدول صفحه را نداشته باشید با مراجعه به جدول صفحه با شماره صفحه ، اندیس جدول جابجا شده (مثلاً جدول کوچک یا بزرگ شده است) و به طور کلی اندیس تغییر کرده است و شماره صفحه مورد نظر شما بدست نمی آید پس من باید آدرس ابتدای جدول صفحه را داشته باشم شماره صفحه را به آن بدهم سپس شماره صفحه با آدرس جمع شده و در نهایت میزان انحراف (فاصله از ابتدا تا اندیس مورد نظر) بدست می آید.بعد از آن شما باید بیت P را بررسی کرده اگر صفحه وجود دارد (در صورت نیاز سایر بیت ها نیز بررسی گردد) بعد از آن شما شماره قاب را می خوانید و با انحراف در آدرس مجازی ترکیب کرده و با شرط اینکه بخش شماره صفحه از بخش شماره قاب بزرگتر باشد یعنی n>m و در این صورت آدرس واقعی بدست می آید.

رویکردی که گفته شد یک مشکل داشت در بخش بعدی درباره روشی دیگر برای بدست آوردن آدرس واقعی (فیزیکی) خواهم گفت...

با تشکر

تیم سیستم عامل کوثر

  • مازیار نون

انتخاب روش های مدیریت حافظه - بخش چهارم

مازیار نون | چهارشنبه, ۱۱ تیر ۱۳۹۳، ۰۹:۱۱ ب.ظ

سلام

در بخش چهارم از انتخاب روش های مدیریت حافظه به صفحه بندی با حافظه مجازی خواهم پرداخت.

در بخش بندی که قبلاً گفته شد مانند صفحه بندی ساده بود ولی صفحه بندی بخش های را کوچک می کرد و از این جهت برنامه می توانست در بیش از یک بخش قرار گیرد و این مزیتی که داشت این بود که بخش ها نیازی نداشتند که به طور پیوسته باشند در حالیکه در بخش بندی ایستا ، بخش ها به طور پیوسته بودند.یعنی یک برنامه با قرار گیری در حافظه به صورت پیوسته بود.

صفحه بندی ساده یکی از مشکلات اساسی آن بارگذاری تمام برنامه به داخل حافظه بود حتی اگر قسمت هایی از برنامه احتمال دسترسی به آن در آینده کمتر بود.در این صورت اگر فرآیند دیگری به حافظه احتیاج داشت حافظه توسط یک برنامه اشغال شده بود.و یک مشکل دیگر صفحه بندی ساده این بود که در انتهای حافظه یک حفره بوجود می آمد که قابل استفاده نبود و این کمی برای صفحه بندی ساده تکه تکه شدن داخلی را به همراه داشت.


حافظه مجازی یک پنجره جدید را در دنیای مدیریت حافظه باز کرد. قبل از پرداختن به حافظه مجازی کمی در مورد مدل حالت فرآیند صحبت می کنم زیرا با موضوع ما مربوط می شود.

مدل حالت فرآیند چرخه حیات فرآیندها را به تصویر می کشد. این چرخه حیات از زمان بوجود آمدن فرآیند تا زمان پایان فرآیند را دنبال می کند این دنبال کردن به سیستم عامل به عنوان مدیر ، اجازه می دهد تا در مورد سیستم تصمیم گیری کند.این تصمیم گیری در تمام جنبه های سیستم از زمانبندی تا مدیریت سیستم فایل ضروری است.چرخه حیات فرآیند از یک سیستم عامل به سیستم عامل دیگری فرق می کند زیرا تا حدودی وابسته به مدل هسته است. به همین دلیل دنبال کردن رفتار فرآیند در سیستم می تواند به ما در تجزیه و تحلیل قسمت های مختلف سیستم عامل کمک کند.حالت فرآیند نشان دهنده رفتار فرآیند است و آن را مدل می کند این مدل تشکیل یک چرخه حیات را می دهد.در این مدل انواع حالت ها به عنوان رفتار فرآیند وجود دارد هر حالت ممکن است وظیفه فرآیند را در عملیاتی که در حال انجام آن است تغییر دهد به عنوان مثال در زمانیکه فرآیند نیازمند یک خروجی از فرآیند دیگری است لازم نیست فرآیند همچنان انحصاراً پردازنده را در اختیار بگیرد می توان با تعیین تدابیری این فرآیند را از پردازنده گرفت و با context swtich آن ، فرآیند را به صف مسدود مربوطه فرستاد.اما همچنان که فرآیند یا نخ در صف مسدود قرار دارند آنها در حافظه اصلی هستند و اگر فرآیندی بخواهد برای اعلام آمادگی برای اجرا وارد حافظه شود جا برای آن فرآیند نیست.به همین جهت رویکردی تحت عنوان جابجایی مطرح شد به طوریکه فرآیندهای مسدود (در حال انتظار) به دیسک منتقل شوند و حافظه بتواند پذیرای فرآیند جدید باشد.با انتقال فرآیند به دیسک ، به محض آنکه در حال نزدیک شدن به اجرای درخواست فرآیند مسدود شده هستیم فرآیند را می توان از دیسک به حافظه آورد (البته بستگی به مدل حالت فرآیند دارد و معمولاً در بسیاری از سیستم ها متفاوت است).


به این دلیل مدل حالت فرآیند را به طور خلاصه تشریح کردم که ما همین عملیات را با حافظه مجازی داریم.

حافظه مجازی روش ذخیره کردن است که حافظه ثانویه طوری آدرس دهی می شود که شبیه حافظه اصلی باشد.اندازه حافظه مجازی با حافظه ثانویه مشخص می شود و به حافظه اصلی مربوط نمی شود.در حافظه ثانویه آدرس ها ، آدرس مجازی نامیده می شوند و آدرسها به مانند حافظه اصلی است.هر فرآیند برای خود یک فضای آدرس مجازی دارد.آدرس مجازی طی یک پروسه ای باید به آدرس واقعی (آدرس فیزیکی) در حافظه اصلی ترجمه شود.

طرح حافظه مجازی اجازه می دهد که فرآیندهای بیشتری بتوانند وارد حافظه اصلی شوند در این صورت فرآیندهایی که به برخی از صفحات آنها مراجعه نمی شود می توانند بر روی دیسک قرار گیرند.از طرف دیگر محدودیت های اندازه حافظه اصلی از بین می رود و فرآیند می تواند بزرگتر از حافظه اصلی باشد در این صورت نیازی نیست تمام بخش های فرآیند بزرگتر از حافظه ، داخل حافظه باشد و فقط به آن صفحاتی که نیاز است می توان وارد حافظه کرد.حافظه مجازی تاثیر بسیار زیادی در چندبرنامه ای دارد.حافظه مجازی مسائل مانند تکه تکه شدن دخلی حافظه را از بین می برد و فرآیندها می توانند باهم به طور اشتراکی کار کنند.حفاظت در حافظه مجازی خیلی بهتر از روش های قبلی است.

شناخت رفتار صفحه بندی و حافظه مجازی می تواند در تجزیه و تحلیل مراجعات به حافظه به ما کمک کند به عنوان مثال اگر به صفحه ای مراجعه شود که در حافظه اصلی نیست آنگاه باید یک روش مبادله صفحه به داخل حافظه را بکار گرفت که این کار بر عهده پردازنده است اما آیا وقت پردازنده باید به این مسئله صرف شود؟ این مسئله مبادله می تواند منجر به کوبیدگی شود یعنی اینکه پردازنده به جای اجرای دستورالعمل ها مدام و مکرراً باید صفحاتی را از دیسک به حافظه اصلی و بلعکس منتقل کند.اما برای این مسئله چه باید کرد؟ طراحان سیستم عامل باید دقت داشته باشند که در اینجا مسائل احتمال و پیش بینی را باید برای طراحی در نظر بگیرند به این صورت که باید احتمال مراجعه نزدیک به صفحه مورد نظر را تخمین بزنند با این تخمین می توان به این موضوع رسید که این مبادلات را به حداکثر رساند.

خوشبختانه با حافظه مجازی می توانیم این مسائل را حل کنیم ولی دو موضوع را باید در نظر بگیریم: پشتیبانی سخت افزاری ، نیاز به نرم افزار برای مبادله صفحات.

در بخش بعدی به ادامه بحث صفحه بندی با حافظه مجازی خواهم پرداخت...

با تشکر

تیم سیستم عامل کوثر


  • مازیار نون

انتخاب روش های مدیریت حافظه - بخش سوم

مازیار نون | چهارشنبه, ۱۱ تیر ۱۳۹۳، ۰۵:۲۷ ق.ظ

سلام

در این بخش در مورد صفحه بندی بحث خواهم کرد که مهمترین رویکرد در مدیریت حافظه محسوب می شود ، زیرا سعی کرده مشکلات بخش بندی ایستا و پویا را نداشته باشد.اما برای افراد مبتدی لازم است دو اصطلاح را قبل از توضیح این روش ، تعریف کنم.

صفحه : یک بلاک حاوی داده که طول آن ثابت است و در دیسک سخت یا سایر حافظه های ثانویه مستقر است. با کپی از این صفحه  می توان آن را در ساختاری به نام قاب در حافظه اصلی قرار داد.

قاب : یک بلاک که طول آن ثابت است و در حافظه اصلی قرار داد.


در مورد صفحه بندی باید چند نیاز که مربوط به مدیریت حافظه است در نظر گرفته شود. این نیازها شامل ایمنی در برابر دخالت های ناخواسته فرآیندها در فضای همدیگر ، قابلیت جابجا کردن فرآیند به مکان دیگر حافظه بدون اینکه سیستم عامل وقت را صرف تغییر آدرسها کند ، فرآیندها بتوانند با هم به صورت اشتراکی همکاری کنند (استفاده از فضای مشترک).


صفحه بندی به دو صورت بیان شده است: صفحه بندی ساده ، صفحه بندی با حافظه مجازی

به طور کلی سیستم عامل های مدرن از صفحه بندی با حافظه مجازی استفاده می کنند زیرا امکانات حافظه مجازی امتیاز بزرگی برای برنامه ها محسوب می شود که بعداً خواهم گفت.

اما ممکن است این سوال پیش آید که چرا بخش بندی استفاده نشود؟ پاسخ آن ساده است زیرا با هر مکانیزمی که دو روش بخش بندی طراحی شد ، در نهایت حافظه را از کارایی انداخت.

رویکرد صفحه بندی تقسیم حافظه به قسمت هایی هم اندازه یا گاهی کوچک است.در این صورت فرآیند نیز برای تطبیق باید به قسمت هایی هم اندازه با قسمت های حافظه تقسیم شود.این قسمت های فرآیند صفحه هستند که در قسمت های حافظه که قاب هستند قرار می گیرند.پس شما نیاز به الگوریتمی دارید که فرآیند شما را به قسمت هایی هم اندازه قاب های حافظه تقسیم کند.

اما مراجعه به حافظه چگونه صورت می گیرد؟ مراجعه به حافظه از طریق جدولی صورت می گیرد که به آن جدول صفحه می گویند و جدول صفحه حاوی شماره قاب حافظه است که صفحه در آن قرار دارد.ضمن اینکه یک جدول دیگر نیز استفاده می شود که شماره قاب های آزاد در آن قرار دارد که مشترک تمام فرآیندها است.جدول صفحه شامل اندیس و محتوا است که اندیس شماره صفحه مورد نظر است و با دادن آن شماره صفحه می تواند شماره قاب را دریافت کرد.

در بخش بندی برای مراجعه به یک مکان حافظه که برنامه شما آنجا قرار دارد شما یک آدرس دارید که آدرس نسبی نامیده می شود با دادن آدرس نسبی می توان به محتوای کلمه حافظه دسترسی داشت.اما در صفحه بندی ساده شما با یک قالب جدید آدرس روبرو هستید که آدرس منطقی نامیده می شود این آدرس خود از دو بخش تشکیل شده است:

- انحراف : فاصله از ابتدای صفحه تا کلمه مورد نظر

- شماره صفحه : شماره صفحه فرآیند.

بسته به اندازه صفحه فرآیند این آدرس تعیین می شود به عنوان مثال برای صفحات 1024 بایتی ، 6 بیت از سمت چپ شمرده می شود و به عنوان شماره صفحه است و 10 بیت سمت راست به عنوان انحراف در نظر گرفته می شود.با دادن شماره صفحه به عنوان اندیس به جدول صفحه ، شماره قاب برگردانده می شود که با این انحراف و شماره قاب می توان آدرس فیزیکی تشکیل داد این آدرس فیزیکی آدرس کلمه مورد نظر در حافظه است.

در روش صفحه بندی ساده کل برنامه شما به داخل حافظه بار می شود یعنی کل صفحات فرآیند در حافظه قرار می گیرند حتی اگر استفاده نشوند.

حالا این سوال مطرح می شود که مشکل صفحه بندی ساده چه بود؟ یک مشکل تکه تکه شدن داخلی بود ولی این تکه تکه شدن در انتهای حافظه مشاهده می شد علت این بود که حافظه به قسمت های کوچک یا هم اندازه با فرآیند تقسیم می شد ولی احتمال اینکه آخرین صفحه کل قاب آخر را تماماً بگیرد کم بود.

در بخش بعد درباره صفحه بندی با حافظه مجازی صحبت می کنم....

با تشکر

تیم سیستم عامل کوثر

  • مازیار نون

انتخاب روش های مدیریت حافظه - بخش دوم

مازیار نون | سه شنبه, ۱۰ تیر ۱۳۹۳، ۰۹:۴۳ ب.ظ
سلام

در بخش اول به صورت فقط یک معرفی ابتدایی به مدیریت حافظه داشتم.در این بخش یک نگاه مختصری به رویکردهای مدیریت حافظه داشته باشیم زیرا هم امکان نوشتن کامل هر قسمت نیست هم اینکه تقریباً تمام افرادی که طراحی سیستم عامل را مطالعه کردند با آن آشنا هستند.

قبلاً هم گفتم که هر کدام از روش ها مزایا و معایبی دارد.اما روش های اولیه فقط در زمان خود مزایا محسوب می شدند اما در حال حاضر برای پیاده سازی اصلاً منطقی نیستند.
به عنوان یک مقایسه ، روش های اولیه مانند بخش بندی ایستا ، سیستم عامل را با توجه به مدل هسته کمتر مشغول بخش بندی می کردند از این جهت سربار کاهش پیدا می کرد اما مشکلاتی داشت آن هم این بود که با تکه تکه شدن داخلی همراه بود. تکه تکه شدن داخلی به این دلیل بود که حافظه با بخش هایی به اندازه مساوی تقسیم می شود (مثلاً توانی از 2) و اگر یک فرآیند با اندازه کمتر از یک بخش آنجا قرار می گرفت تکه ای از آن بخش غیرقابل استفاده بود و حتی در صورت وجود فرآیندی به اندازه آن تکه ، فرآیند قرار گرفته در آن بخش اجازه نمی داد که هیچ فرآیند دیگری آنجا قرار گیرد.این مسئله باعث کاهش چندبرنامگی می شد زیرا اگر فرآیند برای مدتی مسدود بود ، احتمال بیکار بودن پردازنده بیشتر می شد (در صورتی که سایر بخش ها هم فرآیند باشد و آن فرآیندها هم مسدود باشند).البته معایبی دیگر نیز بود.
روش بخش بندی ایستا کمی تغییر کرد اما در نهایت نتوانست پاسخگوی نیاز سیستم باشد.سیستم عاملی که از روش تغییر یافته بخش بندی ایستا استفاده کرد MFT برای کامپیوترهای اولیه IBM بود.

در مخالف روش بخش بندی ایستا روش بخش بندی پویا بود که توانست تکه تکه شدن داخلی را حل کند چون که حافظه را براساس اندازه فرآیند به آن تخصیص می داد. این کار باعث شد که کارایی حافظه کمی بهتر شود اما خود یک مشکل دیگر بوجود آورد آن هم تکه تکه شدن خارجی ، چرا که با تخصیص فرآیندها با اندازه آنها و در طی زمان یکسری حفره پدیدار می شدند که کارایی را تحت تاثیر قرار می داد.از این جهت احتمال تخصیص به فرآیندهای بزرگتر از حفره ها کم بود.روش هایی برای از بین بردن این مسئله پیشنهاد شد مانند فشرده سازی که فرایندها را به یک طرف حافظه می کشاند اما این باعث می شد که آدرس آفست هربار تغییر کند که خود منجر به تغییر آدرس فرآیند هر زمان می شد و این کارایی را کاهش می داد ضمن اینکه اجرای هربار برنامه فشرده سازی سربار زیادی برای سیستم عامل داشت.روش های دیگر نیز معرفی گردید مانند الگوریتم های جابجایی که هر الگوریتم بخش های حافظه را براساس یک تصمیم گیری خاصی انتخاب می کرد.
روش بخش بندی پویا توسط سیستم عامل MVT استفاده شد.

در بخش بعدی درباره صفحه بندی و قطعه بندی صحبت خواهم کرد...
با تشکر
تیم سیستم عامل کوثر
  • مازیار نون

انتخاب روش های مدیریت حافظه - بخش اول

مازیار نون | سه شنبه, ۱۰ تیر ۱۳۹۳، ۱۲:۲۷ ق.ظ

سلام

در این پست می خوام درباره روش های مدیریت حافظه به عنوان یکی از اولین نیازمندی های مدیریت در سطح حافظه صحبت کنم.

انتخاب روش مدیریت حافظه تاثیر مهمی بر سازمان سیستم عامل دارد.

 امکان دارد سوالی پیش آید که وظیفه مدیر حافظه چیست؟ وظیفه مدیر حافظه ، آوردن برنامه ها به حافظه است که پردازنده بتواند با خواندن کد برنامه و داده برنامه آن برنامه را اجرا نماید.

چیزی که وارد حافظه می شود یک برنامه passive است که بعد به عنوان یک برنامه active در می آید که به آن فرآیند می گویند.

پس ابتدا باید ساختمان داده فرآیند که در چند پست قبلی به آن پرداختم طراحی شود. سپس با ساخت یک ماژول مدیر حافظه ، برنامه passive (روی دیسک سخت) را خواند و برای آن یک فرآیند تشکیل داد و  آن را به حافظه آورد.

اما این روش یکباره آوردن برنامه به حافظه ، منطقی نیست ، زیرا نیازمند مشخص کردن مکانیزم هایی است.این مکانیزم ها راهکاری برای درست جا دادن و بهینه جا دادن برنامه ها به داخل حافظه هستند چرا؟ چون که حافظه محدود است و باید به دقت انجام شود.

خوشبختانه ، پس از تحقیقاتی که انجام شد این مکانیزم ها دسته بندی شدند تا بتوانند پاسخگوی چندبرنامه ای و محدودیت های حافظه باشند این راهکارها عبارتند از:

  • بخش بندی static

  • بخش بندی dynamic

  • صفحه بندی ساده

  • صفحه بندی با حافظه مجازی

  • قطعه بندی با حافظه مجازی

هر کدام از این راهکارها نسبت به یکدیگر مزایا و معایبی دارند.
سه مسئله مهم باید در انتخاب این راهکارها در نظر گرفت:
1 - کمبود حافظه
2 - بهینه سازی
3 - مراجعات به حافظه

مسئله کمبود حافظه ، به این دلیل مهم است که همه ما می دانیم که حافظه پویا نیست یعنی یک حافظه ثابت داریم و هزاران برنامه که باید اجرا شوند از آنجا که هر چه به سمت پایین هسته سیستم عامل حرکت کنیم زمان حتی به میلیاردم ثانیه نزدیک می شود پس زمان در پایین ترین سطح کم و الگوریتم ما باید حداکثز اجرا ، بهینگی بالا ، پیچیدگی کم داشته باشد.
مسئله بهینه سازی نیز ، رابطه مهمی با عدالت دارد ، ما باید بتوانیم در سطح حافظه چه در زمانبندی ، همگام سازی ، و ... عدالت را برقرار کنیم تا تمام فرآیندها بتوانند از منابع حداکثر استفاده را ببرند.
مسئله مراجعات به حافظه ، کم کردن سربار سیستم عامل برای جایگزینی است ، که خود موضوعی جداست.اما مسئله مراجعات به اصل محلی بودن باید پایدار باشد.این مسئله زمانی می تواند حائز اهمیت باشد که ما از حافظه مجازی استفاده کنیم.و در آنجا می تواند معنای منطقی پیدا کند.به عنوان مثال در سیستم عامل MS DOS به دلیل تک برنامه ای بودن اصلاً جایی برای این منطق نگذاشته که بتوانیم مراجعات را تحلیل کنیم.

ادامه مطالب در بخش بعد...
با تشکر
تیم سیستم عامل کوثر
  • مازیار نون

دقت در انتخاب مدل های صف برای سیستم عامل

مازیار نون | دوشنبه, ۹ تیر ۱۳۹۳، ۰۸:۳۴ ب.ظ

با سلام

امروز می خوام در مورد مسائل مربوط به صف صحبت کنم.مسئله صف یکی از مهم ترین مسائل برای محاسبات در داخل هسته و خارج هسته سیستم عامل محسوب می شود.به همین دلیل باید به طور کامل قبل از استفاده آن آنالیر گردد.

اما چرا آنالیز؟

کارایی و سربار دو موضوع مهم در طراحی محسوب می شوند ، به همین دلیل آنالیز صف های استفاده شده در هر بخش از سیستم عامل ، می تواند بر کارایی و کاهش سربار اثر مطلوبی داشته باشد.

انتظار کارایی وقتی برآورده می شود که برای آنالیز صف بتوان مدل ساخت.یعنی بتوان براساس نوع صفی که استفاده می شود ، آنالیز را انجام داد.

اما آنالیز ، به معنای بررسی وضعیت صف در رفتار با سیستم است. ما در واقع در پروژه می خواهیم شبیه سازی کنیم که صف در رفتار با سیستم چگونه واکنشی دارد ، آیا نیازمندی های کارایی را برآورده می کند؟ بار کاری در هنگام تعامل در محاسبات چگونه است؟

تقریباً تمام سیستم عامل های موفق در دنیا ، آنالیز صف را انجام دادند و به نتایج آن دست یافتند.از این جهت با این نتایج تصمیم گیری هایی برای بالابردن کارایی در سیستم و کاهش سربار گرفته شد.و این یکی از رمزهای موفقعیت سیستم عامل ها محسوب شد.

برای پاسخگویی به سوالات بالا ، نیازمند استفاده از ابزارهای اندازه گیری دقیقی هستیم که بتوان به پاسخ هایی با دقت بالا رسید.

اما کارایی و سربار می تواند در چه تصمیم گیری هایی استفاده شود؟

کارایی در تصمیم گیری های زمانبندی می تواند برای محاسبه زمان پاسخ و توان عملیاتی پردازنده استفاده شود.این تصمیم گیری ها براین اساس هستند که اگر ما از زمانبند RR به عنوان مثال استفاده می کنیم این زمانبند چه رفتارهایی در زمان پروسه زمانبندی دارد.آیا این رفتار باعث کاهش سربار سیستم می شود یا باعث افزایش زمان پاسخ؟.

شناخت رفتارهای زمانبندی به پارامترهایی مانند صف و ... مربوط می شود زیرا ، در بسیاری از سیستم عامل های غیر رسمی دیده شده است که طراح یا طراحان فقط زمانبندی را یک الگوریتم ثابت می دانند و اعتقاد دارند که این الگوریتم ها مسائل ثابتی در دنیای محاسبات هستند.در حالیکه اینطور نیست ، شناخت دقیق پارامترهایی مانند صف ، پیچیدگی الگوریتم و ... می تواند به طراح کمک کند که الگوریتم های زمانبندی را بهتر ترکیب و بهتر طراحی کند.

در مسائل صف ، نرخ های زیادی برای اندازه گیری مطرح شده است مانند نرخ های ورودی ، متوسط ها و غیره...

هر کدام از نرخ های ورودی به ورود داده ربط دارند و آنها را در متغیری جداگانه قرار می دهند.

هر متوسط مربوط به محاسبه زمان انفجار و تعداد داده ، زمان انتظار ، و ... است.

بعد از دریافت این داده ها و با جایگذاری شما باید به محاسبات با معادلاتی مانند پذیرش سیستم در بالاترین نرخ ورود داده ها بپردازید.


نتیجه گیری: شناخت رفتار عناصر سیستم (مانند فرآیندها ، صفحه ها ، قطعه ها و...) در زمان بکارگیری آنها در صف می باشد و تصمیم گیری برای کاهش سربار سیستم و بالابردن کارایی است که در نهایت منجر به بالارفتن نرخ چندبرنامگی و توان عملیاتی سیستم می شود که این نیز می تواند به کاهش زمان پاسخ کمک کند.

با تشکر

تیم سیستم عامل کوثر

  • مازیار نون