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

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

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

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

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

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

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

۳۵ مطلب در تیر ۱۳۹۳ ثبت شده است

پیشرفت در MultiTasking

عماد رضوانی | سه شنبه, ۲۴ تیر ۱۳۹۳، ۰۲:۵۰ ب.ظ

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


  • عماد رضوانی

هسته جدید و پیشرفت در Multitasking

عماد رضوانی | شنبه, ۲۱ تیر ۱۳۹۳، ۱۰:۳۹ ب.ظ

سلام. بلاخره شروع به نوشتن هسته جدید کردیم. تصویر اول نمایانگر بازنویسی هسته جدید با نسخه 2.0.0(به دلیل اینکه نسخه ۱ ادامه نسخه قبل خواهد بود-نسخه قبل عملکرد یکپارچه داشت-اگر چه این نسخه مقدار کمی تفاوت دارد)  هست. تصویر دوم نمایانگر Multitasking هست. حتما به مقادیر EIP دقت کنید(ویرایش: مقادیر EIP نباید بصورت منفی باشد - مشکل در قسمت نمایش مقدار در تابع itoa بود که حل شده):


  • عماد رضوانی

معماری سیستم عامل - مدل ها و هسته ها - بخش دوم

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

سلام

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

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

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

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

این مطلب ادامه دارد...


  • مازیار نون

معماری سیستم عامل - مدل ها و هسته ها - بخش اول

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

سلام

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

اولین گام در طراحی سیستم عامل انتخاب هسته است همانطور که بالا ذکر شد. اما این انتخاب باید چگونه انجام شود؟

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

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

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

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

با بوجود آمدن تکنولوژی های متعددی در برنامه نویسی و ساختار دهی سیستم مانند شی گرائی و ماژولار ، باعث شد که تاثیر مهمی بر طراحی سیستم عامل بگذارد از این جهت سیستم عامل ها به صورت لایه ای ساخته شدند و در آن مولفه هایی قرار دارد که هریک فعالیت و عملکرد خاصی را برای سیستم عامل فراهم می کند که این باعث انتزاع بیشتری در سیستم می شود. به این ترتیب مولفه ها می توانند با یکدیگر محاوره داشته باشند به عنوان مثال ، مولفه memory manager با مولفه file manager. این محاوره به نوعی مانند ارتباط اشیاء در جهان واقعی و در مفهوم شی گرایی است. به این صورت که درخواست ها از طریق پیام هایی به یکدیگر فرستاده می شوند.و در نتیجه باعث تجرید مولفه های از یکدیگر می شود.

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

پس این سوال ممکن است مطرح شود که آیا لازم است که بین مولفه های سطح کاربر و سطح هسته تفاوت قائل شد؟ و این ارتباطات چه تاثیری می تواند داشته باشد؟

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

این مطلب ادامه دارد...

  • مازیار نون

Multitasking و شروع دوباره

عماد رضوانی | جمعه, ۲۰ تیر ۱۳۹۳، ۰۲:۵۰ ب.ظ

سلام. شروع به نوشتن Multitasking کردیم و متوجه شدیم که باید مقداری از کدهای زیرساختی پروژه تغییر کنه. و این بهونه ای شد که یه بازنگری در مورد طراحی هسته انجام بدیم. مسلما روزی که شروع به توسعه این سیستم عامل کردیم دانش فعلی رو نداشتیم و مسلما چند ماه آینده هم دانش فعلی رو نداریم! پس احتمالا مدل جدید هم آزمایشی/آموزشی هست.

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



بزودی شروع به توسعه هسته جدید میکنیم. تا اون موقع در حال بررسی معماری های هسته و انتخاب یک مدل برای توسعه هستیم. برای انتخاب یک مدل باید موارد زیادی رو مد نظر قرار داد. در انتشار جدید حتما خبرهای خوبی از SDK خواهید شنید.

التماس دعا.


  • عماد رضوانی

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

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

سلام

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

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

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

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

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

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

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

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


  • مازیار نون

آخرین تغییرات Dialog , مدیر حافظه

عماد رضوانی | پنجشنبه, ۱۹ تیر ۱۳۹۳، ۱۱:۱۷ ق.ظ

با سلام. مدیر حافظه تا حدودی آماده کار هست. البته الگوریتم های مدیر حافظه بصورت پایه نوشته شده است و باید به مرور زمان بازنویسی شود. در حال حاضر تابع malloc پیاده سازی شده است که البته پیش نیاز اون paging و VirtualMemory بوده که نوشتیم.

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



  • عماد رضوانی

