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

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

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

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

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

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

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

۵ مطلب با موضوع «بخش تخصصی هسته» ثبت شده است

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

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

سلام

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

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

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


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

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

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

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

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

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


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

با تشکر

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

  • مازیار نون

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

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

سلام

در ادامه مباحث مربوط به معماری سیستم عامل ها امروز به بحث هسته ها از دید دیگری نگاه می کنیم.

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

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

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

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

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


  • مازیار نون

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

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

سلام

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

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

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

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

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

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

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

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

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

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

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

  • مازیار نون

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

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

سلام

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

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

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

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

مفهوم وقفه ها چهارمین مفهوم برنامه نویسی است که در سومین نسل کامپیوترها مطرح شد.وقفه در واقع یک سیگنال است که ممکن است از داخل یا خارج تولید شود.در هر دو حالت یک بیت وجود دارد به نام بیت 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 یک درخواست می دهد یک وقفه رخ داده که به آن وقفه درخواست می گویند و غیره...
  • وقفه های نرم افزاری: سیگنال هایی هستند که از داخل می آیند. این وقفه ها همگام هستند. به عنوان مثال اجرای دستورالعمل خاص ، ارسال سیگنال از یک برنامه به برنامه دیگر ، فراخوان های سیستمی ، وقفه های شرطی و ...
این مطلب ادامه دارد...


  • مازیار نون

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

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

سلام

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

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

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

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

kernel(1)

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

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

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

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

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

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


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

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

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

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

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

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

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