الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

نقاش حول تصميم نظام تشغيل

مغلقرائج
بدأه وسام سوفت وير في 19 يوليو 2005 · 161 رد · 29,153 مشاهدة · في ارشيف قسم C/C++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

احب احى كل من هو قائم على هذا المنتدى الرائع وكل الاعضاء الكرام

وانا كا عضو جديد فعندى سؤال

عايز اعرف بالظبط ماهو ال Kernel وايه وظائفه وعلاقته بنظام التشغيل وكمان ازاى اقدر اصممه ؟؟؟

لانى صراحة سوف ابدا بتصميم نظام تشغيل وعايز ابقى ملم ببعض الاساسيات

فمن يتطوع بالاجابة ؟؟؟؟؟

وشكرا

#2

السلام عليكم

نظام تشغيل ؟؟؟

http://en.wikipedia.org/wiki/Kernel_(computer_science)

حاول في المرة القادمة استخدام Google

MPSI/MP* - CPR Tanger

#3

kernel مترجمات vb لعمل kernel

أخى العملية مش سهلة وحتاجة عمل وتعلم وخبرة فى البرمجة

وصبــــــــــــــــــــــــــــــــــــــر

Muhammad Allam

Computer Science

@Resource(MappedURL="My Blog" )

#4

يا اخواني ..الحماس حلو ..

بس فيه فرق بين انك تقفز درجتين اوثلاث من السلم وبين انك تقفز من اول السلم لاخره ...

يعني بدون فلسفة .

لو كنا نعرف شي ولو 20% من نواة النظام ,, كان ما شاهدتنا هنا ... كان الحين انا جالس قدام مكتب بيل قيتس ..

يعني تخيل عندك جملة مثل هذه

#$!$$$@$@#$#^T$%#@ وش معناها .. :)

