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

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

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

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

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

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

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

هسته - اداره وظایف (ایجاد و همزمانی)

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

سلام

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

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

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


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

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

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

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

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

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


نکته: کلمات وظایف ، فرآیندها در اینجا یک معنی دارند.

با تشکر

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

  • مازیار نون

نظرات  (۱)

به نام خدا و سلام.
امیدوارم در کارتون موفق باشید ولی پیش از هر چیز، این سؤال ذهنم رو درگیر کرده که: خوب فایده‌ی درست کردن یک سیستم عامل جدید چیه؟
ممکنه این کار فی نفسه خیلی خوب و ارزشمند باشه ولی اگر ثمره‌ی عملی و کاربردی نداشته باشه، هدر دادن نیرو و اسرافه.

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی