تارا فایل

پاورپوینت اصول کلی ونحوه ایجاد یک سیستم عامل



اصول کلی ونحوه ایجاد یک سیستم عامل

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

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

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

سیستم عامل یک نرم افزار نیست ، در واقع مجموعه ای از نرم افزارهاست در کنار هم. زبانهای رایج برای توسعه سیستم عامل هم معمولا++C و اسمبلی هستند.
زبان اسمبلی مناسب ترین زبان است که می تواند با سخت افزار در پائین ترین سطح ارتباط برقرار کند.
سیستم های نرم افزاری از چند حلقه تشکیل شده اند. Ring0 که پائین ترین سطح را دارد ( سیستم عامل در این سطح قرار دارد) و حلقه 2 و 3 که حلقه 3یاring 3 سطحی است که کاربر در آن قرار دارد.
حلقه صفر بیشترین دسترسی به سیستم را دارد وبه همین ترتیب دسترسی کم می شود تا به سطح کاربربرسد.
سیستم عامل قاعدتا باید بیشترین سطح دسترسی به سیستم را داشته باشد، پس باید در حلقه صفرباشد.

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

از نظر معماری، کامپیوترهایی که از چندپردازنده متصل به هم تشکیل شده اند اساساً بر دو دسته تقسیم می شوند:

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

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

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

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

زبانهایی که برای نوشتن یک سیستم عامل نیازند اسمبلی وC هستند. اسمبلی پایه ترین زبان است و برای شروع کار حتما به آن نیازداریم. سیستم عامل برای لود شدن نیاز به یک Boot Loader دارد. Boot load کدیست که در محلی از هارد دیسک قرار دارد که در اولین سکتور این دیوایس نوشته می شود وحداکثر حجمی که قابل برنامه نویسی هست فقط 512 بایت است.

اشاره
هر Track معمولا به 512 قسمت تقسیم شده است. نکته : یک فلاپی دیسکت دارای 2 هد بیشتر نیست. اگر مقادیر بیش از حد به آن بدهیم ، سیستم دچار مشکل می شود.

پس نیاز داریم که با کامپایلری کار کنیم که اولا 16 بیتی را suport کند،دوما مینیمم حجم را اشغال کند، پس از C نمیتوانیم استفاده کنیم چون حداقل فایلی که تحویل می دهد حجمش بیشتراست. و دیگراینکه فایلهای خروجیC به علت ساختاری که دارند (PE) از همان بایت اول اجرائی نیستند ، ودربوت سکتور از همان بایت اول چیزی برای شناختن فرمت فایلها اصلا وجود ندارد.

C یک زبان سطح بالاست و برنامه نویسی با آن راحت تراست و به علاوه بسیاری از دستورات را به صورت کتابخانه های آماده در اختیارمان قرار می دهد، پس نباید با نوشتن کدهای اسمبلی وقتمان را هدر بدهیم ( البته در نهایت برای طراحیbase یک سیستم عامل نیاز فراوانی به اسمبلی داریم ) در ابتدا یک برنامه اسمبلی می نویسم که سیستم اصطلاحا بوت شود و بعد درونش یک JUMP می کنیم به محلی که Kernel اصلی سیستم عامل برای اجرا قرار داردpoint entry) ) ، از اینجا به بعد دیگر محدودیتی به نام 512 بایت نداریم.

Pointer : یا اشاره گرها،قسمتی از حافظه را به شما معرفی می کنند و در اختیار شما می گذارند ، چون در حالت معمولی مشخص نیست که اطلاعات کجای حافظه سخت افزار PAS قراراست ریخته شود! اگر آدرس دهی ها درست تعریف نشوند،اشاره گرها ممکن است اطلاعات نادرستی بدهند. PAS : Physical Address Space فضای آدرس سخت افزاری،در ramکامپیوترقرار دارد( البته حافظه سخت افزاری حتی می تواند روی کارت گرافیک یا هر دیوایس دیگرهم عنوان شود)

