320 likes | 623 Views
اصول کلی ونحوه ایجاد یک سیستم عامل. استاد راهنما :جناب آقای صباغ گل ارائه دهنده :سعیده خسروی بیجار مهندسی فناوری اطلاعات پاییز 91. مقدمه تاریخچه سیستم عامل تعریف سیستم عامل اصول سیستم های عامل توزیع شده مقایسه سیستم های جفت شده قوی وضعیف سیر تکامل سیستم های عامل توزیع شده
E N D
اصول کلی ونحوه ایجاد یک سیستم عامل استاد راهنما :جناب آقای صباغ گل ارائه دهنده :سعیده خسروی بیجار مهندسی فناوری اطلاعات پاییز 91
مقدمه • تاریخچه سیستم عامل • تعریف سیستم عامل • اصول سیستم های عامل توزیع شده • مقایسه سیستم های جفت شده قوی وضعیف • سیر تکامل سیستم های عامل توزیع شده • نحوه ایجاد یک سیستم عامل • ابزارهای مورد نیاز
مقدمه: سیستم عامل یکی ازجنبه های محوری در علوم ومهندسی کامپیوتر است که به شدت در شکل گیری درک فرد از عملکرد داخلی کامپیوتر وهمکاری متقابل سخت افزار ونرم افزار تاثیر دارد.تاثیری که می تواند در طراحی وساخت سیستم های کامپیوتری نقش محوری ایفا کند.
تاریخچه سیستم عامل: سیستم عامل ها در ابتدا فقط تک وظیفه ای وخط فرمانی بودند. بعد به صورت 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 وقتی می خواهیم اسمبلی بنویسیم به این صورت شروع می کنیم:مثال کد:_asmcli ; disable interruptsیا اگر بیشتر از یک دستور داشته باشیم از بلوک ها استفاده می کنیم کد:_asm {clihlt}
: 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-q4-ابزار بعدی که برای راحتی کاربه آن نیاز داریم:VFD - Virtual Floppy Drivehttp://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
کتاب کرنل بی درنگ نوشته جین لبروس ( ترجمه فرزاد شکاری زاده ، انتشارات نصر) مبحث راه اندازی یک سیستم عامل بر روی میکروکنترلرها. • کتاب اصول میکروکامپیوترها نوشته علیرضا رضائی (انتشارات آیلار) • کتاب مرجع کامل الکترونیک