• اگر سمپادی هستی همین الان عضو شو :
    ثبت نام عضویت

چگونه هسته یک سیتم عامل بنویسیم ...!

وضعیت
موضوع بسته شده است.
  • شروع کننده موضوع
  • #1

Sobh@n

کاربر حرفه‌ای
ارسال‌ها
304
امتیاز
570
سلام دوستان خوبید ؟
خوبم ؟
آقا ما شروع کردیم به نوشتن سیستم عامل ولی نمیدونم با چه امیدی این کارو کردم :D
ولی خوب بالاخره مجبورم ادامه بدم ...
حالا درباره ساخت خود سیستم عامل توضیح نمیدم ولی میگم که باید C رو بلد باشید چون با C++ خیلی خیلی سخته میشه
خوب میریم سراغ درس ... ! :D

اول از همه ما به یه سری کد نیاز داریم تا به وسیله بوت لودر ما بارگزاری بشن
یه چیزی تو این مایه ها :
کد:
In C:
void k_main()
{
int num;
char ch;
char *str="Kernel Loaded";
return;
}

تمام کارایی که اینا انجام میدن ، شناسوندن 3 متغیر + برگشته . خوب الان خوب و شیک شد :) . خوب اینجا هم یه سری کار دیگه هست که ما میتونیم انجاموشون بدیم : :D

کد:
1-output "Hello, World"
2-clear the screen
3-output colored text to the screen

هدف اول : (نمایش متن)
الان هیچی خروجی تصویری نداره !! یعنی مشکلش چی میتونه باشه ؟ اگه راستشو بخوای هیچیش نیست . ما به یه صفحه ورودی و خروجی نیاز داریم. (I/O) این آسونترین چیز وساه نوشتنش تو کرنله.(خوراکــه) که فقط باید کاراکتر ascii ساده رو با رنگ کاراکتر تو حافظه بنویسین، همین ...
کاری که شما باید انجام بدین اینه که، بایت ascii رو که نشانش(مشختصاتش) دنبالشه(یعنی بهش چسبیده و پست سرشه) رو درون 0xb8000 قرار بدین. لازیم نیست که شما اینو اونجا قرار بدین ، چون هردفعه که یه کاراکتر رو چاپ میکنین ، شما باید نشانگر متن رو 2 بار توسعه بدین.(بایت کاراکتر + بایت نشانش(مشخصاتش)). پس داریم:

کد:
In C:
void _k_main()
{
int num;
char ch;
char *text_video = (char*)0xB8000;
char attrib = 0x07;
char *str="Kernel Loaded";
while(*str!=0)
{
*text_video = *str;
*text_video++;
*text_video = attrib;
*text_video++;
*str++;
}
return;
}

پاک کردن صفحه :
پاک کردن صفحه نمایش هم یکی دیگه از اون کارایه خیلی آسونه که با نمایشگر متن کار داره . برای هرکدوم از کاراکترهای asdii درون متن تصویری، فقط رو صفر تنظیمش کنین و بایت نشانش رو رویه نشان متدوال تنظیم کنین
پس :

کد:
In C:
void clear_screen(char clear_to, char attrib)
{
char *text_video = (char*)0xB8000;
int pos=0;
while(pos<(80*25*2))
{
*text_video = clear_to;
*text_video++;
*text_video = attrib;
*str++;
pos++;
}
}

الان شما فقط تونستید کاراکتر رو رویه صفر تنظیم کنین و نشان اونو به 0x07 (سفید و سیاه). اما من پیچیده ترین قسمت رو براتون قبلا انجام دادم. (چه کنیم که اند مرامیم). حالا در مورد نشان ها !! اینا دیگه چین ؟
خوب بزارین با دادن تمامی رنگ های مربوطی به متن و نشان ها کارمونو شروع کنیم .:

