دانشگاه شهید بهشتی
ترم اول ۹۱-۹۰

زبان ماشین و اسمبلی

گروه درسی بر روی گوگل
استاد : دکتر احمد محمودی
کمک درس : عباس نادری ، علیرضا زباندان
کمک تدریس | زبان ماشین و اسمبلی - دانشگاه شهید بهشتی - ترم اول سال تحصیلی ۹۱-۹۰ | پروژه پایانی
آخرین به روز رسانی : 1398/8/6

پروژه پایانی


طراحی و پیاده‌سازی یک سیستم بوتابل

مقدمه

در دنیای امروزی کامپیوتر، نرم‌افزارهای بسیاری نیاز به قابلیت بوتابل (بخوانید boot-ey-bell) بودن دارند، به عنوان مثال آنتی‌ویروس‌هایی که بدون وجود سیستم عامل از روی سی دی بوت می‌شوند و سیستم را اسکن می‌کنند، نرم‌افزارهای مدیریت دیسک، بازیابی اطلاعات خراب دیسک، بکاپ گرفتن از کل دیسک، یا اصلا خود سیستم عامل‌ها که فرآیند نصب بوتابل دارند.

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

در این پروژه می‌خواهیم یک سیستم بسیار ساده بوتابل طراحی کنیم، آنرا بر روی سیدی قرار دهیم و چیزهای بسیاری نیز یاد بگیریم.

معرفی

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

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

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

در نهایت سیستم ما باید بتواند کارهای زیر را انجام دهد :

  • بوت از روی سیدی
  • نمایش حداقل دو گزینه :‌نصب سیستم و ادامه بوت از روی سیستم موجود بر روی دیسک سخت (سیستم از پیش آماده)
  • امکان نصب سیستم به صورتی که از آن پس در صورت داخل نبودن سی‌دی، سیستم از روی دیسک سخت بوت شود
  • سیستم بوت شده شما کافیست تکه برنامه‌ای باشد که یک ورودی بگیرد و همان را خروجی دهد
توجه داشته باشید که عملیات فوق باید بر روی هرگونه IBM-PC قابل انجام باشد، نه تنها بر روی ماشین مجازی. لذا پس از تکمیل کار، یک سیدی آماده کرده بر روی چند سیستم تست نمایید.

برای انجام اینکار، باید با مفاهیم زیر آشنایی کامل پیدا کنید :

  1. فرآیند بوت IBM-PC
  2. نحوه اسمبل و لینک کردن برنامه برای سکوی سخت افزار (و نه سیستم عامل)
  3. نحوه چینش محتوا بر روی یک دیسک که منجر به بوتابل شدن دیسک شود
  4. نحوه کارکردن مقدماتی با دیسک،‌ بدون اتکا به سیستم عامل
سپس می‌توانید با اشراف کامل به مسئله پیش رو، اقدام به حل آن نمایید.

ملزومات

برای تحویل پروژه باید موارد زیر را تحویل دهید :

  1. سی‌دی آماده بوت. این سی دی بر روی یک سیستم دلخواه تست می‌شود
  2. کلیه کدهایی که استفاده کرده‌اید. کدها لزوما نباید به زبان اسمبلی باشد، می‌توانید به هر زبان دلخواهی برنامه بنویسید ولی دقت داشته باشید که در نهایت برنامه باید به زبان ماشین بر روی دیسک قرار بگیرد.
  3. یک سند راهنما، که با استفاده از آن خواننده مفروض بتواند از کدهایی که ارائه داده‌اید به سیستمی که ارائه داده‌اید برسد
  4. یک گزارش، که کل روندی که طی کرده‌اید با جزئیات قابل قبولی داشته باشد. این گزارش لازم نیست قالب خاصی را پیروی کند

در صورتی که سیستم، علاوه بر موارد لازم ذکر شده در معرفی، موارد زیر را داشته باشد نمره امتیازی خواهد داشت :

  1. ۱۰ نمره صفحه انتخاب گزینه بوت گرافیکی باشد
  2. ۲۵ نمره سیستم بوت شده چیزی شبیه به Command Prompt باشد
  3. ۱۰ نمره سیستم بوت شده گرافیکی باشد
  4. ۱۵ نمره مشخصات سیستم در صفحه بوت نمایش داده شود (پردازنده، حافظه، دیسک و غیره)
  5. ۴۰ نمره بتوان یک برنامه را در محلی از سی‌دی بوت قرار داد، که برنامه بوت آنرا اجرا نماید (یعنی خودش بتواند برنامه‌ای را لود و اجرا کند)

نحوه تحویل

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

آخرین زمان تحویل ۱۰ بهمن ماه ۱۳۹۰ خواهد بود. فرآیند تحویل‌گیری از هر گروه بین ۱۵ تا ۴۵ دقیقه زمان خواهد گرفت. لذا هماهنگی برای زمان تحویل وظیفه گروه خواهد بود. در صورتی که گروه تا زمان مقرر شده پروژه تحویل ندهد نمره پروژه منظور نخواهد شد.

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

انتظار می‌رود زمان قابل توجهی (حدود ۴۰ ساعت) برای تحقیق و مطالعه صرف کنید تا به مفاهیم پروژه مسلط شوید. سپس زمانی حدود ۴۰ ساعت نیز برای پیاده‌سازی آن صرف نمایید. بنابراین افرادی که تحویل می‌دهند باید به مباحث مربوط به پروژه نیز مسلط باشند.

پیوند‌های خارجی

How to write a simple operating system
Plain binaries with GNU assembler
El Torito (CD-ROM standard)
Creating bootable CD-ROMs
Custom NimbleX Live CD generator
Writing Boot Sector Code
x86 memory segmentation

در صورتی که سوال یا نکته مبهمی یافتید، به من ای‌میل بزنید و من این صفحه را بروزرسانی خواهم کرد.

موید و پیروز باشید

بازگشت

Site Footer

Sliding Sidebar