نوشتن سیستم عامل - نوشتن یک سیستم عامل - برای نوشتن یک سیستم عامل به چه چیزی نیاز است ؟
خیلی وقت بود تصمیم گرÙته بودم Ú©Ù‡ شروع کنم به یاد گیری ساخت یک سیستم عامل شاید به قدمت 15الی 20 سال ØŒ همیشه Ùکر میکردم کار من نیست ØŒ نمیشه ØŒ گاو نر میخواد Ùˆ الی آخر....
همیشه هم همین رابه خودم Ú¯Ùتم Ú©Ù‡ اینقدر طول کشید
این چند وقت کتابهای زیادی در مورد سخت اÙزار Ùˆ درک مطلب کارکرد سخت اÙزاری کامپیوتر خوندم
Ú©Ù‡ سه تا از اصلیها Ú©Ù‡ یه Ú©Ù… Ùکرم را Ø§ØµÙ„Ø§Ø Ú©Ø±Ø¯
کتاب کرنل بی درنگ نوشته جین لبروس ( ترجمه Ùرزاد شکاری زاده ØŒ انتشارات نص بود Ú©Ù‡ مبØØ« راه اندازی یک سیستم عامل بر روی میکروکنترلرها بود
و دومی کتاب اصول میکروکامپیوترها نوشته علیرضا رضائی انتشارات آیلار)
سومی هم مرجع کامل الکترونیک بود Ú©Ù‡ Ù‡ÛŒ Ùکر نکنم چرا Øالا این کلیده روشن شد (زیادی رÙتم از پایه )
الانم دارم اسمبلی برادر جعÙر نژاد قمی را میخونم ( اگه وقت کنم )
بعد از نوشتن اولین بوت لودر ، دیدم نه ، انگار میشه ، منتها باید هم کشید و قدم اول را برداشت...
از امروز شروع کردم به خوندن مطالب مربوطه روی اینترنت ØŒ Ùˆ همزمان( به Ùاصله زمانی Ú©Ù…) هم شروع میکنم به آموزش در اینجا ØŒ میدونم به من مجال نمیده Ú©Ù‡ یه غلط درست Øسابی بکنم ولی میدونم جونترهایی هستند Ú©Ù‡ یه روزی این تاپیک براشون بشه سکوئی برای ساخت اون چیزی Ú©Ù‡ من سالهاست به Ùکرشم Ùˆ میکروساÙت سالهاست ساخته ...
خب این ØرÙها را Ú©Ù‡ نوشتم مقدمه ای بود بر مقدمه ( این جمله یعنی شروع از قبل از شروع )
اول
زبانهایی که برای نوشتن یک سیستم عامل نیاز هست اسمبلی هست و بعد سی
اسمبلی Ú©Ù‡ پایه ترین زبان هست Ùˆ برای استارت کار Øتما نیاز بهش داریم ØŒ چرا ØŸ
چون سیستم عامل برای لود شدن نیاز به یک بوت لودر داره ، بوت لودر چیه ؟
بوت لود کدیست Ú©Ù‡ در Ù…ØÙ„ÛŒ از هارد دیسک(یا هرچی تو این مایه Cd-rom-Flopy-FlashMemory ) هست Ú©Ù‡ در اولین سکتور این دیوایس نوشته میشه Ùˆ Ú†Ù‡ بخواهین Ú†Ù‡ نخواهین Øداکثر Øجمی Ú©Ù‡ قابل برنامه نویسی هست Ùقط 512 بایت هست
در پرانتز : بوت لودر یک امضاء دارد Ú©Ù‡ در Ùرمت هگز به Ø´Ú©Ù„ 55AA نوشته میشه ØŒ یعنی عملا شما بوت لودرتون باید درکمتر از 512 بایت نوشته بشه ( خیلی Ú©Ù… هست ولی خب علت داره ØŒ علتش چیه ØŸ
وقتی کامپیوتر بوت میشه ØŒ ROM Bios Ú©Ù‡ در واقع اولین کدی هست Ú©Ù‡ اجرا میشه میاد روی دیوایس ها میگرده ببینه Ú©Ù‡ آیا بوت ایبل هست یا نه( همان تنظیمی Ú©Ù‡ توی ستاپ میکنید برای معرÙÛŒ First Boot) ØŒ Ùˆ این اتÙاق Ùقط روی 512 بایت اول Ú©Ù‡ در واقع برابر Øجم هر سکتور یک Ùلاپی دیسک هست انجام میشه
پس تا اینجا منظور این بوده که وقتی کامپیوتر ریست میشه ، بایوس میاد و اولین سکتور از هارد را میخونه و میخواد که اجراش کنه ! همین
(عکس ضمیمه )
پس نیاز داریم Ú©Ù‡ با کامپایلری کار کنیم Ú©Ù‡ اولا 16 بیتی را ساپورت کنه دوما مینیمم Øجم را اشغال کنه ØŒ پس از C نمیتونیم استÙاده کنیم چون Øداقل Ùایلی Ú©Ù‡ تØویل میده Øجمش بیشتر از این ØرÙاست
ویکی دیگه از دلایل اینه Ú©Ù‡ Ùایلهای خروجی سی به علت ساختاری Ú©Ù‡ دارند (PE) از همون بایت اول اجرائی نیستند ØŒ Ùˆ ما در بوت سکتور از همان بایت اول باید دست Ùˆ آستین بالا بزنیم چون چیزی برای شناختن Ùرمت Ùایلها Ùˆ غیره اصلا وجود نداره.
*** اديت شد : با سي هم ميشه
خب ممکنه سوال پیش بیاد Ú©Ù‡ چرا همه سیستم عامل را با اسمبلی نمینویسیم ØŸ سی یک زبان Ø³Ø·Ø Ø¨Ø§Ù„Ø§ هست Ùˆ برنامه نویسی باهاش راØت تره Ùˆ به علاوه بسیاری از دستورات را به صورت کتابخانه های آماده در اختیارمون میذاره ØŒ پس وقت ØŒ Ú©Ù‡ همون طلاست را بیخودی نباید با نوشتن کدهای اسمبلی هدر بدیم ( البته در نهایت برای طراØÛŒ بیس یک سیستم عامل نیاز Ùراوانی به اسمبلی داریم )
پس اول یک برنامه اسمبلی مینویسم Ú©Ù‡ سیستم اصطلاØا بوت بشود Ùˆ بعد درونش در واقع یک JUMP میکنیم به Ù…ØÙ„ÛŒ Ú©Ù‡ قراره Kernel اصلی سیستم عامل قرار داره برای اجرا به قول معرو٠Entry Point ØŒ از اینجا به بعد دیگه Ù…Øدودیتی به نام 512 بایت نداریم دیگه...
( مثلا برای ویندوز ما NTLDR را داریم)
مورد توجه نویسندگان بوت کیت ها
( خلاصه با هرچیزی میشه نوشت با سی یا بورلند سی یا Ùری بیسیک یا هر Ú©ÙˆÙت وزهر مار دیگه ای Ú©Ù‡ میشه برنامه های 32بیتی مستقل نوشت )
(با برنامه هایی Ú©Ù‡ تØت ویندوز الان دارند کارمیکنند Ùˆ از API ها استÙاده میکنند Ùˆ...اشتباه نشه )
پس در واقع ما برای اینکه یک سیستم عامل 32 بیتی داشته باشیم ، نیاز به مخلوطی از 16 بیتی و 32 بیتی داریم .
خب ما نیاز داریم به دونستن یکسری مطالب پایه مثل اشاره گرها ØŒ آدرس های Ùضای Ùیزیکی ،تخصیص ØاÙظه ،و....
ایشالا اگه زنده موندم بقیه اش بعداز برگشت از بندر انزلی
در همین Øین شما برای اینکه بیکار نمونید ابزارهائی Ú©Ù‡ در آینده نیاز دارید را دانلود کنید
NASM
Pcopy
VFD
Bochs
Visual Studio 2005
C++
HxD Hex Editor
لینک ندادم ØªÙˆØ¶ÛŒØ Ù‡Ù… ندادم Ú©Ù‡ بیکار نمونید ØŒ برگشتم دیدم دانلود نکردین ØŒ خب خودم با ذکر توضیØات آپلود میکنم ;)
خیلی وقت بود تصمیم گرÙته بودم Ú©Ù‡ شروع کنم به یاد گیری ساخت یک سیستم عامل شاید به قدمت 15الی 20 سال ØŒ همیشه Ùکر میکردم کار من نیست ØŒ نمیشه ØŒ گاو نر میخواد Ùˆ الی آخر....
همیشه هم همین رابه خودم Ú¯Ùتم Ú©Ù‡ اینقدر طول کشید
این چند وقت کتابهای زیادی در مورد سخت اÙزار Ùˆ درک مطلب کارکرد سخت اÙزاری کامپیوتر خوندم
Ú©Ù‡ سه تا از اصلیها Ú©Ù‡ یه Ú©Ù… Ùکرم را Ø§ØµÙ„Ø§Ø Ú©Ø±Ø¯
کتاب کرنل بی درنگ نوشته جین لبروس ( ترجمه Ùرزاد شکاری زاده ØŒ انتشارات نص بود Ú©Ù‡ مبØØ« راه اندازی یک سیستم عامل بر روی میکروکنترلرها بود
و دومی کتاب اصول میکروکامپیوترها نوشته علیرضا رضائی انتشارات آیلار)
سومی هم مرجع کامل الکترونیک بود Ú©Ù‡ Ù‡ÛŒ Ùکر نکنم چرا Øالا این کلیده روشن شد (زیادی رÙتم از پایه )
الانم دارم اسمبلی برادر جعÙر نژاد قمی را میخونم ( اگه وقت کنم )
بعد از نوشتن اولین بوت لودر ، دیدم نه ، انگار میشه ، منتها باید هم کشید و قدم اول را برداشت...
از امروز شروع کردم به خوندن مطالب مربوطه روی اینترنت ØŒ Ùˆ همزمان( به Ùاصله زمانی Ú©Ù…) هم شروع میکنم به آموزش در اینجا ØŒ میدونم به من مجال نمیده Ú©Ù‡ یه غلط درست Øسابی بکنم ولی میدونم جونترهایی هستند Ú©Ù‡ یه روزی این تاپیک براشون بشه سکوئی برای ساخت اون چیزی Ú©Ù‡ من سالهاست به Ùکرشم Ùˆ میکروساÙت سالهاست ساخته ...
خب این ØرÙها را Ú©Ù‡ نوشتم مقدمه ای بود بر مقدمه ( این جمله یعنی شروع از قبل از شروع )
اول
زبانهایی که برای نوشتن یک سیستم عامل نیاز هست اسمبلی هست و بعد سی
اسمبلی Ú©Ù‡ پایه ترین زبان هست Ùˆ برای استارت کار Øتما نیاز بهش داریم ØŒ چرا ØŸ
چون سیستم عامل برای لود شدن نیاز به یک بوت لودر داره ، بوت لودر چیه ؟
بوت لود کدیست Ú©Ù‡ در Ù…ØÙ„ÛŒ از هارد دیسک(یا هرچی تو این مایه Cd-rom-Flopy-FlashMemory ) هست Ú©Ù‡ در اولین سکتور این دیوایس نوشته میشه Ùˆ Ú†Ù‡ بخواهین Ú†Ù‡ نخواهین Øداکثر Øجمی Ú©Ù‡ قابل برنامه نویسی هست Ùقط 512 بایت هست
در پرانتز : بوت لودر یک امضاء دارد Ú©Ù‡ در Ùرمت هگز به Ø´Ú©Ù„ 55AA نوشته میشه ØŒ یعنی عملا شما بوت لودرتون باید درکمتر از 512 بایت نوشته بشه ( خیلی Ú©Ù… هست ولی خب علت داره ØŒ علتش چیه ØŸ
وقتی کامپیوتر بوت میشه ØŒ ROM Bios Ú©Ù‡ در واقع اولین کدی هست Ú©Ù‡ اجرا میشه میاد روی دیوایس ها میگرده ببینه Ú©Ù‡ آیا بوت ایبل هست یا نه( همان تنظیمی Ú©Ù‡ توی ستاپ میکنید برای معرÙÛŒ First Boot) ØŒ Ùˆ این اتÙاق Ùقط روی 512 بایت اول Ú©Ù‡ در واقع برابر Øجم هر سکتور یک Ùلاپی دیسک هست انجام میشه
پس تا اینجا منظور این بوده که وقتی کامپیوتر ریست میشه ، بایوس میاد و اولین سکتور از هارد را میخونه و میخواد که اجراش کنه ! همین
(عکس ضمیمه )
پس نیاز داریم Ú©Ù‡ با کامپایلری کار کنیم Ú©Ù‡ اولا 16 بیتی را ساپورت کنه دوما مینیمم Øجم را اشغال کنه ØŒ پس از C نمیتونیم استÙاده کنیم چون Øداقل Ùایلی Ú©Ù‡ تØویل میده Øجمش بیشتر از این ØرÙاست
ویکی دیگه از دلایل اینه Ú©Ù‡ Ùایلهای خروجی سی به علت ساختاری Ú©Ù‡ دارند (PE) از همون بایت اول اجرائی نیستند ØŒ Ùˆ ما در بوت سکتور از همان بایت اول باید دست Ùˆ آستین بالا بزنیم چون چیزی برای شناختن Ùرمت Ùایلها Ùˆ غیره اصلا وجود نداره.
*** اديت شد : با سي هم ميشه
خب ممکنه سوال پیش بیاد Ú©Ù‡ چرا همه سیستم عامل را با اسمبلی نمینویسیم ØŸ سی یک زبان Ø³Ø·Ø Ø¨Ø§Ù„Ø§ هست Ùˆ برنامه نویسی باهاش راØت تره Ùˆ به علاوه بسیاری از دستورات را به صورت کتابخانه های آماده در اختیارمون میذاره ØŒ پس وقت ØŒ Ú©Ù‡ همون طلاست را بیخودی نباید با نوشتن کدهای اسمبلی هدر بدیم ( البته در نهایت برای طراØÛŒ بیس یک سیستم عامل نیاز Ùراوانی به اسمبلی داریم )
پس اول یک برنامه اسمبلی مینویسم Ú©Ù‡ سیستم اصطلاØا بوت بشود Ùˆ بعد درونش در واقع یک JUMP میکنیم به Ù…ØÙ„ÛŒ Ú©Ù‡ قراره Kernel اصلی سیستم عامل قرار داره برای اجرا به قول معرو٠Entry Point ØŒ از اینجا به بعد دیگه Ù…Øدودیتی به نام 512 بایت نداریم دیگه...
( مثلا برای ویندوز ما NTLDR را داریم)
مورد توجه نویسندگان بوت کیت ها
( خلاصه با هرچیزی میشه نوشت با سی یا بورلند سی یا Ùری بیسیک یا هر Ú©ÙˆÙت وزهر مار دیگه ای Ú©Ù‡ میشه برنامه های 32بیتی مستقل نوشت )
(با برنامه هایی Ú©Ù‡ تØت ویندوز الان دارند کارمیکنند Ùˆ از API ها استÙاده میکنند Ùˆ...اشتباه نشه )
پس در واقع ما برای اینکه یک سیستم عامل 32 بیتی داشته باشیم ، نیاز به مخلوطی از 16 بیتی و 32 بیتی داریم .
خب ما نیاز داریم به دونستن یکسری مطالب پایه مثل اشاره گرها ØŒ آدرس های Ùضای Ùیزیکی ،تخصیص ØاÙظه ،و....
ایشالا اگه زنده موندم بقیه اش بعداز برگشت از بندر انزلی
در همین Øین شما برای اینکه بیکار نمونید ابزارهائی Ú©Ù‡ در آینده نیاز دارید را دانلود کنید
NASM
Pcopy
VFD
Bochs
Visual Studio 2005
C++
HxD Hex Editor
لینک ندادم ØªÙˆØ¶ÛŒØ Ù‡Ù… ندادم Ú©Ù‡ بیکار نمونید ØŒ برگشتم دیدم دانلود نکردین ØŒ خب خودم با ذکر توضیØات آپلود میکنم ;)
Comment