اولا احترف السي والاسمبلي .. واعرف كيفية عمل نظام التشغيل ... وايضا kernel هو النواة ... وهذا يعني اي تغيير فيها يؤثر على النظام بأكمله .. اذا كنت متحمس ... ومحترف بالسي .. فتوجه الى اللينكس .. وقم بتطوير نظام اللينكس ,,, يعني تقدر تسوي فيه ماتريد .,, وتعدل على النواة وكل شي .. ليش تبدأ من الصفر .,,,واذا تعلمت واحترفت .. ابدأ من الصفر ,,, :(

وارجو ان لاتزعل علينا من الكلام اللي يحطم ... لاننا كنا نتمنى ما تتمنى .. لكن فيه ناس علمونا الطريق

الصح .. وحياك الله ...

تم تعديل هذه المشاركة بواسطة الشـمري في 19 يوليو 2005 في 05:41

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#5
اقتباس
لانى صراحة سوف ابدا بتصميم نظام تشغيل وعايز ابقى ملم ببعض الاساسيات

اقرأ الموضوع الاخر جيدا ..

يابني .. عايز تلم ببعض الاساسيات قبل ان تبدا بتصميم نظام التغشيل بتاعك؟ ليه؟ هي لعبة؟

اساسيات ايه و بتاع ايه ..

علشان تفكر مجرد تفكير في عمل نظام تشغيل مش لازم تعرف اساسيات .. لازم تعرف كل حاجة! و اقصد كل شي! كل شي!

عن جد .. انا لا امزح, لان نزظام التشغيل يعمل كل شي من الصفر.

#6

ياجماعة شكرا على تفاعلكم فى الموضوع

بس ليه ما نكون فريق يبدا يصمم ال Kernet من الصفر ونعمل الموضوع مثبت داه بعد اذن الادارة

عشان كلنا نبدأ نستفيد ونفيد الاخرين ونطلع بحاجة حلوة

#7

بالطبع اخى فكره جميله وانا اول المنضمين مع ملاحظه ان المشروع

الاخير الجماعى لم ينجح "وكان برنامج الرسام" ربما لصعوبته واظن

ان انه حيث ان مشروع الكرنال اسهل فاكيد سننجح !!!!!!!!!

تصميم كافة انواع المواقع البرامج بافضل الاسعار

aaasamy7@hotmail.com

الاسكندريه -مصر

ت:5749981

#8

ليست سهلة كما تضن و كلام حسن صحيح و أيظا تحتاج إلى معرفة لغة التجميع مع لغة C و لكنك إم مارستها فستكون شبه سهلة .

عموما يمكنك إستعمال أبسط مثال عن نظام Hello World و مصدره على الرابط هنا

و لكن ما قلت هو ابسط نظام ( أي مجرد فكرة عن كيفية برمجة أنظمة التشغيل) يتم تشغيله مباشرة من الـ floppy

و من الأفضل أن تتفحص بعض أنظمة التشغيل المفتوحة المصدر مثل نظام visopsys

و موقع آخر جيد

http://www.osdever.net/

و لتعلم أن برمجة أنظمة التشغيل تحتاج إلى خبير C و ASM

تم تعديل هذه المشاركة بواسطة GameDev4Arab في 19 يوليو 2005 في 21:22

#9

ياجماعة انا عندى استعداد تام للموضوع داه بشكل جدى

#11

الاحلام جيده لكن اذا كان لدى الحالم صبر ليحقق حلمه فانه ربما

بعد طول العمل لتحقيق هذا الحلم يلوم نفسه على سوء اختياره

ويسأل نفسه:

لماذا اخترت صعود الجبل لاثبات ذاتى كان يكفى صعود لذلك تل صغير؟!!

تصميم كافة انواع المواقع البرامج بافضل الاسعار

aaasamy7@hotmail.com

الاسكندريه -مصر

ت:5749981

#12

ياجماعة اهو نبدا ونسمى بسم الله

ها اول حاجة عايز رابط ببرامج الاسمبلى والسى

وياريت كتب

#13
اقتباس

قطاع الإنطلاق Boot Sector

(الجزء 1)

بسم الله الرحمن الرحيم

برمجة نظام التشغيل ككل مسار تطوير عنده بداية. لكن أجمل ما في هذه البداية أنها تتطابق مع بداية تشغيل الحاسب. إذ أن أول جزء يطور من نظام التشغيل هو قطاع الإنطلاق. الذي يعتبر أول برنامج ينفذ في نظام التشغيل بعد ال Bios.

ما هو قطاع الانطلاق ؟

قطاع الانطلاق هو ملف حجمه 512 byte. يكتب في أول قطاع من قرص مرن ، قرص صلب أو قسم (Partition) من قرص الصلب .و يمكن وضعه في خادم (Server) لكي ينطلق بواسطته جهاز مستخدم (Client).

يحتوي قطاع الانطلاق على ثلاثة أقسام :

قسم البيانات و المعلومات الخاصة بنظام الملفات المثبت على الدعامة أو قسم منها.

قسم البرنامج الذي سينفذ بعد ال Bios.

توقيع الصلاحية ( Bios Boot Signature ) : يدل على أن القطاع هو قطاع انطلاق و ليس قطاع عادي. و هو WORD مكتوب في نهاية القطاع يساوي 0xAA55، أي أن الByte رقم 510 = 0x55 و الByte  رقم 511 = 0xAA ( الترقيم يبدأ من العدد 0 ).

مراحل انطلاق الحاسب:

1) بعد الضغط على زر تشغيل الحاسب يقوم هذا الأخير بتنفيذ برنامج ال Bios الموجود في ذاكرة ROM . يكون التنفيذ بعد نسخ ال Bios من الذاكرة ROM إلى الذاكرة المركزية RAM.

2) برنامج ال Bios يقوم بإعداد بياناته الداخلية و بالتحقق من سلامة المعدات و الأجهزة و تسمى هذه العملية بـ POST

(Power On Self Test). ثم يبحث في قائمة الدعامات التي تحتوي على قطاع الانطلاق . هذه القائمة قد تحتوي مثلا على:

ترتيب الدعامة اسم الدعامة شرح

1 floppy أول قرص المرن  (:a)

2 IDE0 أول قرص صلب (:c)

3 CDROM أول قرص مضغوط

3) يقرأ القطاع من أول دعامة متوفرة و يتأكد من وجود توقيع الصلاحية. إذا وجد التوقيع الصحيح يقوم بتحميل القطاع إلى العنوان 0000:7C00 و الموافق للعنوان المادي 0x7C00 .

4) يضع ال Bios رمز الدعامة التي تم تحميل القطاع منها في السجل DL. رموز بعض الدعامات هي:

الدعامة رمزها

القرص مرن رقم 1 0x00

القرص الصلب رقم 1 0x80

القرص الصلب رقم 2 0x81

5) في النهاية يقوم ال Bios بقفز طويل (long jump) نحو العنوان 0000:7C00 بغرض تنفيذ البرنامج الموجود في قطاع الانطلاق.

هذا الجدول يلخص محتوى السجلات قبل تنفيذ برنامج قطاع الانطلاق:

السجلات المحتوى

DL رمز دعامة الانطلاق

CS 0x0000 و هو عنوان قسم التعليمات الجديد.

IP 0x7C00 و هو قيمة الانتقال داخل قسم التعليمات