کد:
-{TEXT COLORS}-
FG AND BG
0 = black
1 = blue
2 = green
3 = cyan
4 = red
5 = magenta
6 = brown
7 = white (standard text color)
FG ONLY
8 = dark grey
9 = bright blue
10 = bright green
11 = bright cyan
12 = pink
13 = bright magenta
14 = yellow
15 = bright white
[IBBBFFFF] binary
I = Intensity (blink)
B = Background
F = Foreground

خیلی خوب ، خیلی باحاله نه ؟ چند تا عدد عجیب و غریب! الان قراره ما با اینا چیکار کنیم ؟ بزارین تا به یه مثال روشنتون کنم.
0x07 سفید رو سیاهه. این یعنی اینکه متن ما الان سفیده و پس زمینه ی ما سیاه. خوب در مورد اونای دیگه چی؟ ااون اعداد سمت راست لیست ما ما یکی هستن ، خیلی خوب ،بزارین بگم مثلا ما متن قرمز و پس زمینه ی سفید میخوایم. چکار باید بکنیم؟ چه عددی میتونه باشه؟ خوب قرمز چهاره و سفید و هم هفته...پس میشه 0x74
چند تا چیز هستش که الان مخ شما رو بدجوری کار گرفته باشه و شما بشدت مشغول فسفر سوزاندن هستین تا بفهمین موضوع از چه قراره...مثلا اینگه چرا رنگ 15-8 ، فقط میتونه پیش زمینه باشه ؟ اگه شما کل لیستو خونده باشی باید یه نکته خیلی مهم رو دیده باشی. متن میتونه چشمک هم بزنه..حالا چجوری چشمک میزنه؟ همه ی اینا به این بستگی داره که با این بیت تنظیم شده یا نه ؟...اومد و این بیت تو کلمه ی پس زمینه قرار گرفت .. ببین ، اینجوری :

کد:
blink bg fg
\ _/ _/_
IBBBFFFF
I = Intensity (blink)
B = Background
F = Foreground

111 تو این فقط 7 هست(منظور مقدار متغیری هست که برای نگهداری پس زمینه و پیش زمینه استفاده میشود) که برای این یعنی اینکه برای ایجاد فضای مورد نیاز برای بیت چشمک زن - شما فقط میتونید 7 رنگ لیستمون استفاده کنین ، فهمیدنش خیلی سخته ؟ امیدوارم که نباشه

سرهم بندی کرنل:
سرهم بندی بوت لودر کار بسیار ساده ای هست و تنها کاری که باید انجام بدید اینه که کد منبه C رو سرهم بندی کنیم . همه رو به هم وصل کنین . بعدش بوت لودر رو تو کرنل کپپی کنین (Object Kernel) این یه تصیر از کرنل به شما میده که به وسیله ی اون شما میتونید روی یه وسیله ی قابل بوت مثل فلاپی دیسک بنویسین . بزارین این کارم من براتون آسون تر میکنم. (گام به گام) :

کد:
-{Step by Step}-
1-compile all *.c files
>gcc *.c
2-compile all asm files into a format like aout (not bin, C doesn't
output to bin by default)
>nasm *.asm -f aout
3-link all C files and asm files together into a file(ie:kernel.o)
>ld -T linkscript.ld -o kernel.o a.o b.o c.o
4-compile & copy the bootloader to the front of the kernel object
file(ie:kernel.img)
>nasm boot.asm
>copy /b boot.bin+kernel.o kernel.img
5-write the image file to a bootable device(ie:floppy disk)
>floppyout kernel.img a: -sector 0 -head 0 -track 0
6-now take that bootable device and put it in a microwave oven for
30 seconds, wait for it to melt, and enjoy!
+-------------------------+
| ||===========|| [00:30] |
| || || 7 8 9 |
| || || 4 5 6 |
| || || 1 2 3 |
| || || X 0 X |
| ||===========|| (start) |
+-------------------------+
\_/ \_/

