/i/Yazılım

Umuyoruz ki geleceğin yazılımcıları bu altinciden çıkacak!
    başlık yok! burası bom boş!
http://wiki.osdev.org/Global_Descriptor_Table
  1. 1.
    +4
    Ekrana metin girmeyi anladıysanız şimdi de biraz daha mimari kısımlara geçelim.

    x86 mimarisinde (386, 486, 586, 686, ... ) bellek yönetimi biraz değişik. 32 bit mod gelmeden önce sadece 16 bit kaydediciler vardı. Fakat işlemcilerin adres bacağı 20 bitti. Yani 1 MB'lık alana erişebilecekken sadece 64 KB'lık bir alana erişebiliyorlardı.

    Bunu "Segmentasyon" adı verilen bir yöntemle çözdüler. Ve Segment:Offset adres modeliyle.

    Segment:Offset adres modeli iki tane 16 bitlik kaydedici kullanıp 20 bitlik adres elde etmeye yarıyordu. Segment * 16 + Offset formülüyle gerçek bellek adresi hesaplanıyordu.

    Mesela B800:0000 segment:offset adresi bellekte B8000'a, yani text belleğine denk gelir.

    (B800 * 16 + 0 = B8000) (bkz: 16 lı sayı formatı / hekzadesimal)

    Ya da C000:A200 segment:offset adresi bellekte CA200 adresine denk gelir.

    (C000 * 16 + A200 = CA2000)

    Segmentasyon ile kullanılabilmek için ayrıca gs, ss, fs, ds, cs, es adında 6 tane kaydedici (register) eklendi.

    Daha sonra 16 bit ve 32 bit korumalı modun gelmesiyle, bu sistemin yerini GDT (bkz: http://wiki.osdev.org/Global_Descriptor_Table) aldı.

    Bunu kurmak için bellekte bir GDT hazırlamanız ve lgdt (Adres) assembly komutu ile bunu işlemciye yüklemeniz gerek. Fakat bununla yetmiyor. GDT'nin tamamen yüklenebilmesi için yukarıdaki bahsettiğim cs hariç tüm segment kaydedicilerine 0x10 (16) değerini vermeniz lazım:

    mov 0x10, %ax
    mov %ax, %gs
    mov %ax, %es
    ...

    Sonra da ljmp $0x08, $Fonksiyon ile sisteme geri dönmeniz gerek.

    (bkz: http://wiki.osdev.org/GDT_Tutorial)

    Sıradaki ders de IDT hakkında olacak.

    işletim sistemi geliştirmek için Bran's Kernel Development Tutorials adında harika bir kaynak var. Ona da bakın, fakat baştaki djgpp derleyicisiyle alakalı kısmı uygulamayın.

    (bkz: http://www.osdever.net/bk...v/Docs/gettingstarted.htm)

    Edit: Ders 6'da bitirmeyi planlıyorum. Ders 6'ya kadar birçok temel şeyden bahsederim. Sonra normal programlamayla alakalı derslere başlarım.
    ···
   tümünü göster