جميع السجلات الأخرى محتوى غير معرف

6) هنا يأتي دور قطاع الانطلاق للتحكم في الحاسب.

كتابة أول قطاع انطلاق:

سنحاول الآن إن شاء الله كتابة قطاع انطلاق بسيط يكتب جملة "! Salam Alikom" ( "السلام عليكم" ) ثم يتوقف.

يجب أن نلاحظ أولا أن السجلات IP CS DL هي الوحيدة التي تحتوي على قيم معرفة. لكننا نحتاج إلى وسط تنفيذي لبرنامج قطاع الانطلاق.

يتكون الوسط التنفيذي من:

قسم تعليمات البرنامج يشار إليه بالثنائية CS:IP. و هو الآن معرف بـ  (0000:7C00).

قسم بيانات البرنامج يشار إليه بواسطة السجل DS.

قسم بيانات خارجية يشار إليه بواسطة السجل ES.

كومة البرنامج ( Stack ) يشار إليها بواسطة الثنائية SS:SP. حيث أن SS هو قسم الكومة و SP هو رأسها.

في ما يخص DS و ES يكفي اختيار القسم 07C0:0000 أي أن ES = DS = 0x07C0 . و هو نفسه العنوان 0000:7C00 .

أما الكومة فتختارها تبدأ في العنوان 9000:0000 أي أن SS = 0x9000 و نختار SP = 0xFFFF لنحصل على كومة بحجم 64kb.

هذا الرسم يلخص تقسيم الذاكرة المناسب للوسط التنفيذي لبرنامج قطاع الانطلاق:

بعد توفير الوسط التنفيذي نقوم برسم جملة "! Salam Alikom".

لا نستطيع استعمال الوظيفة 9h للانقطاع 21h لأنها خاصة بنظام التشغيل MS-DOS بل سنكتب إجراء صغير يرسم الجمل ويعتمد على الوظيفة 0Eh من الانقطاع 10h الخاص بال Bios. هذه الوظيفة ترسم حرف واحد على الشاشة. الجدول التالي يصف هذه الوظيفة.

محتوى السجلات عند مناداة الانقطاع

الوصف

السجل

رقم الوظيفة و هو 0Eh.

AH = 0Eh

رمز الحرف في نظام الترميز ASCII. AL

لون الحرف.

BL

النتائج

لا شيء

و في النهاية نوقف البرنامج بواسطة دوران غير منتهي. و هذا بالقفز إلى نفس البطاقة ( Label ).

البرنامج النهائي مكتوب بصيغة NASM و هو الملف boot.s . هذا هو محتواه:

[bITS 16]

  استعمال تعليمات بحجم 16 bit.

 

EntryPoint: بداية برنامج قطاع الانطلاق.

    mov ax,07c0h

    mov ds,ax

    mov es,ax

  تحضير الوسط التنفيذي لبرنامج قطاع الانطلاق. نضع في السجلين DS و ES رقم القسم 0x07C0 عن طريق السجل AX.

العنوان 07C0:0000 يمثل مكان وجود ملف قطاع  الانطلاق في الذاكرة.

 

    mov ax,09000h

    mov ss,ax التصريح بكومة تبدأ قاعدتها من القسم 0x9000.

    mov sp,0ffffh

  وضع العدد 0xFFFF في SP للحصول على كومة بحجم 64kb.

    mov si,Salam

    call ShowMsg نضع في السجل SI قيمة انتقال الجملة "! Salam Alikom" داخل قسم البيانات.

مناداة إجراء رسم الجمل.

k_loop:

    jmp k_loop

حلقة مفرغة تهدف فقط إلى توقيف البرنامج.

 

ShowMsg: بداية الإجراء ShowMsg (رسم جملة).

    push ax

    push bx حفظ السجلين AX و BX في الكومة لأنهما سيستعملان في الإجراء.

 

.loop_start:

    lodsb بداية حلقة تعليمات رسم جملة.

و ضع Byte من العنوان [DS:SP] في السجل al. ( هو رمز الحرف المراد رسمه ).

    cmp al,0

    je .loop_end التحقق من عدم نهاية الجملة بالعدد 0.

في حالة al = 0 نقفز إلى نهاية حلقة التعليمات.

    mov ah,0Eh اختيار وظيفة رسم حرف ( الوظيفة رقم 0xE التابعة للانقطاع 0x10).

    mov bx,07h اختيار اللون الأبيض.

    int 10h مناداة الانقطاع 0x10 الخاص بال Bios.

    jmp .loop_start القفز إلى بداية حلقة التعليمات.