اگه به کمک بیشتری نیاز داشتین به کد هایی که آوردم بیشتر توجه کنید
 

Sajjad Heydari

کاربر فعال
ارسال‌ها
21
امتیاز
14
نام مرکز سمپاد
شهيد سلطاني كرج
شهر
كرج
پاسخ : چگونه هسته یک سیتم عامل بنویسیم ...!

خيلي ممنون
البته c++ راحت تر ميشه ها!!!
منم خدا زد تو كمرم يه چند وقتيه افتادم تو تكاپو براي نوشتن bootloader و هسته.

چجوري ميشه يه تصوير رو نمايش داد؟؟
 

hamykhafan

کاربر فوق‌فعال
ارسال‌ها
85
امتیاز
110
نام مرکز سمپاد
شهید اژه ای
شهر
اصفهان
مدال المپیاد
اصلا حرفشم نزن حالم بهم می خوره
دانشگاه
؟؟؟!!!!
رشته دانشگاه
نرم افزار
پاسخ : چگونه هسته یک سیتم عامل بنویسیم ...!

آقا جون فکر کردی هسته سیستم عامل نوشتن الکیه؟؟؟؟؟؟؟؟؟؟؟؟؟
ملت خودشنو کشتن تازه بعد اینهمه مدت کرنل لینوکسو دادن بیرون!!!
تا حالا سورس کرنل لینوکس رو خوندی که می خوای واسه من سیستم عامل بنویسی؟؟؟
اندازه حضرت نوح باید عمر کنی تا یه چیز درست حسابی دربیاد!!!
فکر کردی این لینوکس شریف که این ایرانیا زدن سیستم عامل جدیده؟؟؟ نه بابا !!!
این یه سیستم عامل چرت پر از باگ بر پایه ی اوبونتو هست!!!
الکی وقت خودتو تلف نکن
اگه خیلی احساس خوفی میکنی بیا دور هم بشینیم یه سیستم عامل بر پایه لینوکس طراحی کنیم ( یه مرحله از لینوکس شریف پیشرفته تر)
سورس kde , genome , .... هم الان ریخته!!! کیلویی 0 تومن!!!
برا سیستم عامل خودمون کامپایلش میکنیم!!!
لینوکس سمپاد!!!
 

Sajjad Heydari

کاربر فعال
ارسال‌ها
21
امتیاز
14
نام مرکز سمپاد
شهيد سلطاني كرج
شهر
كرج
پاسخ : چگونه هسته یک سیتم عامل بنویسیم ...!

به نقل از hamykhafan :
آقا جون فکر کردی هسته سیستم عامل نوشتن الکیه؟؟؟؟؟؟؟؟؟؟؟؟؟
ملت خودشنو کشتن تازه بعد اینهمه مدت کرنل لینوکسو دادن بیرون!!!
تا حالا سورس کرنل لینوکس رو خوندی که می خوای واسه من سیستم عامل بنویسی؟؟؟
اندازه حضرت نوح باید عمر کنی تا یه چیز درست حسابی دربیاد!!!
فکر کردی این لینوکس شریف که این ایرانیا زدن سیستم عامل جدیده؟؟؟ نه بابا !!!
این یه سیستم عامل چرت پر از باگ بر پایه ی اوبونتو هست!!!
الکی وقت خودتو تلف نکن
اگه خیلی احساس خوفی میکنی بیا دور هم بشینیم یه سیستم عامل بر پایه لینوکس طراحی کنیم ( یه مرحله از لینوکس شریف پیشرفته تر)
سورس kde , genome , .... هم الان ریخته!!! کیلویی 0 تومن!!!
برا سیستم عامل خودمون کامپایلش میکنیم!!!
لینوکس سمپاد!!!
اونقدر ها هم سخت نيست !
قرار نيست همه كاري كنه كه! اجرا شه مديريت دايركتوري داشته باشه ، كپي پيست كنه و كامپايلر c يا assembler داشته باشه حله ، چون ميتوني روش نرم افزار هاي gnu رو بريزي و ....
 

