PDA

View Full Version : طراحی هسته یک سیستم عامل ساده با C++



Mehdi Zarepour
پنج شنبه 12 مرداد 1391, 09:36 صبح
سلام
من یه سیستم عامل با اسمبلی نوشتم، ینی یه کرنل و یک لودر. که لودر میاد کرنل رو لود می کنه اگه بخوام ریزتر بگم اینجوریه که یک لودر نوشتم با ساختار فایل کام یعنی از همون خط اولش اجرایی هست تا cpu برای اجراش مشکلی نداشته باشه البته خود لودر یک فایل باینری ولی ساختار کام رو داره. و کرنلم هم یک فایل باینری هست که ساختار کام رو داره. این سیستم عامل سادم الان مشکلی نداره.
ولی اگه بخوام کرنل رو با c++ بنویسم باید چیکار کنم؟ من تا حالا فقط از وقفه های Bios استفاده می کردم و اگه بخوام از c++ استفاده کنم باید از تابع های داس استفاده کنم ولی الان که داسی وجود نداره و فقط می تونم از وقفه های Bios استفاده کنم.
تا اونجایی که می دونم باید توابع داس رو لود کنم تو رم و ازشون استفاده کنم. حالا سوالی که هست اینه که چجوری توابع داس رو لود کنم با وفقه های Bios ؟ کجای رم لود کنم؟
حالا بعداز اینکه لود کردم چجوری اون فایل exe که با C++ ساختم رو اجرا کنم؟
اگه کسی راهنماییم کنه ممنون می شم

pswin.pooya
پنج شنبه 12 مرداد 1391, 21:44 عصر
سلام

قبل از هر چیز پیشنهاد می کنم سوئیچ کن روی لینوکس. چون اینکار اونجا هم استاندارد تر و هم راحتر هست.

برای استفاده از C++ باید به کامپایلر بگی که از کتابخونه های C run time استفاده نکنه. این شکلی حق نداری از هیچ کدوم از هدرهای معروف C مثل stdio.h . یا conio.h استفاده کنی. و باید همه رو خودت بنویسی. و باید فایل اسکریپت لینکر و نقطه ورود برنامه رو هم خودت بنویسی.

مورد بعدی اینه که پیشنهاد می کنم بجای C++ از C استفاده کنی. چون راه انداری C خیلی راحتر از C++ هست و با جزئیات کمتری درگیر میشی.

Mehdi Zarepour
جمعه 13 مرداد 1391, 11:35 صبح
سلام دوست عزیز ممنونم که جواب دادید.
یعنی هیچ راهی وجود نداره که از کتابخونه ها استفاده کنم؟ یعنی نمی شه این کتابخونه ها رو لود کرد تو رم و ازشون استفاده کرد؟
می خواستم اینجوری سرعت کارم بالا بره ولی اینجوری که شما گفتید از اسمبلی کندتر می شه که!
اگه بخوام اینا رو خودم بنویسم کارم خیلی سخت می شه. راهی به ذهنتون نمی رسه که بشه از کتابخونه های C استفاده کنم؟
راستی یه سوال دیگه با c که هسته رو طراحی کردم باید به exe تبدیل کنم یا مثل اسمبلی به bin ؟ یا اصلا میشه به com تبدیلش کرد؟
چون فایل exe هدر داره که چون cpu از خط اول شروع میکنه به اجرا کردن وقتی به هدر برسه براش مشکل پیش میاد.

pswin.pooya
جمعه 13 مرداد 1391, 13:22 عصر
می خواستم اینجوری سرعت کارم بالا بره ولی اینجوری که شما گفتید از اسمبلی کندتر می شه که!
سرعت کارت بعد از نوشتن کتابخونه ها تندتر میشه. اما تا یه نتیجه خالی بگیری یه مدت زیاد طول می کشه. من حدود یک سال طول کشید تا بتونم اولین نتایج رو بگیرم.


اگه بخوام اینا رو خودم بنویسم کارم خیلی سخت می شه. راهی به ذهنتون نمی رسه که بشه از کتابخونه های C استفاده کنم؟
متاسفانه هیچ راهی وجود نداره به جزء اینکه از سورس بقیه کسایی که سیستم عامل می نویسن استفاده کنی و تازه اونم دردسرهای خودش رو داره که توی بیشتر موارد نمیشه.


راستی یه سوال دیگه با c که هسته رو طراحی کردم باید به exe تبدیل کنم یا مثل اسمبلی به bin ؟ یا اصلا میشه به com تبدیلش کرد؟
مهم نیست که از چه فرمتی استفاده می کنید. این بوت لودر هست که باید بتونه اون فرمت رو پشتیبانی کنه.

چون فایل exe هدر داره که چون cpu از خط اول شروع میکنه به اجرا کردن وقتی به هدر برسه براش مشکل پیش میاد.
این بوت لودر هست که باید هدر رو ترجمه کنه و بتونه فایل exe رو توی نقطه مشخص شده لود کنه که فایل اجرا شه. من خودم قبلا از فرمت exe استفاده می کردم. اما الان از قالب فایل elf استفاده می کنم که با بوت لودرم (grub) سازگار هست.

اگر میخوای سیستم عامل بنویسی یکی از اولین چیزهایی که باید بیخیالش بشی بوت لودر هست. بهتره از یه بوت لودر آماده استفاده کنی. وگرنه توی همون اول کار بایوس و الحاقی ها و استثناءها کارت رو یکسره می کنن.

ehsan7007
جمعه 28 تیر 1392, 19:08 عصر
اقا من با سی بطور خیلی ساده کار های چاپ یک متن رو انجام دادم ؛ اما برای بقیه اش موندم !!!!!! از درست کردن لینکر که هیچ نمیدانم !! با بوت لودر هم call main می کنم و لی تو ld ارور می ده .

کسی یه نسخه اوپن سورس و کاملا ساده و استاندارد نداره بزاره ؟

ممنوش میشم.

brightening-eyes
جمعه 28 تیر 1392, 22:55 عصر
میتونی از سورس کد
MikeOS (http://mikeos/berlios.de)
استفاده کنی
ولی کامل نیستش و نمیتونی اونجور که باید رو سیستم عاملت کار کنی.
در ضمن همش با اسمبلی نوشته شده و یه خط با c ننوشتن
حتی همون libmikeos که 99%ش از اسمبلی استفاده کرده.

ehsan7007
شنبه 29 تیر 1392, 05:35 صبح
ممنون دوست من ؛ ولی این اون چیزی نبود که من می خواستم ، من توی اسمبلی زیاد تخصصی ندارم .
از دوستان هیچکس پروژه سالم و سی نمیشناسه؟

m.j_banitaba
شنبه 29 تیر 1392, 23:09 عصر
http://www.brokenthorn.com/Resources/OSDevIndex.html

sadegh33
دوشنبه 08 مهر 1392, 02:12 صبح
سلام
میتونی از این استفاده کنی
http://kolibrios.org/en/

prpe26
دوشنبه 08 مهر 1392, 13:57 عصر
سلام
میتونی از این استفاده کنی
http://kolibrios.org/en/

این هم کاملا اسمبلی هست.

brightening-eyes
جمعه 19 مهر 1392, 20:59 عصر
میتونی بری
osdev.org بعدش یه سری مطلب راجع بهش نوشته: یه منبع توپ
میتونی بخونی و طراحی کنی