IVT : Interrupt Vector Table یا جدول بردار وقفه ، هر زمان که وقفه ای رخ بدهد سیستم از این جدول مکانی،آدرس اجرای پروسه مربوط به آن وقفه را پیدا می کند و برای ادامه به آن جا منتقل می شود ( معمولا قبل از آن از رجیسترهای حافظه یک کپی در پشته میگیرد(push کردن) (نکته: یک جدول بردار وقفه سخت افزاری داریم ، و یک جدول وقفه نرم افزاری DOS که مربوط به سیستم عامل Dos است ویک سیستم عامل جداست)

Dynamic Memory Allocation : تخصیص حافظه پویا که قبلا توابع مربوطه را دیدید مانند: malloc() – free() – new – delete کارشان این است که بلوکی از حافظه را برای شما نگه میدارند در سیستم هایی که از پایه نوشته می شوند ( سیستم عامل ) با استفاده بهینه از حافظه ، تخصیص حافظه ، آزاد کردن حافظه بلا استفاده خیلی سر وکار داریم.

Inline assembly: استفاده از دستورات اسمبلی در دیگرزبان هایی که قراراست برای توسعه استفاده کنید. مثلا در زبان C وقتی می خواهیم اسمبلی بنویسیم به این صورت شروع می کنیم: مثال کد: _asm cli ; disable interrupts یا اگر بیشتر از یک دستور داشته باشیم از بلوک ها استفاده می کنیم کد: _asm { cli hlt }

: rtl
Standard Library and the Run Time Library استفاده از کتابخانه های برنامه نویسی از قبل آماده شده ، مثلا دیگر نیاز نیست دستور()printf را با اسمبلی بازنویسی کنیم ،فقط کافی است اسم تابع رابنویسیم. در این صورت می توان گفت حدود 90% از سیستم عامل را که قراراست نوشته شود از توابع آماده موجود از قبل استفاده می کنیم.

Debug و خطایابی : اگر قرار باشد هربار که کدی برای سیستم عامل می نویسیم ، یکبار سیستم را ریست کنیم کلی از وقتمان را هدرداده ایم. می توانیم برای تستها ازابزاری به نام Bochs استفاده کنیم ،چیزی شبیه به VMWare است ولی راحت تر و سریعتر( از هر نرم افزار دیگری هم می توانید استفاده کنید مثلا vpc میکروسافت) لینک دانلود Bochs : http://Www.ALT.ir/os/Bochs-

1- از ابزارهایی که لازم داریم مهمترین آن ها NASM است، nasmیک کامپایلر اسمبلی است. http://www.nasm.us

2-ابزار بعدی که نیاز داریم Microsoft Visual C++ 2005 or 2008 کد نویسی درمحیط ویژوال،البته محدود به اینها نیستید وازکامپایلرهایGCC یا DjGPP هم می توانید استفاده کنید.

3- ابزار بعدی part copy است.پارت کپی فایلboot loader را در اولین سکتور هارد کپی می کند. http://www.ALT.ir/os/pcopy از Debug خود ویندوز هم می شود برای کپی کردن اطلاعات روی بوت سکتور استفاده کرد. کد: C:>debug boot_loader.bin -w 100 0 0 1 -q 4-ابزار بعدی که برای راحتی کاربه آن نیاز داریم: VFD – Virtual Floppy Drive http://www.ALT.ir/os/VFD.zip برنامه ای است برای ساخت یک فلاپی دیسک مجازی کهboot loader را که بعدا می نویسیم بتوانیم روی آن رایت کنیم و تستهایمان را خیلی سریع بگیریم.

به طور خلاصه مراحل استفاده از ابزارهای معرفی شده : 1- تنظیمات اولیه لازم برای شروع کار(شامل ساخت فلاپی مجازیVFD و داشتن یک ماشین مجازی Bochs) 2- boot loader (شامل برنامه نویسی به زبان اسمبلی و کامپایل آن با NASM و کپی کردن برنامه کامپایل شده روی بوت سکتور مثلا با PartCopy یا Debug) 3-نوشتن کرنل (با استفاده از زبانهای سطح بالا مثلا++Cو کپی فایل نهائی روی فلاپی دیسکت) 4- تست کارکرد

برای داشتن یک سیستم عامل در حد قابل قبول نیاز داریم به:
Memory Management
Program Management
Multitasking
Memory Protection
Multiuser
Kernel
File System
Command Shell
Graphical User Interface
Bootloader

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

با سپاس از توجه شما


تعداد صفحات : 29 | فرمت فایل : .pptx

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