The Smith

کاربر فوق‌حرفه‌ای
ارسال‌ها
1,061
امتیاز
3,544
نام مرکز سمپاد
سلام ایران‌زمین
پاسخ : چگونه هسته یک سیتم عامل بنویسیم ...!

به نقل از hamykhafan :
آقا جون فکر کردی هسته سیستم عامل نوشتن الکیه؟؟؟؟؟؟؟؟؟؟؟؟؟
ملت خودشنو کشتن تازه بعد اینهمه مدت کرنل لینوکسو دادن بیرون!!!
تا حالا سورس کرنل لینوکس رو خوندی که می خوای واسه من سیستم عامل بنویسی؟؟؟
اندازه حضرت نوح باید عمر کنی تا یه چیز درست حسابی دربیاد!!!
فکر کردی این لینوکس شریف که این ایرانیا زدن سیستم عامل جدیده؟؟؟ نه بابا !!!
این یه سیستم عامل چرت پر از باگ بر پایه ی اوبونتو هست!!!
الکی وقت خودتو تلف نکن
اگه خیلی احساس خوفی میکنی بیا دور هم بشینیم یه سیستم عامل بر پایه لینوکس طراحی کنیم ( یه مرحله از لینوکس شریف پیشرفته تر)
سورس kde , genome , .... هم الان ریخته!!! کیلویی 0 تومن!!!
برا سیستم عامل خودمون کامپایلش میکنیم!!!
لینوکس سمپاد!!!
من خودم صاحب اون اکانت 3D هستم !
حرف شما متین ولی ببین آقای دوست عزیز من (!) من نشستم 6 -7 ماه از زندگیمو پای این هسته دادم رفته
شب و روز بوده که کد زدم و نخوابیدم
حالا اینا مهم نیست ولی ببین من قصد ندارم بیام یک سیستم عامل طراحی کنم مثل مکینتاش و لینوکس و ویندوز
کلا نمیخواستم O.S بنویسم چون واقعا کار سختیه و کار یک گروه حداقل 100 نفرس نه 2 نفر مثل من و تو
من احساس خوفی میکنم ولی شما در حدّ من نیستی بیام باهات کد بزنم (از نظر برنامه نویسی نمیگم شما کلّا کجی داداش)
من این هسته سیستم عامل رو برای افرادی مثل تو طراحی کردم که راحت اگه میخوان O.S بنویسن ، بنویسن ، چون خفن ترین جای یک سیستم عامل هسته ـش ـه !
شمام برو به طراحی سیستم عاملت برس ماـم المپیادمون رو کار میکنیم (;
موفق باشی
 

SR

کاربر فوق‌حرفه‌ای
ارسال‌ها
604
امتیاز
1,157
نام مرکز سمپاد
شهید اژه ای 1
شهر
اصفهان
سال فارغ التحصیلی
00
مدال المپیاد
درست نخوندم به جایی نرسیدم
رشته دانشگاه
مهندسی برق
پاسخ : چگونه هسته یک سیتم عامل بنویسیم ...!

شما ها تعریف سیستم عامل رو میدونید که رفتید سراغ طراحی سیستم عامل؟؟؟؟ :-/
لااقل بایستی یه مقدار اسمبلی بلد باشید
سیستم عامل ترکیبیه از یه ذره اسمبلی و یه زبون قوی
 

The Smith

کاربر فوق‌حرفه‌ای
ارسال‌ها
1,061
امتیاز
3,544
نام مرکز سمپاد
سلام ایران‌زمین
پاسخ : چگونه هسته یک سیتم عامل بنویسیم ...!

به نقل از SR :
شما ها تعریف سیستم عامل رو میدونید که رفتید سراغ طراحی سیستم عامل؟؟؟؟ :-/
لااقل بایستی یه مقدار اسمبلی بلد باشید
سیستم عامل ترکیبیه از یه ذره اسمبلی و یه زبون قوی
نکته ی دیگه ای نبود بگید که دوستان استفاده کنن ؟!
داداش کلا اسمبلی برای ارتباط با سخت افزارش نیازه !:)
بعدشم کسی قصد نوشتن OS نداره ! :)
 

