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

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

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

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

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

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

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

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 از یک نوع داده مناسب دیگر استفاده کرد.
با تشکر
تیم سیستم عامل کوثر

  • مازیار نون

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

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

با سلام.

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

تصاویر زیر گویای همه چیز هست. من فایل هارد سیستم عامل رو برای WMVare و دیگر مجازی ساز های برای دانلود گذاشتم.

دانلود دیسک مربوط به بخش Dialog

آموزش نصب و راه اندازی


>

  • عماد رضوانی

رفتار فرآیند و نخ (چرخه زندگی) - بخش دوم

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

سلام

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

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

حتی وقفه هایی مانند Interrupt(timeout) هم باعث مسدود شدن نخ نمی شود بلکه مسدود شدن نخ دارای شرایط خاصی است.

نکته: این روشی که من در بالا گفتم ، فقط برای مدل نخ های چند به یک است.

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

مدل ابتدایی برای حالت فرآیندها و نخ ها تنها شامل دو حالت بود:

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

رفتار فرآیند و نخ (چرخه زندگی) - بخش اول

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

سلام

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

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

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

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

رفتار فرآیند با دنبال کردن دستوراتی که فرآیند اجرا می کند مشخص می شود . این رفتار یک لیست است که Trace (لیست ردیابی) نامیده می شود این لیست شامل دستوراتی است که فرآیند یا نخ اجرا می کند. به عنوان مثال اگر در لیست ردیابی یک نخ یا فرآیند دستور فراخوانی یک دستگاه I/O بود ، در این صورت آن فرآیند یا نخ باید برای دسترسی به دستگاه مربوطه منتظر بماند این انتظار به معنای مسدود شدن موقتی فرآیند است (البته برای نخ ها یک استثناء است که در مقالات آینده خواهم گفت) ، پس فرآیند عملاً کاری ندارد و منتظر است ، پس سیستم عامل این دستور را تفسیر کرده و رفتار فرآیند یعنی انتظار و مسدود را برای آن مشخص می کند.

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

این فرآیند نیز یک حالت دارد و قبل از تحویل به CPU حالت آماده و بعد از تحویل حالت اجرا دارد.

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

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

ادامه مطالب در بخش بعد...

با تشکر

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


  • مازیار نون

هسته (بخش اول)

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

سلام

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

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

اولین سوال هایی که هنگام مواجه با کلمه ی «کرنل» توی ذهن ما شکل میگیره، این هست که میخوایم بدونیم که کرنل چی هست؟ برای چی کاربرد داره
، چه لزومی به وجودش هست و ... این ها سوال های اساسی هستند که دونستن جواب اونها خالی از لطف نیست.

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

kernel(1)

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

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

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

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

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

هر کرنلی باید لیستی از وسائلی رو که در دسترسش هست رو در اختیار داشته باشه تا در صورت لزوم و درخواست نرم افزاری بتونه به سرعت به اون درخواست رسیدگی کنه و واکنش لازم رو انجام بده، برای به وجود آوردن این لیست روش های مختلفی وجود داره اما روشی که بیشترین استفاده رو در کرنل های موجود داشته روشplug and play هست. توی این روش کرنل یک جست و جویی رو روی بخش های مختلف سیستم مثل PCI  و USB
برای پیدا کردن دستگاه های متصل به سیستم انجام میده که حاصل اون لیستی هست که نمایانگر سخت افزار ها و دستگاه های جانبی ذر دسترس هست.


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

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

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

~^~^~^~^~^~^~^~^~

با آرزوی موفقیت روز افزون.

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

  • سید امیر محمد حسن لی