.loop_end: نهاية حلقة التعليمات.

    pop bx

    pop ax استرجاع قيم AX و BX.

 

    ret

  نهاية إجراء رسم الجمل. و العودة إلى المنادي.

 

Salam db "Salam Alikom !",13,10,0

  التصريح بالجملة المراد كتابتها على الشاشة.

 

times 510-($-$$) db 0

  التصريح بـ: 510-($-$$) Byte ذات القيمة 0 للحصول على 512 Byte في الملف المنتج و هو حجم قطاع انطلاق.

$ : يرمز إلى مكان العبارة (Expression) الحالية داخل الملف الذي سينتج.

$$ : يرمز إلى بداية القطعة (Section) الحالية من الملف الذي سينتج. 

DW 0AA55h التصريح بتوقيع الصلاحية (Bios Boot Signature).

لصناعة قطاع الانطلاق نكتب الأمر التالي في سطر الأوامر (Command Line - Shell):

nasm -f bin -o boot boot.s

هذا الأمر يصنع الملف boot ذو الحجم 512 Byte.

التوجيه "o boot-" يأمر Nasm بصناعة ملف اسمه "boot" . أما التوجيه "f bin-" فتأمر Nasm بصناعة ملف خالي من كل معلومات إضافية بل يحتوي فقط على تعليمات البرنامج مع بياناته.

كتابة قطاع الانطلاق على القرص المرن:

لتجربة قطاع الانطلاق الذي كتبناه يكفي كتابته في أول قطاع من قرص المرن ثم إعادة تشغيل الجهاز لينطلق من هذا القرص.

ضع قرص مرن في قارئ القرص المرن. (كل الملفات الموجودة فيه ستفقد).

للكتابة في Linux:

من أفضل ما يتميز به Linux هو انك تستطيع استعمال القرص المرن على شكل ملف اسمه "dev/fd0/".

نكتب في سطر الأوامر مايلي:

dd if=boot of=/dev/fd0

للكتابة في Windows:

يكفي استعمال البرنامج الصغير المرفق "write.com".

نضع الملف "write.com" في نفس مجلد الملف "boot" ثم نكتب في سطر الأوامر:

write

الآن اعد تشغيل الجهاز. سينطلق الجهاز هذه المرة من القرص المرن و يكتب الجملة "! Salam Alikom".

يمكنك الآن القول بأنك قمت بخطوة صغيرة جدا و لكنها مهمة في طريق برمجة نظام تشغيل. الحمد لله.

الملف"boot.s":

[bITS 16]

EntryPoint:

      mov ax,07c0h

      mov ds,ax

      mov es,ax

      mov ax,09000h

      mov ss,ax

      mov sp,0ffffh

      mov si,Salam

      call ShowMsg

k_loop:

      jmp k_loop

ShowMsg:

      push ax

      push bx

.loop_start:

      lodsb

      cmp al,0

      je .loop_end

      mov ah,0Eh

      mov bx,07h

      int 10h

      jmp .loop_start

.loop_end:

      pop bx

      pop ax

      ret

      Salam db "Salam Alikom !",13,10,0

      times 510-($-$$) db 0

      DW 0AA55h

 

الملف"write.s":

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;

; file : write.s

;

; Synopsis:

; --------

; This small program writes a file named "boot" on the first sector

; of a floppy, commonly known as the boot sector.

;

; To produce the com file "write.com" , type :

; nasm -f bin -o write.com write.s

;

; Author: Hamoud Mourad

; hmdz@alkhawarezmi.com

;

; Visit: www.alkhawarezmi.com

;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[bits 16]

org 100h

section .text

start:

      ; open a file

      mov ax,0x3D40

      mov dx,file_name

      int 21h

      jc error1

      ; save file handle

      mov [handle],ax

      mov dx,msg_ok1

      call show_msg

read_file:

      mov ah,0x3F

      mov bx,[handle]

      mov cx,512

      mov dx,buffer

      int 21h

      jc error2

      cmp ax,512

      jne error2

      write_boot:

      mov ah,0

      mov dl,0

      int 13h

      mov ax,ds

      mov es,ax

      mov ax,0x0301

      xor dx,dx

      mov cx,0x0001

      mov bx,buffer

      int 13h

      jc error3

      mov dx,msg_ok2

      call show_msg

close_file:

      ; close the file

      mov ah,0x3E

      mov bx,[handle]

      int 21h

exit:

      mov ax,0x4c00

      int 21h

error1:

      mov dx,msg_error1

      call show_msg

      call exit

error2:

      mov dx,msg_error2

      call show_msg

      call close_file