SR

کاربر فوق‌حرفه‌ای
ارسال‌ها
604
امتیاز
1,157
نام مرکز سمپاد
شهید اژه ای 1
شهر
اصفهان
سال فارغ التحصیلی
00
مدال المپیاد
درست نخوندم به جایی نرسیدم
رشته دانشگاه
مهندسی برق
پاسخ : چگونه هسته یک سیتم عامل بنویسیم ...!

به نقل از مـ‌هــراد :
نکته ی دیگه ای نبود بگید که دوستان استفاده کنن ؟!
داداش کلا اسمبلی برای ارتباط با سخت افزارش نیازه !:)
بعدشم کسی قصد نوشتن OS نداره ! :)
پس عنوان تاپیک چیه؟
سیستم عامل یعنی چی؟؟؟باید خوب بتونه سخت افزار رو کنترل کنه
توصیه میکنم کتاب کرنل بی درنگ رو مطالعه کنید دیدتون عوض میشه...
اگه کامپیوتر سخته با میکروکنترلر شروغ کنید ???
 

The Smith

کاربر فوق‌حرفه‌ای
ارسال‌ها
1,061
امتیاز
3,544
نام مرکز سمپاد
سلام ایران‌زمین
پاسخ : چگونه هسته یک سیتم عامل بنویسیم ...!

به نقل از SR :
پس عنوان تاپیک چیه؟
سیستم عامل یعنی چی؟؟؟باید خوب بتونه سخت افزار رو کنترل کنه
توصیه میکنم کتاب کرنل بی درنگ رو مطالعه کنید دیدتون عوض میشه...
اگه کامپیوتر سخته با میکروکنترلر شروغ کنید ???
باشه :)
ببین تو برو کتابتو بخون ! :)
 

SR

کاربر فوق‌حرفه‌ای
ارسال‌ها
604
امتیاز
1,157
نام مرکز سمپاد
شهید اژه ای 1
شهر
اصفهان
سال فارغ التحصیلی
00
مدال المپیاد
درست نخوندم به جایی نرسیدم
رشته دانشگاه
مهندسی برق
پاسخ : چگونه هسته یک سیتم عامل بنویسیم ...!

