- İnsanlar karmaşık olanla sadece karışık olanı ayırt eder. Karmaşıklık ilgi çekici görülürken, karışıklık zararlı kabul edilir. x86_64 CPU kurulum süreci ise çoğunlukla karışıktır.
- BIOS tarafından yüklenen bir önyükleme sektöründen CPU’nun 16 bit gerçek moddan 64 bit long mode’a nasıl geçirileceğini anlatır. Bu kurulum temeldir ve yapılması gereken daha çok iş vardır.
- Intel 64 ve IA-32 Architecture Software Developer’s Manual, bir assembler (
nasm kullanılır) ve QEMU gereklidir. x86 assembly ve nasm sözdizimini bilmek gerekir.
Başlangıç noktası: BIOS
- Sıfırlamadan sonra x86 CPU "gerçek mod"dadır. Bu mod 16 bit varsayılan işlenen boyutuna sahiptir. Segmentasyon kullanarak 1MB belleği adresleyebilir.
- BIOS’tan sonra çalıştırılan ilk kod önyükleme sektöründedir. BIOS, sistemde
0xaa55 ile biten ilk sektörü bulur ve ilgili önyükleme sektörünü 0x7c00 bellek adresine yükler.
- BIOS 512 bayt sağlar; bununla önyükleyicinin geri kalan kısmını bootstrap etmek gerekir.
Önyükleme sektörünü hazırlama
- Basit bir önyükleme sektörü kurup BIOS rutinlerini kullanarak ekrana bir mesaj yazdırır ve ardından durdurur. Böylece araçların çalıştığı doğrulanabilir.
- Assembly kodu ve Makefile kullanılarak önyükleme sektörü hazırlanır.
1. aşama – 2. aşamayı diskten yükleme
- Önyükleyici iki aşamaya ayrılabilir. 1. aşama, BIOS’un yüklediği her şey olan önyükleme sektörü kodudur. 1. aşamanın tek amacı 2. aşamayı belleğe yüklemektir.
-
- aşamada 16 bit gerçek moddan 32 bit korumalı moda geçilir. Korumalı modda BIOS rutinleri kullanılamaz. Diskten sektör yüklemek çok daha karmaşık hale gelir.
- BIOS kullanarak diske nasıl erişileceği açıklanır.
32 bit korumalı mod
- CPU, gerçek moddan (16 bit) korumalı moda (32 bit) geçirilir. Korumalı modda bellek koruması segmentasyon kullanılarak uygulanır.
- Korumalı moda geçmeden önce Global Descriptor Table (GDT) tanımlanmalıdır. GDT, bellekte ardışık bir yapı olarak tanımlanır.
- GDT’nin nasıl tanımlanacağı ve korumalı moda nasıl geçileceği açıklanır.
64 bit long mode
- Long mode’a geçmeden önce CPU korumalı modda olmalı ve paging etkinleştirilmelidir. Korumalı mod zaten ayarlanmıştır, ancak paging gerekir.
- Paging, sanal adres alanını, izinleri ve benzerlerini yönetmek için segmentasyonun yerini alır. Long mode’a geçiş için sayfa tablolarının nasıl oluşturulacağı açıklanır.
- Long mode geçişi için GDT’nin nasıl tanımlanacağı ve korumalı moddan long mode’a nasıl geçileceği açıklanır.
GN⁺ özeti
- Bu yazı, x86_64 CPU’yu 16 bit gerçek moddan 64 bit long mode’a geçirme sürecini ayrıntılı biçimde açıklar. Bu sayede önyükleyici ve işletim sistemi çekirdeği geliştirme konusundaki anlayışı artırabilir.
- BIOS, önyükleme sektörü, korumalı mod, long mode gibi çeşitli kavramları ele alır ve her aşama için gerekli assembly kodunu ve yapılandırma yöntemlerini sunar.
- Bu yazı, işletim sistemi geliştirmeyle ilgilenen kişiler için yararlıdır; özellikle x86 mimarisi hakkında derin bir anlayış sağlar. Benzer işlevlere sahip projeler arasında "Writing a Simple Operating System – from Scratch" bulunur.
1 yorum
Hacker News görüşleri