Windows un nasıl boot ettiğini hiç merak ettiniz mi?


Ana karta güç aktarıldığında ilk BIOS devreye girer ve diskin ilk sektöründe duran MBR ı okur. Burada belli bir alanda boot code umuz ve partisyon tablomuz vardır.
Bu boot code u BIOS fiziki belleğe yükler ve kontrolü ona aktarır.


Buradan itibaren Windows boot akışı başlar. Kontrolü alan bu boot sector kodu volümün format bilgisini ve bootmgr in lokasyonuna dair bilgileri tutar.
Boot code da bootmgr yi fiziki belleğe yükleyip ona kontrolü verir.


Bu aşamada kullanılan adresler fizikseldir. Yani tamamen fiziki bellekte çalışılır ve bu belleğin de sadece 1MB kullanılabilir. Bu ortama real-mode denilir. Bu BIOS ile uyumlu çalışılmasından kaynaklanır.


Real mode un verimsizliğinden dolayı, bootmgr ortamı protected-mode a geçirir. Yani 32bit adresleme ile 4GB fiziki bellek kullanılabilir ve page table lar oluşturarak paging başlatılır. Bu aşamada normal Widows moduna geçmişizdir ve bootmgr geri kalan kodunu da bu ortamda çalıştırmaya başlar.
Ancak diskler ve görüntü aygıtları vs. ile BIOS üzerinden görüşebilmek için bootmgr yine geçici real-mode a geçer. CPU ile BIOS fonksiyonları çağırmanın başka bir yolu yoktur.


Takiben bootmgr diskteki BCD yi okur. Eğer hibernationdan dönüyorsak, bu BCD de belirtilmiştir ve winresume.exe devreye girer. Birden fazla boot opsiyonu varsa, boot opsiyonları ekrana yazdırılır. Buradan sonra BCD winload.exe yi çağırır.


(ia64 sistemlerde kullanılan EFI donanımlarda (GPT den boot etmek için de EFI gereklidir), donanım zaten 64 bit genişliğinde diskten okuyabildiği için, donanım zaten BCD yi okuyarak boot a başlar. Legacy Bios daki 16 bit/1MB RAM/real-mode a da gerek kalmaz.)


Bu aşamada artık donanımın çok daha yüksek seviyeleri ile haberleşebiliriz ve winload ACPI BIOS u sorgular. Buradan tarih ve saat bilgisi yanında bütün donanımsal bilgilere erişiriz.
Sonra Kerneli (örneğin ntoskrnl.exe) ve HAL (hal.dll) yüklenir.
Gerekli aygıt sürücülerini yükleyebilmek için System hive ını yüklememiz gerekir (\System32\Config\System). Burada HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services altında start tipinde boot, yani 0 olan bütün sürücüleri yükleriz.


Burada artık Windows logosu gösterilir. Son olarak winload, Ntoskrnl.exe in KiSystemStartup kernel fonksiyonunu loader parameter block a pointer pass ederek çağırır, kernel in ön initializationı sonlanmış olur ve Kernel devralır.

Bu blokta partisyon bilgileri, fiziki belleği tanımlayan tabloların bilgileri, belleğe yüklenmiş olan Hardware ve System hive ların bilgileri, yüklenmiş olan boot aygıt sürücülerin bilgileri ve bir takım başka detaylar tutulur.


Şimdi bootun Phase 0 ı başlar. Interruptlara bu aşamada izin verilmez ve Kernel HAL beraberinde kendi internal initializationlarını başlatır. Burada BCD yine önem kazanır, çünkü hangi konfigürasyonla sistemin boot edileceği burada tutulur; örneğin bellek ayarları gibi. Birçok adımdan sonra Executive de oluşturulmaya başlar.
Yani kitabın evvelki bölümlerde anlatılan kernel detayların çoğu oluşturulur. Memory manager dan sonra, object monitor, security reference monitor ve plug and play manager gibi servisler çalışmaya başlarlar. Donanımsal bütün detaylar oluşturulmuştur.


Sonra Phase 1 e geçeriz. Sorumlu initilization thread i başka thread tarafından preempt edilememesi için prioritysi 31 e alınır. Interruptlara da artık donanımsal tablolar oluşturulmuş oldukları için izin verilir.
Bu aşamada siyah ekrandan sonra animasyonlu Logo gösterilir.
Power manager devreye alınır. Bütün cpu lar kullanıma açılır. Ayrıca artık executive object tipleri (semaphore, event, mutex, timer) kullanıma açılır.


Yani bu aşamada phase 0 da başlatılmış executive servisler artık gerekli rutinlerini oluştururlar.
Ntdll.dll sistemin adres bölgesine maplenir.
Ve bunların sonunda Kernel initialization, session manager ı (smss.exe) devreye alarak bitirilir.


Smss in en önemli görevlerinden biri Windows Subsystemini başlatmaktır. Sessionları 0 ile başlayarak yaratır ve sonuçta wininit.exe , csrss.exe, win32k.sys ve winlogon.exe leri yükler.
Bu aşamada örneğin ekran çözünürlüğü 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 başlatır. Bunlar session 0 da olur, session 1 de winlogon.exe logonui.exe yi yükler.
Bu aşamada servisler de başlatılmış olur.


Kullanıcı logon olduktan sonra last known good bu başarılı boot konfigürasyonu ile değiştirilir. Son olarak da kullanıcıya spesifik policyler devreye alınabilir.


Peki shutdown edince nasıl ilerleriz? Windows boot, shutdown ve troubleshooting ile ilgili bütün detayları Windows Internals 5th ed. in 13 ci bölümü ‘Startup and Shutdown’ altında bulabilirsiniz: http://technet.microsoft.com/en-us/sysinternals/bb963901
İyi okumalar.


Başar Güner
Sr. Support Engineer, Microsoft
clip_image001