Windows Debugging 213

Windows un nasil boot ettigini hiç merak ettiniz mi?

Ana karta güç aktarildiginda ilk BIOS devreye girer ve diskin ilk sektöründe duran MBR i okur. Burada belli bir alanda boot code umuz ve partisyon tablomuz vardir.

Bu boot code u BIOS fiziki bellege yükler ve kontrolü ona aktarir.

Buradan itibaren Windows boot akisi baslar. Kontrolü alan bu boot sector kodu volümün format bilgisini ve bootmgr in lokasyonuna dair bilgileri tutar.

Boot code da bootmgr yi fiziki bellege yükleyip ona kontrolü verir.

Bu asamada kullanilan adresler fizikseldir. Yani tamamen fiziki bellekte çalisilir ve bu bellegin de sadece 1MB kullanilabilir. Bu ortama real-mode denilir. Bu BIOS ile uyumlu çalisilmasindan kaynaklanir.

Real mode un verimsizliginden dolayi, bootmgr ortami protected-mode a geçirir. Yani 32bit adresleme ile 4GB fiziki bellek kullanilabilir ve page table lar olusturarak paging baslatilir. Bu asamada normal Widows moduna geçmisizdir ve bootmgr geri kalan kodunu da bu ortamda çalistirmaya baslar.
Ancak diskler ve görüntü aygitlari vs. ile BIOS üzerinden görüsebilmek için bootmgr yine geçici real-mode a geçer. CPU ile BIOS fonksiyonlari çagirmanin baska bir yolu yoktur.

Takiben bootmgr diskteki BCD yi okur. Eger hibernationdan dönüyorsak, bu BCD de belirtilmistir ve winresume.exe devreye girer. Birden fazla boot opsiyonu varsa, boot opsiyonlari ekrana yazdirilir.
Buradan sonra BCD winload.exe yi çagirir.

(ia64 sistemlerde kullanilan EFI donanimlarda (GPT den boot etmek için de EFI gereklidir), donanim zaten 64 bit genisliginde diskten okuyabildigi için, donanim zaten BCD yi okuyarak boot a baslar. Legacy Bios daki 16 bit/1MB RAM/real-mode a da gerek kalmaz.)

Bu asamada artik donanimin çok daha yüksek seviyeleri ile haberlesebiliriz ve winload ACPI BIOS u sorgular. Buradan tarih ve saat bilgisi yaninda bütün donanimsal bilgilere erisiriz.
Sonra Kerneli (örnegin ntoskrnl.exe) ve HAL (hal.dll) yüklenir.
Gerekli aygit sürücülerini yükleyebilmek için System hive ini yüklememiz gerekir (\System32\Config\System). Burada HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services altinda start tipinde boot, yani 0 olan bütün sürücüleri yükleriz.

Burada artik Windows logosu gösterilir. Son olarak winload, Ntoskrnl.exe in KiSystemStartup kernel fonksiyonunu loader parameter block a pointer pass ederek çagirir, kernel in ön initializationi sonlanmis olur ve
Kernel devralir.
Bu blokta partisyon bilgileri, fiziki bellegi tanimlayan tablolarin bilgileri, bellege yüklenmis olan Hardware ve System hive larin bilgileri, yüklenmis olan boot aygit sürücülerin bilgileri ve bir takim baska detaylar tutulur.

Simdi bootun Phase 0 i baslar. Interruptlara bu asamada izin verilmez ve Kernel HAL beraberinde kendi internal initializationlarini baslatir. Burada BCD yine önem kazanir, çünkü hangi konfigürasyonla sistemin boot edilecegi burada tutulur; örnegin bellek ayarlari gibi. Birçok adimdan sonra Executive de olusturulmaya baslar.
Yani kitabin evvelki bölümlerde anlatilan kernel detaylarin çogu olusturulur. Memory manager dan sonra, object monitor, security reference monitor ve plug and play manager gibi servisler çalismaya baslarlar. Donanimsal bütün detaylar olusturulmustur.

Sonra Phase 1 e geçeriz. Sorumlu initilization thread i baska thread tarafindan preempt edilememesi için prioritysi 31 e alinir. Interruptlara da artik donanimsal tablolar olusturulmus olduklari için izin verilir.
Bu asamada siyah ekrandan sonra animasyonlu Logo gösterilir.
Power manager devreye alinir. Bütün cpu lar kullanima açilir. Ayrica artik executive object tipleri (semaphore, event, mutex, timer) kullanima açilir.

Yani bu asamada phase 0 da baslatilmis executive servisler artik gerekli rutinlerini olustururlar.
Ntdll.dll sistemin adres bölgesine maplenir.
Ve bunlarin sonunda Kernel initialization, session manager i (smss.exe) devreye alarak bitirilir.

Smss in en önemli görevlerinden biri Windows Subsystemini baslatmaktir. Sessionlari 0 ile baslayarak yaratir ve sonuçta wininit.exe , csrss.exe, win32k.sys ve winlogon.exe leri yükler.
Bu asamada örnegin ekran çözünürlügü VGA dan normale çevrilir.
Wininit.exe service control manager services.exe yi , local security authority subsystem lsass.exe yi ve local session manager lsm.exe yi baslatir. Bunlar session 0 da olur, session 1 de winlogon.exe logonui.exe yi yükler.
Bu asamada servisler de baslatilmis olur.

Kullanici logon olduktan sonra last known good bu basarili boot konfigürasyonu ile degistirilir. Son olarak da kullaniciya spesifik policyler devreye alinabilir.

Peki shutdown edince nasil ilerleriz? Windows boot, shutdown ve troubleshooting ile ilgili bütün detaylari Windows Internals 5th ed. in 13 ci bölümü ‘Startup and Shutdown’ altinda bulabilirsiniz: https://technet.microsoft.com/en-us/sysinternals/bb963901
Iyi okumalar.

Basar Güner
Sr. Support Engineer, Microsoft
clip_image001