x86 mimarisi ve bios ile bootlama süreci ele alınarak anlatım yapılmıştır.
pc ayağa kalkarken işletim sisteminin kernelına nasıl teslim ediliyor,en sade biçimde anlatmaya çalıştım.
aşağıdaki resme bakıcak olursak "kernel" kısmına kadar geliniyor bu yazıda bundan bahsedilecek.
Bilgisayarınızı açmak için düğmeye bastığınızda ram içerisinde herhangi bir data/instruction(veri/emir) yoktur ve genelde bilgisayar dünyasında CPU genellikle gider ramin içindeki kodları dataları okur alır işler tekrar rame yazar bu işlem her bir kullanıcı tetiklemesinde böyle devam eder,
bilgisayarı ilk açtığınızda ram de herhangi birşeyin olmaması ve haliyle cpu içinde çalıştırılacak birşeylerin olmaması demek.
PC dizayn eden kişiler bu bilgisayar kapandığında ve tekrar açıldığında nasıl ayağa kaldırıcaz bu ölüyü diye düşünmüşler ve buna da boot süreci demişler.
memoryinin maplenişi....
PC açmak için power-on düğmesine bastığınızda sistemi tasarlayanlar CPU nun ilk bakması gereken yerin FFFFFF0 adresi olduğunu
bildirmişler.CPU tarafından buradaki instruction okunduğunda,CPU JMP BIOS yapması gerektiğini anlar,yani BIOS programına sıçrama yapar.
Bu arada hani sistem ilk açıldığında boştu diye düşünürseniz haklısınız öyleydi ama bu adresler bizim RAM adresimiz değil bu BIOS EEPROM(ramden farklı birşey öyle düşün) içerisinde saklıdır yani elektrik kesintisinden etkilenmeyen içine gömdüğünüz kodların aynen kaldığı,
fakat RAM ise aksine elektrik kesintisinden etkilenendir.
buradaki bilgiler sistem daha hızlı çalışsın diye genelde önce rame getirilir. Buna shadowing de deniliyor.
peki biosa sıçrama yaptık şimdi ne olucak,biosun yapması gereken önemli görevler var ama bizim burada bu kadar detaya girmemize gerek yok.
kısaca bahsetelim.
bios POST(Power-On Self-Test) dediğimiz bir süreci çalıştırır,bu iç cihazları
sisteme tanıtmak,CPUnun tüm iç/dış cihazlara erişebilmesini sağlamak,ve saire..
BIOSun halletiği bir başka birşey interrupt vector tablosu dediğimiz kesmelere karşı düşen servis programlarının başlangıc adreslerinin tutulduğu tabloyu RAM de gerekli yere yerleştirmek,bunları işletim sistemi daha sonra isterse ezebilir(üzerine yazabilir,ki genelde öyle de oluyor)
MASTER BOOT RECORD ??
şimdi BIOSun yaptığı bir diğer iş en önemlilerinden biri MASTER BOOT RECORD ya da MASTER
BOOT SECTOR ya da BOOT SECTOR ya da 0.sektör diyede bilinen sektörü alıp rame transfer etmek(Hard disk den rame) ve işler artık
buradan BIOSun olmadığı bir şekilde devam ediyor.
disk üzerinde MBR nasıl bir yerde duruyor diye kafamızda canlandırmak için alttaki resim yardımcı olabilir.
evet ne demiştik MASTER BOOT RECORD/MASTER BOOT SECTOR/BOOT SECTOR
bu sektör ne peki ilk olarak okunduğu için mi çok kıymetli ?evet aynen öyle önemli olmasa neden ilkinde bunu okusunlar.
bu sektörü bios okur ve ramin 0x7c000 adresinden itibaren yükler dedik.(dememişiz ama böyle oluyor)
master boot sectorün içeriğine bakalım.
Nedir bunlar ?
1.Partition Table
2.Bootstrap Code
3.Boot Signature
1.Partition Table
hemen partition table açıklayalım büyük ihtimalle buna yabancı değilsiniz.partition table içerisinde 4 adet primary partitions var.bunlar kısaca diskimizde bölümleme yaratmaktadır.sanırım herkes bir C disk alanına ve bir de D disk alanına sahip ve bazen de aynı pc ye iki işletim sistemi yüklüyoruz işte buradaki mantık diski bölmelere ayırmak.
özetleyecek olursak tek bir diski bölmelere ayırıyoruz,4 tane primary partition ile sınırlıyız.fakat herhangi bir şekilde 6 partitiona da diski bölebiliriz,çünkü sistem bize extended partition hakkı tanıyor yani 6 partition için 3 tanesi primary olsun bu durumda diğerini extended edip 3 tane de ondan logical partition yaratabiliriz.fakat kesinlikle bunlardan biri primary partition olmak zorunda.
bir de bu partition table entry(kayıtlarından) bahsetmek de fayda var bunların her biri 16 byte dan oluşan kayıtlar o halde 4 tane den toplamda 64 byte lık bir alan kaplamış oluyorlar.biz sadece bir entry alıp incelesek yeterli bizim için..
Partition 1 : 80 01 01 00 83 FE 3F 01 3F 00 00 00 43 7D 00 00 bunlar hex değerlerdir.
ilk byte 80h bu partitionın önyüklenebilir olduğunu,00 ise bunun önyüklenemez olduğunu söylüyor.demek ki bu değerden
bu partitionın önyüklenebilir olduğunu anlıyoruz.
01 01 00 ise bize bu partition silindir,kafa,sektör no bilgilerini vermektedir.
83 dosya sistemine ilişkin bir numaradır.(örneğin:Ext2, ReiserFS, FAT32, NTFS, )
FE 3F 01 : bu partitionın son sektörün için silindir,kafa,sektör bilgisidir.
3F 00 00 00 : bu partitionın ilk sektörünün lojik block data adresi
43 7D 00 00 : partitionın sektör sayısı
2.Bootstrap Code
MBR(Master Boot RECORD)nin ilk 440 bytenı bu bootstrap code alıyor.
active partition diyede bir kavram var bu elimizdeki partitionların hangisinden önyükleme yapılacağını belirlemek için kullanılan bir yöntem.şöyle düşünün elinizdeki makinede 4 partition var ama bize lazım olan hangisinin içerisinde işletim sistemi yüklü olduğu.işte bunu active partition belirliyor.
bunu anlattıktan sonra bootstrap kodu içinde birkaç birşey diyebiliriz.
örneğin geleneksel windowsun bootstrap kodunun yaptığı şey de partition table içerisinde active partition bulmak,ve boot sektörünü(partitionın ilk sektörü) memorye yüklemek ve oradan çalıştırmak..
linux içinse olaylar şu şekilde işliyor..
stage 1 boot loader(primary boot loader) master boot record'dan bios ile memory içerisine okunulur.
primary boot loader 512 bytedan daha az mbr içerisinde ve işi ise
stage 1.5 boot loaderını veya stage 2 boot loaderını yüklemektir.
stage 1.5 boot loaderı stage 1 boot loaderı tarafından memorye içerisine
okunur.( gnu tarafından stage 1.5 kaldırılmıştır) ve buradan stage 2 boot loaderına geçilir.
stage 2 boot loaderı(secondary boot loaderı) memorye okunur.
bu arayüz kullanıcıya hangi kernel veya işletim sistemi bootlanacaksa onu seçmesini sağlar,(kernela argüman geçirmede burada..)
ve secondary boot loader kernelı ramin içerisine yerleştirir..
GRUB menüsünde hangi işletim sisteminin başlayacağını belirlediğinde,onu memorye yükler ve makine kontrolünü o işletim sistemine verir.
3.Boot signature
Bu son iki byte ise boot drivelardan gerçekte hangi disk sürücünün bootable olduğunu bize bildirir.
BIOS amca burada BIOS boot sıra listesine bakar eğer bu değer hexal olarak 55 AA değerine eşitse evet doğru sürücü tercihi fakat değilse o zaman boot sıra listesindeki bir sonra device kontrol edilir.
peki oldu ki hiç bir device da bu değer eşleşmedi o zaman "No boot device is available" veya "Reboot and select proper boot device." gibi mesaj alabiliriz.
Boot Signature kısaca anlatmış olduk.
EOF
Hiç yorum yok:
Yorum Gönder