تاریخچه سیستم عامل

Report
‫اصول کلی ونحوه ایجاد یک سیستم عامل‬
‫استاد راهنما ‪:‬جناب آقای صباغ گل‬
‫ارائه دهنده ‪:‬سعیده خسروی بیجار‬
‫مهندسی فناوری اطالعات‬
‫پاییز ‪91‬‬
‫• فهرست‪:‬‬
‫‪‬‬
‫مقدمه‬
‫‪‬‬
‫تاریخچه سیستم عامل‬
‫‪‬‬
‫تعریف سیستم عامل‬
‫‪‬‬
‫اصول سیستم های عامل توزیع شده‬
‫‪‬‬
‫مقایسه سیستم های جفت شده قوی وضعیف‬
‫‪‬‬
‫سیر تکامل سیستم های عامل توزیع شده‬
‫‪‬‬
‫نحوه ایجاد یک سیستم عامل‬
‫‪‬‬
‫ابزارهای مورد نیاز‬
‫مقدمه‪:‬‬
‫سیستم عامل یکی ازجنبه های محوری در علوم‬
‫ومهندسی کامپیوتر است که به شدت در شکل گیری‬
‫درک فرد از عملکرد داخلی کامپیوتر وهمکاری متقابل‬
‫سخت افزار ونرم افزار تاثیر دارد‪.‬تاثیری که می تواند‬
‫در طراحی وساخت سیستم های کامپیوتری نقش محوری‬
‫ایفا کند‪.‬‬
‫سیستم عامل ها در ابتدا فقط تک وظیفه ای وخط فرمانی بودند‪.‬‬
‫بعد به صورت ‪ multitask‬درآمدند وحاال به صورت گرافیکی‬
‫و چند هسته ای هستند‪.‬‬
‫سیستم عامل یک نرم افزار نیست ‪ ،‬در واقع مجموعه ای از نرم افزارهاست در‬
‫کنار هم‪.‬‬
‫زبانهای رایج برای توسعه سیستم عامل هم معموال‪ C++‬و اسمبلی هستند‪.‬‬
‫زبان اسمبلی مناسب ترین زبان است که می تواند با سخت افزار در پائین ترین‬
‫سطح ارتباط برقرار کند‪.‬‬
‫سیستم های نرم افزاری از چند حلقه تشکیل شده اند‪ 0Ring .‬که پائین ترین سطح‬
‫را دارد ( سیستم عامل در این سطح قرار دارد) و حلقه ‪ 2‬و ‪ 3‬که حلقه‬
‫‪3‬یا ‪ 3ring‬سطحی است که کاربر در آن قرار دارد‪.‬‬
‫حلقه صفر بیشترین دسترسی به سیستم را دارد وبه همین ترتیب دسترسی کم می‬
‫شود تا به سطح کاربربرسد‪.‬‬
‫سیستم عامل قاعدتا باید بیشترین سطح دسترسی به سیستم را داشته باشد‪ ،‬پس باید‬
‫در حلقه صفرباشد‪.‬‬
‫اصول سیستم هاي عامل توزیع شده‬
‫در طول دو دهه اخیر‪ ،‬حصول پیشرفت در تكنولوژي‬
‫میكروالكترونیك باعث در دسترس قرار گرفتن پردازنده هاي‬
‫ارزان و سریع شده است‪ .‬از سوي دیگر پیشرفت هاي موجود‬
‫در تكنولوژي ارتباطات باعث به وجود آمدن شبكه هاي سریع‬
‫تر و به صرفه تر شده است‪ .‬از تركیب پیشرفت ها در این دو‬
‫میدان از تكنولوژي ها‪،‬تكنولوژي ارزان تر و كاراتري به‬
‫وجود آمده كه در آن به جاي این كه از یك پردازنده خیلي‬
‫سریع استفاده شود‪ ،‬از چند پردازنده معمولي كه به هم متصل‬
‫شده اند استفاده مي شود‪.‬‬
‫از نظر معماري‪ ،‬كامپیوترهایي كه از چندپردازنده متصل به هم تشكیل‬
‫شده اند اساسا ً بر دو دسته تقسیم مي شوند‪:‬‬
‫سیستم های جفت‬
‫شده قوی‬
‫سیستم های جفت‬
‫شده ضعیف‬
‫‪1‬‬
‫در این سیستم ها یك حافظه اولیه (فضاي آدرس) عمومي وجود دارد كه‬
‫میان همه پردازنده ها به اشتراك گذاشته شده است‪ .‬اگر براي مثال‪،‬‬
‫پردازنده اي در محل × از حافظه مقدار ‪ 100‬را بنویسد هر پردازنده‬
‫دیگري كه بالفاصله از همان آدرس ×را بخواند مقدار ‪ 100‬را دریافت‬
‫خواهد كرد‪ .‬بنابراین در این سیستم ها هر نوع تبادل میان پردازنده ها از‬
‫طریق حافظه مشترك صورت مي گیرد‪.‬‬
‫در این معماري پردازنده ها حافظه را به اشتراك نمي گذارند و هر‬
‫پردازنده فضاي آدرس دهي محلي مختص به خود را دارد‪.‬‬
‫مقایسه سیستم های جفت شده قوی وضعیف‪:‬‬
‫پردازنده هاي سیستم هاي محاسبات توزیع شده مي توانند خیلي دور از هم‬
‫قرار گرفته باشند تاحدي كه یك ناحیه جغرافیایي را تحت پوشش قرار دهند‪.‬‬
‫بعالوه‪ ،‬در سیستم هاي جفت شده قوي‪ ،‬تعداد پردازنده هایي كه به طور‬
‫موثر مي توانند مورد استفاده قرارگیرند مواجه با محدودیت ناشي از پهناي‬
‫باند حافظه مشترك است‪ ،‬در حالي كه در سیستم هاي محاسبات توزیع شده‬
‫چنین حالتي وجود ندارد و تقریبا ً به طور كامل آزادي داریم هر تعداد كه‬
‫بخواهیم پردازنده داشته باشیم‪ .‬یعني محدودیتي در مورد تعداد پردازنده ها‬
‫در «سیستم هاي محاسبات توزیع شده» وجود ندارد‪.‬‬
‫به طور خالصه یك سیستم محاسبات توزیع شده اساسا ً مجموعه‬
‫اي است از پردازنده هایي كه توسط یك شبكه ارتباطي به هم‬
‫متصل شده اند كه هر پردازنده حافظه محلي و دستگاههاي‬
‫جانبي خود را دارد و ارتباط میان هر دو جفت پردازنده از‬
‫سیستم از طریق عبور پیغام از شبكه ارتباطي صورت مي‬
‫گیرد‪ .‬براي هر پردازنده‪ ،‬منابع آن (محلي) هستند و این در‬
‫حالي است كه پردازنده هاي دیگر و منابع آن ها (دور) هستند‬
‫به پردازنده و منابع آن به طور معمول(گره)‪( ،‬سایت) یا‬
‫(ماشین) سیستم عامل توزیع شده اطالق مي شود‪.‬‬
‫سیر تكامل سیستم هاي عامل توزیع شده‬
‫• نحوه ایجاد یک سیستم عامل ‪:‬‬
‫زبانهایی که برای نوشتن یک سیستم عامل نیازند اسمبلی و‪C‬‬
‫هستند‪.‬‬
‫اسمبلی پایه ترین زبان است و برای شروع کار حتما به آن‬
‫نیازداریم‪.‬‬
‫سیستم عامل برای لود شدن نیاز به یک ‪Boot Loader‬‬
‫دارد‪.‬‬
‫‪ Boot load‬کدیست که در محلی از هارد دیسک قرار دارد‬
‫که در اولین سکتور این دیوایس نوشته می شود وحداکثر‬
‫حجمی که قابل برنامه نویسی هست فقط ‪ 512‬بایت است‪.‬‬
‫‪‬اشاره‬
‫هر ‪ Track‬معموال به‬
‫‪ 512‬قسمت تقسیم شده‬
‫است‪.‬‬
‫نکته ‪ :‬یک فالپی‬
‫دیسکت دارای ‪ 2‬هد‬
‫بیشتر نیست‪.‬‬
‫اگر مقادیر بیش از حد‬
‫به آن بدهیم ‪ ،‬سیستم‬
‫دچار مشکل می شود‪.‬‬
‫‪ Boot loader‬یک امضاء دارد که در‬
‫فرمت هگز به شکل ‪ AA55‬نوشته می شود‪،‬‬
‫یعنی عمال ‪ boot loader‬باید درکمتر از‬
‫‪ 512‬بایت نوشته شود‪.‬‬
‫وقتی کامپیوتر بوت می شود ‪ROM Bios ،‬‬
‫که در واقع اولین کدی هست که اجرا می‬
‫شود نگاه می کند دیوایس ها بوت ایبل هستند‬
‫یا نه( همان تنظیمی که در ‪setup‬میکنید‬
‫برای معرفی ‪ ، )First Boot‬و این اتفاق‬
‫فقط روی ‪ 512‬بایت اول که در واقع برابر‬
‫حجم هر سکتور یک فالپی دیسک است انجام‬
‫می شود‪.‬‬
‫پس نیاز داریم که با کامپایلری کار کنیم که اوال ‪ 16‬بیتی را‬
‫‪ SUPORT‬کند‪،‬دوما مینیمم حجم را اشغال کند‪ ،‬پس از ‪C‬‬
‫نمیتوانیم استفاده کنیم چون حداقل فایلی که تحویل می دهد‬
‫حجمش بیشتراست‪.‬‬
‫و دیگراینکه فایلهای خروجی ‪ C‬به علت ساختاری که دارند‬
‫(‪ )PE‬از همان بایت اول اجرائی نیستند ‪ ،‬ودربوت سکتور از‬
‫همان بایت اول چیزی برای شناختن فرمت فایلها اصال وجود‬
‫ندارد‪.‬‬
‫‪ C‬یک زبان سطح باالست و برنامه نویسی با آن راحت تراست و به عالوه‬
‫بسیاری از دستورات را به صورت کتابخانه های آماده در اختیارمان قرار‬
‫می دهد‪ ،‬پس نباید با نوشتن کدهای اسمبلی وقتمان را هدر بدهیم ( البته در‬
‫نهایت برای طراحی ‪ BASE‬یک سیستم عامل نیاز فراوانی به اسمبلی داریم‬
‫)‬
‫در ابتدا یک برنامه اسمبلی می نویسم که سیستم اصطالحا بوت شود و بعد‬
‫درونش یک ‪ JUMP‬می کنیم به محلی که ‪ KERNEL‬اصلی سیستم عامل‬
‫برای اجرا قرار دارد )‪ ، )POINT ENTRY‬از اینجا به بعد دیگر محدودیتی‬
‫به نام ‪ 512‬بایت نداریم‪.‬‬
‫یا اشاره گرها‪،‬قسمتی از حافظه را به شما معرفی می کنند و‬
‫در اختیار شما می گذارند ‪ ،‬چون در حالت معمولی مشخص نیست که‬
‫اطالعات کجای حافظه سخت افزار ‪ PAS‬قراراست ریخته شود! اگر‬
‫آدرس دهی ها درست تعریف نشوند‪،‬اشاره گرها ممکن است اطالعات‬
‫نادرستی بدهند‪.‬‬
‫‪ PHYSICAL ADDRESS SPACE‬فضای آدرس سخت‬
‫افزاری‪،‬در ‪RAM‬کامپیوترقرار دارد( البته حافظه سخت افزاری حتی می‬
‫تواند روی کارت گرافیک یا هر دیوایس دیگرهم عنوان شود)‬
‫تخصیص حافظه‬
‫پویا که قبال توابع مربوطه را دیدید مانند‪- :‬‬
‫‪- NEW - DELETE‬‬
‫)(‪MALLOC‬‬
‫)(‪FREE‬‬
‫کارشان این است که بلوکی از حافظه را برای شما نگه میدارند‬
‫در سیستم هایی که از پایه نوشته می شوند ( سیستم عامل ) با‬
‫استفاده بهینه از حافظه ‪ ،‬تخصیص حافظه ‪ ،‬آزاد کردن حافظه‬
‫بال استفاده خیلی سر وکار داریم‪.‬‬
‫استفاده از دستورات اسمبلی در دیگرزبان هایی‬
‫که قراراست برای توسعه استفاده کنید‪.‬‬
‫مثال در زبان ‪ C‬وقتی می خواهیم اسمبلی بنویسیم به این صورت شروع‬
‫می کنیم‪:‬‬
‫مثال‬
‫کد‪:‬‬
‫‪_ASM CLI ; DISABLE INTERRUPTS‬‬
‫یا اگر بیشتر از یک دستور داشته باشیم از بلوک ها استفاده می کنیم‬
‫کد‪:‬‬
‫{ ‪_ASM‬‬
‫‪CLI‬‬
‫‪HLT‬‬
‫}‬
‫‪Standard Library and the Run Time Library‬‬
‫استفاده از کتابخانه های برنامه نویسی از قبل آماده شده ‪ ،‬مثال‬
‫دیگر نیاز نیست دستور()‪ printf‬را با اسمبلی بازنویسی کنیم‬
‫‪،‬فقط کافی است اسم تابع رابنویسیم‪.‬‬
‫در این صورت می توان گفت حدود ‪ %90‬از سیستم عامل‬
‫را که قراراست نوشته شود از توابع آماده موجود از قبل‬
‫استفاده می کنیم‪.‬‬
‫اگر قرار باشد هربار که کدی برای سیستم عامل می نویسیم ‪ ،‬یکبار‬
‫سیستم را ریست کنیم کلی از وقتمان را هدرداده ایم‪.‬‬
‫می توانیم برای تستها ازابزاری به نام ‪ 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‬‬
‫‪( BOOT LOADER -2‬شامل برنامه نویسی به زبان اسمبلی و کامپایل آن‬
‫با ‪ NASM‬و کپی کردن برنامه کامپایل شده روی بوت سکتور مثال با‬
‫‪ PARTCOPY‬یا ‪)DEBUG‬‬
‫‪-3‬نوشتن کرنل (با استفاده از زبانهای سطح باال مثال‪C++‬و کپی فایل‬
‫نهائی روی فالپی دیسکت)‬
‫‪ -4‬تست کارکرد‬
‫برای داشتن یک سیستم عامل در حد قابل قبول نیاز داریم‬
:‫به‬
Memory Management

Program Management

Multitasking

Memory Protection

Multiuser

Kernel

File System

Command Shell

Graphical User Interface

Bootloader

‫معرفی کتاب ‪:‬‬
‫‪ ‬کتاب کرنل بی درنگ نوشته جین لبروس ( ترجمه فرزاد‬
‫شکاری زاده ‪ ،‬انتشارات نصر) مبحث راه اندازی یک سیستم‬
‫عامل بر روی میکروکنترلرها‪.‬‬
‫‪‬‬
‫کتاب اصول میکروکامپیوترها نوشته علیرضا رضائی‬
‫(انتشارات آیالر)‬
‫‪ ‬کتاب مرجع کامل الکترونیک‬
‫با سپاس از توجه شما‬

similar documents