IBM PC Uyumlu Bilgisayarlarda Açılış İşlemleri

Açılış işlemleri bilgisayar mimarisine göre değişiklik gösterir. Burada IBM PC mimarisinin açılış işlemleri anlatılacaktır.

Bilgisayara güç verildiğinde CPU'nun RESET pini özel bir elektronik devre sayesinde setlenir ve CS, EIP gibi kaydedicilere ilk değerleri atanır. Sonra 0xFFFFFFF0 adresi kod segmente yerleştirilir ve bu kısımdaki emirler çalıştırılır. Bu adres ROM (Read Only Memory) denilen bellek çiplerine haritalanmıştır. ROM, BIOS (Temel Giriş/Çıkış Sistemi) denilen programı içermektedir. BIOS, MS-DOS gibi bazı işletim sistemlerinin kullandığı pekçok kesme (interrupt) servisini içerir. BIOS, öncelikle POST (Power On Self Test) denilen işlemi gerçekleştirir. Yani bütün belleği ve cihazları hatalara karşı tarar, test eder. Kullanıma sunulan cihazları bulur ve düzgün çalışıp çalışmadıklarını kontrol eder. Sonra donanımları başlatır. Buna donanımın yüklenmesi de denilebilir. Bütün bu kontrollerden sonra işletim sistemini arar. Bulduğu ilk ortamdan yükleyerek çalıştırır. BIOS bilgilerinde değişiklik yapılarak açılışın hangi cihazdan yapılacağı belirlenebilir. Çoğu bilgisayarda F1 veya DEL tuşları BIOS bilgilerini değiştirme ekranını getirir. Açılış; disket, sabit diskten, CD sürücü, ağ kartı gibi değişik ortamlar üzerinden yapılabilir.

Linux BIOS servislerini kullanmaz.

BIOS işletim sisteminin tamamını yüklemez. Yalnızca ilk sektördeki kod parçasını yükler. Bu sektöre Boot (Açılış) sektörü denir. Açılış sektörü 512 byte’tır ve son iki byte’ı 0xAA55 olmalıdır. Bu açılış imzasıdır (boot signature). Eğer BIOS açılış imzasını bulamaz ise ROM’da kayıtlı sıra ile bir sonraki cihaza geçer.

Boot sektör kabaca şu şekilde gözükür:


0x0000: 0x00XX adresine jump emri (0x00XX’de boot strap bulunmaktadır)
.......
0x00XX: Boot strap programı başlangıcı
0x01FE: 0xAA55 (boot imzası)

Açılış sektöründeki kod parçasına Bootstrap Loader (Bootstrap Yükleyicisi) denir. Bootstrap, işletim sisteminin bir kısmını çalıştırılmak üzere sistem belleğine taşıyan programdır. Böylece kontrolü işletim sistemine aktarır. Aynı zamanda bir kısım çekirdek veri yapılarını oluşturabilir.

BIOS, açılış yükleyiciyi bellekte 0x00007C00 adresinden başlayan kısma yükler ve bu adrese atlayarak (jump) bootstrap çalıştırılır.

Aşağıda çok basit bir bootstrap örneği görülmektedir:


; BOOT.ASM
; Basit bir bootstrap

dongu:
	jmp dongu

times 510-($-$$) db 0      ; Dosyanin 510 byte’ini 0 ile doldur
dw 0AA55h                  ; Son iki byte AA55 (açilis imzasi)

Boot sektörü bunlardan başka diskin fiziksel yapısını belirleyici çeşitli parametreler, iz (track) sayısını ve her izdeki sektör sayısın da içerir. Bu parametreler boot sektör içinde yeri önceden bilinen bir yerdedir. Boot kaydı yüklendiği zaman BIOS bu parametreleri bilinen konumundan kolayca okur.

Yukarıdaki boot sektör biçimini verirken 0x00XX diye gösterdiğimiz bootstrap programı başlangıç adresi Linux için 0x003E, MS-DOS için 0x001E’dir.

Bir floppy disketten boot ettirmek çok basit bir işlemdir. Disketin ilk sektörü belleğe yüklenir ve çalıştırılır. Ancak sabit disktten boot ettirmek bölümlendirme nedeni ile biraz karışıktır. MBR yukarıda bahsettiğimiz gibi bölüm tablosu ve küçük bir bootstrap programı içerir. Windows 98 gibi işletim sistemleri bölüm tablosunda bölümün başlatılabilir olduğunu gösterir aktif bayrağını setler. Açılış sırasında aktif bayrağı olan bölümden işletim sistemini yükler. Bu yöntemle sadece aktif bayrağı olan bir bölüm yüklenebilir. Linux için yazılan LILO (Linux Loader) bu yöntemlere göre çok gelişmiş olup açılabilir disk bölümleri arasında seçim yapmanızı sağlar. Böylece istediğiniz disk bölümündeki işletim sistemini yükleyebilirsiniz.

Boot sektördeki bootstrap programı çok basittir ve temel işlemleri yaparak diğer sektörlerde kayıtlı çok daha gelişmiş bir işletim sistemi yükleyici programa dallanır. Sabit diskler varsayılandan (tek parça olmasından) farklı olarak bölümlendirilmiş (partition) olabilir. Bu durumda her bir bölüm yukarıda bahsettiğimiz gibi kendi başına bir disk olarak düşünülür. Sabit diskler en fazla dört gerçek (birincil) ve dörtten fazla mantıksal bölüme ayrılabilir. Mantıksal bir sürücü eğer açılabilir (bootable) özellikte ise 0. mantıksal sektörü boot sektör olarak kabul edilir. Bölümlendirilmiş bir diskte 0. kafa, 0. iz, 1. sektör (ilk mantıksal disk sektörü) boot sektörden çok bölümleme sektörü içerir. Bu sektöre MBR (Master Boot Record) denir ve sabit diskin nasıl mantıksal olarak bölümlendirildiğinin bilgisini içerir. Bilgisayar güç verildiğinde en başta da bahsettiğimiz gibi bu bölümdeki kod çalışır. Bölümlendirilmiş bir disk 446 byte’lık bootstrap programı içerir. Bütün bir disk ise yalnızca bootstrap programına dallanan (0x00XX adresine) bir jump emri içerir. Bootstrap programından sonra 64 byte’lık bölümleme tablosu (partition table) gelir. Bu tablo dört bölüm için bölüm başlangıç sektörü, bitiş sektörü, bölümdeki sektör sayısı gibi bilgileri içerir.

LILO iki bölümden oluşur. Bunun nedeni boot sektörün 512 byte ile sınırlı olmasıdır. İlk bölümü boot sektörde olup bellekte 0x7C00 adresine yüklenir. Bu küçük bölüm önce kendisini 0x09A000 adresine kopyalar, daha sonra da ikinci parçasını 0x09A200 adresinden başlayacak şekilde belleğe alır. Diskte açılış yapabilecek bölümleri tespit edip kullanıcının seçimine sunar. Seçilen bölümün boot sektörü RAM'e yüklenir ve RAM'den çalıştırılır.

Bootstrap programı bittiğinde çekirdek (kernel) CPU’yu supervisor moda geçirerek başlar.

Temmuz 2003

Barış Şimşek
http://acikkod.org