13 Nisan 2019 Cumartesi

bios: nerede baslar bu bilgisayarin hikayesi

merhaba arkadaslar,

bugunku yazimizda, bilgisayara ilk input umuzu verip, geriye yaslandiktan sonra ta ki ikinci input u muzu verene kadar(pc acilana kadar diyelim) neler oluyor, ne isler donuyor birlikte incelemeye calisicaz.

onceki yazimizda bir cpu bir ram ver, neyleyim gerisini minvalinde, en temel bilgisayar niteliginden bahsetmistik, bilgi islemek :D

ancak hepimizin tahmin edecegi gibi ramler uzerlerine gomulu calistirilabilir kod barindirmazlar. (yoksa nasil ram degistirecektik degil mi?) calisacak kodlari birilerinin oraya yerlestirmesi ve yuru ya kulum demesi gerekir.
iste tam olarak bu kisimdan, yani, kodun ram'e gelmesi(veya gelmeden calisabilirligini mumkun kilan mekanizmayi) ve yuklenen kodun neler yapacagindan bahsedicez.

bilgisayar icin bir CPU bir RAM cizip birakmistik, artik bu olayi cetrefillestirmenin vakti gelmedi mi?


evet bir anda asiri yukleme oldu gibi ama hayat da boyle degil mi zaten?:D

CPU ile RAM arasindaki iletisim kuzey koprusu denilen chipset tarafindan kontrol edilir ve yonetiliri.
diger baglantilarin efendisi ise, guney koprusudur.(3)

ancak RAM deki adreslerin hepsi aslinda RAMde degildir. bazi alanlar cevresel aygitlar icin ayrilir ve bu bolgelere yapilan yazma ve okuma islemleri kuzey koprusu tarafindan aslinda RAM'e degil bu cihazlara yonlendirilir.(1)
ne demek istedik,

linux da
cat /proc/iomem

windowsta
https://docs.microsoft.com/en-us/sysinternals/downloads/rammap

yardimiyla fiziksel ram in hangi kisimlarinin io device lari icin ayrildigini ve ne amacla hangi aygit icin ayrildigini gorebiliriz.

ben virtual kali den (tabi kali lan heckiriz :P :D) asagidaki ciktiyi aldim.

neyse bilgisayara gucu verelim

dedigimiz zaman CPU reset vektoru denilen(2) bir adresten komut okuyup onu islemeye calisacaktir.
bu adres 32bit bir intel islemci icin 0xFFFFFFF0 adresidir ve burdan okunup islenecek kodun koprucuklerimiz tarafindan, bios kodunun basi olacak yere bir ziplama olmasi gerekmektedir. (16 bytelik alanda baska ne yapilabilir zaten degil mi?) (BIOS kodu illa ki RAM de olmak zorunda degil, chipset belli alanlara ozel anlam yukler demistik unuttuk mu? Ancak RAM'e ROM daki BIOS kodu cekilmis de olabilir. BIOS Shadowing)

hemen ornekleyelim

CPU 0xFFFFFFF0 adresinden kod okumak ister,
bunu goren chipset, reset olduk lan deyip,
JMP 0xF0000 komutunu gonderir.
CPU artik 0xF0000 adresinden kod okumak ister,
bunu goren chipset, bura BIOS lan der ve okuma istegini BIOS kodunu cekecegi cihaza yonlendirir. (Sekil 1'deki kirmizi cizikli yola dikkat)

Bu noktada genelde chipset, performans sebeplerinden oturu yukarıda parantez icinde söylediğimiz BIOS shadowing yapar. Yani calistirilacak bios kodunu once RAM'e yazar ve buradan kod isletmeye(BIOS'u calistirmaya) devam etsin diye CPU'ya BIOS kodunu yazdigi adresi JMP komutuyla doner.
ornek yukarida zaten, degisen tek sey ise, chipset 0xFFFFFFF0 adresinden kod okunmak istendigi anda BIOS'u alip 0xF0000 adresine yazar. boylece bir daha Sekil 1'deki kirmizi cizikli yolu asmak zorunda kalmadan direk olarak BIOS ROM kodunu RAM den okur, yani hizlica calistirir.

bios kodu ne yapar?
bu sorunun cevabini internetin her yerinde bulabilirsiniz fakat biraz daha ayrintili konusmak gerekirse,
 - POST yani power-on self test yapar. bagli cihazlar calisiyo mu, ram de veya sunda bunda sikinti var mi diye bi kontrol eder.
 - Ekran kartinin BIOSunu calistirir. Bu amacla 0xC0000'a zıplar. Bu adres de yine io mapped bir adrestir. Referans icin yukarida kaliden aldigim ekran goruntusune bakabilirsiniz. 0xC0000-0xC9FFF Video ROM yazan satir.
 - Sirasiyla calistirilmasi gereken baska bios varsa calistirir.
»Bu noktada aslinda BIOS'un yapmasi gereken son bir adim kalmistir, bir isletim sistemi calistirmak.
 - Isletim sistemi boot etmek icin bootable aygıt aramaya baslar. sırasıyla disklere bakar (daha oncesinden bios a ayarlanmış sıra ile)
 - Buldugunda ise MBR alanını RAM'e yukler ve kontrol artık ona devredilir.

nedir bu MBR? (Master Boot Record)
yazilarin cok uzun olmamasi nedeniyle bu MBR konusunu diger yazimiza birakiyorum.