وقفه - مفاهیم و تکنیک ها - بخش اول

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

سلام

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

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

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

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

مفهوم وقفه ها چهارمین مفهوم برنامه نویسی است که در سومین نسل کامپیوترها مطرح شد.وقفه در واقع یک سیگنال است که ممکن است از داخل یا خارج تولید شود.در هر دو حالت یک بیت وجود دارد به نام بیت IF (پرچم فعال سازی وقفه) در ثبات F که باید قبل از آنکه CPU درخواست وقفه را بپذیرد تنظیم شود.هنگامیکه چنین اتفاقی می افتد ، یک مکانیزم سخت افزاری برای وادار کردن برنامه جاری (فرآیندی که هم اکنون توسط CPU در حال اجرا است) به رهاکردن CPU فعال می شود. اگر بیت IF صفر باشد ، CPU این سیگنال وقفه را در این لحظه نادیده می گیرد.توجه کنید که سیگنال وقفه تا زمانیکه CPU اقدام بعدی را انجام نداده است از بین نمی رود. اگر بیت IF صفر نباشد ، CPU عملیاتی به نام تعویض متن (Context Switching) را انجام می دهد. با این عملیات از PCB (بلاک کنترل فرآیند) فرآیند جاری ، اطلاعات وضعیت CPU به روز می شود. به این صورت که محتوای ثبات های PC ، SR و غیره... از CPU به داخل اطلاعات وضعیت CPU در بلاک کنترل فرآیند جاری انتقال می یابد. با این عمل بعد از وقفه اگر این فرآیند مجدداً به CPU برای اجرا داده شود ، CPU اطلاعات وضعیت CPU را از بلاک کنترل فرآیند برداشته و در ثبات های خود قرار می دهد با این عمل مثلاً CPU با خواندن ثبات PC متوجه می شود که کدام دستورالعمل را باید پردازش و اجرا کند (آدرس به سیستم عامل داده می شود). به هر حال بعد از تعویض متن فرآیند جاری به انتهای صف کوتاه مدت (صف زمانبند) در حافظه اصلی منتقل می شود.شماره وقفه بعد از ارسال سیگنال وقفه باید توسط PIC (کنترل گر برنامه پذیر وقفه) روی گذرگاه داده ها به CPU تحویل داده شود. این کار بعد از به روز رسانی اطلاعات وضعیت CPU انجام می شود. بعد از آن CPU به بردار وقفه مراجعه می کند ، بردار وقفه شامل آدرس های روال های وقفه است که CPU به آن مراجعه کرده و آدرس روال وقفه را بدست آورده و در ثبات PC خود قرار می دهد. حالا نوبت سیستم عامل است که وارد میدان شود.فرآیند جاری که از CPU تحویل گرفته می شود به حالت آماده می رود.سپس سیستم عامل ثبات PC پردازنده را خواند که حاوی آدرس روال اداره کننده وقفه است و روال را برای اجرا به CPU تحویل می دهد.

نکته: CPU به PIC یک ACK ارسال می کند تا PIC را آگاه کند که داده ها را از گذرگاه داده برداشته است.

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

وقفه ها دو دسته هستند:

  • وقفه های سخت افزاری: سیگنال هایی هستند که از خارج می آیند.این وقفه ها ناهمگام هستند.به عنوان مثال ریست کردن کامپیوتر ، وقفه پایان برهه زمانی (در زمانبند) ، وقفه خطا یا نقض سخت افزاری ، وقتی که یک دستگاه I/O یک درخواست می دهد یک وقفه رخ داده که به آن وقفه درخواست می گویند و غیره...
  • وقفه های نرم افزاری: سیگنال هایی هستند که از داخل می آیند. این وقفه ها همگام هستند. به عنوان مثال اجرای دستورالعمل خاص ، ارسال سیگنال از یک برنامه به برنامه دیگر ، فراخوان های سیستمی ، وقفه های شرطی و ...
این مطلب ادامه دارد...


  • مازیار نون

طراحی ساختار داده دیسک

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

سلام

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

نکته: این پست فقط به تعریف یک ساختار داده ساده برای دیسک می پردازد.

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

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

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

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

ثابت ها:

  • تعریف تعداد بایت ها به ازای هر قطاع
  • تعریف تعداد قطاع ها در هر شیار
  • تعریف تعداد شیارها در هر دیسک

  • تعریف شماره قطاع: براساس فرمول (تعداد قطاع در هر شیار * تعداد شیارها در هر دیسک)
متدها:

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

  • مازیار نون

سلام

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

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


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

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

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

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

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

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

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

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

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

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

  • مازیار نون