error3:

      mov dx,msg_error3

      call show_msg

      call close_file

show_msg:

      push ax

      mov ah,0x09

      int 21h

      pop ax

      ret

section .data

      file_name db "boot",0

      msg_ok1 db "file : boot --> opened",13,10,'$'

      msg_ok2 db "file : boot written on floppy successfully",13,10,'$'

      msg_error1 db "failed to open file : boot",13,10,'$'

      msg_error2 db "can't read 512 byte from file : boot",13,10,'$'

      msg_error3 db "can't write 512 byte on floppy",13,10,'$'

section .bss

      buffer resb 512

      handle resw 1

 

هذا الملف هو برنامج المصدر لـ: "write.com".

لصناعة الملف "write.com" نكتب في سطر الأوامر :

nasm -f bin -o write.com write.s

_____________________________

C Language && Windwos_API

_____________________________

#14

اللهم صلى على النبى ياجدع ايه الحلاوه دى اهو داه الشغل ولا بلاش

تمام جدااااا جدا هو داه المطلوب دانت مش ممكن لا لا لا كده نبدأ الشغل صح

طيب ياسيدى ها عايزين نكمل المشروع سوا يعنى نخلص تصميم البوت ونبدأ نصمم الوجهة الرسومية للنظام

وانا مش عايز استخدم نواة الكرنل لانه كده يبقه على الجاهز احنا عايزين نعمل حاجة من نفسنا نتعب فيها ونستفيد من اهل الخبرة واللى عايز ينضم معنا يتفضل

الخطوة التالية هيه نحن افترضنا ان البوت اشتغل يبقى كده جه دور تعرف البرنامج على مكونات الحاسب ( الهارد دسك والفلوبى والاسطوانات ) بحيث نقدر نتعامل معها من خلاله والا منقدرش نقول عليه نظام تشغيل لانه يفترض النظام انه يتحكم فى كافة اجزاء الحاسب وكمان بحيث احنا عايزين النظام يشتغل على نظام FAT 32 بدل NTFS

المطلوب فى الخطوة التالية :

امكانية التعامل مع محركات الاقراص بتعرف النظام عليها

طيب دلوقتى لو تقدر تضع فى المرفقات المترجمات المستخدمة فى الشغل سواء السى او الاسمبلى عشان يبقى اعضاء الفريق المصمم الاداوات بشكل كامل

ارجو الرد بشكل سريع وشكرا لك اخى حياك الله

#15

ارجو من الادارة تثبيت الموضوع تحت اسم تصميم نظام تشغيل من الصفر حتى الواجهة الرسومية

#16

الادوات ياعزيزى ستكون :

مترجم لغة السى : turbo c++ 3.1

وهو قادر على انشاء الانظمة بجدارة لكن ياحسارة لا احد يود مساعدتك وكله بيتريق واخد الموضوع بهظار لا عليك

مترجم لغة الاسمبلى nasm او masm مش حتفرق الاتنين بيوصلو للهارد والذاكرة

_____________________________

C Language && Windwos_API

_____________________________

#17

اولا نشكر الادارة على تثبيت الموضوع وهى الخطوة الاولى الى النجاح من خلال هذا المنتدى الرائع

واشكرك اخى على متابعتك للموضوع

اما بالنسبة لــ لكن ياحسارة لا احد يود مساعدتك وكله بيتريق واخد الموضوع بهظار

احنا ملناش دعوة بيهم لان اللى عايز يوصل لشيء حيوصله باذن الله وطبعا انا اوانت اول مشتركين فى الموضوع وياريت نجمع اكبر عدد من المبرمجين عشان نستفيد ونفيد الاخرين وكمان نطلع هذا النظام الجديد الى النور

بالنسبة للمترجمات لو تقدر تضع وصلة بالتحميل يكون افضل

وانا جاهز معك وربنا يسهل الامور

وشكرا

#18

اخى وسام ايه اخبارك هل تحتاج شىء انا فى الخدمة

_____________________________

C Language && Windwos_API

_____________________________

#19

يا خى انا مستنيك على نار

نكمل المسيرة

#20

ايه عاوز منى ايه

قول متتكسفش

_____________________________

C Language && Windwos_API

_____________________________

#21

ياسيدى عايز المترجمات عشان ابدأ الشغل

#22

انا عندى المترجم الاصدارة 2.1 الخاص بالسى بلس

#23

ينفع بس لو كان من بورلاند

_____________________________

C Language && Windwos_API

_____________________________

#25

هذا ايملى

wesam_31@hotmail.com

هذا الموضوع مغلق.

مواضيع مشابهة