به نقل از مـ‌هــراد :
باشه :)
ببین تو برو کتابتو بخون ! :)
خوندم که اومدم جواب میدم ^-^
به نقل از مـ‌هــراد :
من خودم صاحب اون اکانت 3D هستم !
حرف شما متین ولی ببین آقای دوست عزیز من (!) من نشستم 6 -7 ماه از زندگیمو پای این هسته دادم رفته
شب و روز بوده که کد زدم و نخوابیدم
حالا اینا مهم نیست ولی ببین من قصد ندارم بیام یک سیستم عامل طراحی کنم مثل مکینتاش و لینوکس و ویندوز
کلا نمیخواستم O.S بنویسم چون واقعا کار سختیه و کار یک گروه حداقل 100 نفرس نه 2 نفر مثل من و تو
من احساس خوفی میکنم ولی شما در حدّ من نیستی بیام باهات کد بزنم (از نظر برنامه نویسی نمیگم شما کلّا کجی داداش)
من این هسته سیستم عامل رو برای افرادی مثل تو طراحی کردم که راحت اگه میخوان O.S بنویسن ، بنویسن ، چون خفن ترین جای یک سیستم عامل هسته ـش ـه !
شمام برو به طراحی سیستم عاملت برس ماـم المپیادمون رو کار میکنیم (;
موفق باشی
فکر کنم این 6-7 ماه عمرت بر فنا بوده :-?
چون معلومه تو خط الکترونیک نبودی فکر نکنم دقیق منظور منو بگیری
 

SR

کاربر فوق‌حرفه‌ای
ارسال‌ها
604
امتیاز
1,157
نام مرکز سمپاد
شهید اژه ای 1
شهر
اصفهان
سال فارغ التحصیلی
00
مدال المپیاد
درست نخوندم به جایی نرسیدم
رشته دانشگاه
مهندسی برق
پاسخ : چگونه هسته یک سیتم عامل بنویسیم ...!

به نقل از DFT :
آخه کِ کِ من چی بگم به تو ؟
کسی که میخواد کاری کنه و خیلی عظیم کارش با گروه کار میکنه :|
بفهم اینو :|
اصن من غلط کردم خواستم به شما ها لطف کنم :|
کار گروهی مشخصه بهتر از کار تکیه در اون شکی نیست
ولی هسته لینوکس رو کی نوشت؟یه نفر بعد بقیه اومدند اونو کامل کردند تا یه سیستم عامل شد
بیخودی خودتو نگیر
ادب داشته باش منم نمیگم آدم خاصیم نه ولی حداقل در این مورد میدونم این سیستم عامل نیست مدرک هم دارم
اینو ببین:
http://www.eca.ir/forum2/index.php?topic=37852.0
مخصوصا فیلمش
این آقا یه مهندس عمرانه!
ولی همه چیزشو یه تنه درست کرده فقط چون وقتی اینو میساخته از ساختار هسته سیستم عامل خبری نداشته این کارش بعضی ویژگی های سیستم عامل رو نداره مثل مولتی تسک
+
به غیر از نرم افزار برد و ... رو خودش ساخته
پس با دو خط برنامه نمیشه گفت این سیستم عامله!!!
 

The Smith

کاربر فوق‌حرفه‌ای
ارسال‌ها
1,061
امتیاز
3,544
نام مرکز سمپاد
سلام ایران‌زمین
پاسخ : چگونه هسته یک سیتم عامل بنویسیم ...!

به نقل از SR :
کار گروهی مشخصه بهتر از کار تکیه در اون شکی نیست
ولی هسته لینوکس رو کی نوشت؟یه نفر بعد بقیه اومدند اونو کامل کردند تا یه سیستم عامل شد
بیخودی خودتو نگیر
ادب داشته باش منم نمیگم آدم خاصیم نه ولی حداقل در این مورد میدونم این سیستم عامل نیست مدرک هم دارم
اینو ببین:
http://www.eca.ir/forum2/index.php?topic=37852.0
مخصوصا فیلمش
این آقا یه مهندس عمرانه!
ولی همه چیزشو یه تنه درست کرده فقط چون وقتی اینو میساخته از ساختار هسته سیستم عامل خبری نداشته این کارش بعضی ویژگی های سیستم عامل رو نداره مثل مولتی تسک
+
به غیر از نرم افزار برد و ... رو خودش ساخته
پس با دو خط برنامه نمیشه گفت این سیستم عامله!!!
منم نگفتم سیستم عامله ! :)
 

SR

کاربر فوق‌حرفه‌ای
ارسال‌ها
604
امتیاز
1,157
نام مرکز سمپاد
شهید اژه ای 1
شهر
اصفهان
سال فارغ التحصیلی
00
مدال المپیاد
درست نخوندم به جایی نرسیدم
رشته دانشگاه
مهندسی برق
پاسخ : چگونه هسته یک سیتم عامل بنویسیم ...!

به نقل از DFT :
منم نگفتم سیستم عامله ! :)
آخه این هستش هم نمیشه!!!!
این میخواد چی کار کنه مثلا؟؟؟؟
اینا به نظرم من شبیه درایور میمونه تا هسته
 
وضعیت
موضوع بسته شده است.
بالا