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