ÇİZİM ZOR
Önyükleme ... iyi ... bu gerçekten en zor kısmı. Bir bilgisayar her önyükleme yaptığında temel olarak kendini yeniden karşılar. Çeşitli bölümleriyle tanışıyor ve karşıladığı her biri için yetenek kazanıyor. Ancak, konuşması için her seferinde bir başından itibaren kendi önyükleme noktalarıyla kendisini yukarı çekmek zorunda.
Bir önyükleme işlemi tasarlarken, işin püf noktası, makineyi aşama aşama devreye sokmaktır. Botunuz hızlı ve güvenilir olmalı ve her zaman tamamen bilinmeyen bir ortamda her iki şey olmalıdır . Gerçek / Korumalı moddaki bir sohbete bile girmeyeceğim (ki söyleyebileceğim anlamına gelmez) , ancak açılışta çok şey oluyor. Bilgisayar çeşitli bileşenlerini her seferinde özümsettiği için bunu adım adım gerçekleştirir. Muhtemelen bunlardan en önemlisi, yerleşik kod yürütmekten diskteki kod çalıştırmaya veya başka bir deyişle çekirdeğin çalıştırılmasına geçiştir. Bu, bellenimin (görünüşte) işletim sistemine teslim olduğu durumdur .
Yıllar önce bu durum böyle değildi. Eskiden BIOS, Temel Giriş / Çıkış'dı - düzenli programlar, ekran çizme ve diske erişim gibi şeyler için bellenime çağrı yapardı. Bunlara kesinti denirdi - eski şapkalar, yeni nokta-matrisleri veya USR'leri için IRQ atamalarında sıkça buldukları hazların heyecanları için onları en iyi şekilde hatırlayabilir.
INT13H
Bu, BIOS'un disk erişimi için servis olarak sunduğu 13H fonksiyon dizisinin kesilmesidir ( ya INT
da montaj dilinde ) . Bunlar bugün bile firmware'den diske atlamak için boot işleminde BIOS sistemleri için kullanılmaktadır.
Bir BIOS sistemi bulduğu her diskin ilk birkaç baytını kontrol edecek ve Ana Önyükleme Kaydı ( veyaMBR
) olarak tanıdığı bir model arayacaktır . Bu, onlarca yıllık fiili bir standarttır ve diskin başına yazılmış bir miktar ham, çalıştırılabilir ikili dosya içerir. MBR, BIOS diskini önyüklenebilir olarak işaretler. Ne zaman bir tane bulduğunu kontrol etmeyi bırakacak ve pratik olarak bir tane akıllıca hile yapmaksızın elde edeceğiniz tek şey. Bir tane bulduğunda onu belleğe eşler ve yürütür (Gerçek modda, ama ben hala oraya gitmiyorum) .
Yürütülen MBR neredeyse kesinlikle sistem çekirdeğiniz değildir - 512 bayt (ver veya al) bu bölümde oldukça işe yaramaz. Bu muhtemelen bir önyükleyicidir - özellikle BIOS'un birçok adresleme sınırlamasından birinin üstesinden gelmek için özel olarak tasarlanmış bir programdır - özellikle de herhangi bir dosya sistemini anlamadığı için.
Bootloader asıl çekirdeği okuduğunda ve onu bellekte çalıştırdığında (hepimiz her seferinde dua edeceğimiz için) muhtemelen bunu BIOS'a bir INT13H
kesinti çağrısı ile sorarak yapacaktır . Olmazsa - birçok meraklısı önyükleyici, dosya sistemlerini geleneksel anlamda monte eder ve kodu başka bir şekilde yürütür - o zaman, önyükleyicinin bir INT13H
veya iki olmadan çok süslü olması çok az olasıdır . Genellikle önyükleyiciler kendileri - veya kendilerinin çeşitli aşamalarını - kendilerine yüklüyorlar çünkü ilk tahsis edilen 512 bayt kendi gereksinimlerine bile uymuyor.
TAVUK VE YUMURTA
Bunların hepsi diski tartışmanın bir yoludur, biliyorum, ama bu noktadan itibaren, temel problemin - buna bir tavuk-yumurta türü diyebilir - program talimatlarını içeren diske ulaşmakta olduğu açıkça anlaşılmalıdır. disklere nasıl erişileceği hakkında . Bu sorunun anahtarı bellenim - ve EFI sistemlerinde bile çok farklı şekillerde olmaya devam ediyor - ve en zayıf olanı bellenim zincirindeki en önemli bağlantıdır.
Görüyorsunuz, çekirdek çalıştırıldığında ve donanıma erişim ve denetim için tüm sayısız yordamları başladığında, bu sorunların tümü ortadan kalkar (ya da en azından bir şekilde değişir) , çünkü modern işletim sistemleri bir sistemi tam olarak kontrol ediyor, ancak, sistemin sınırlarını yapana kadar, yalnızca üretici yazılımının izin verdiği ölçüde uzar. Bu çok şey söylüyor - BIOS 8086’dan bu yana pek değişmedi. INT13H
Çağrı bir 8086 orijinali. Evet, (birçok) uzantı ve tabii ki kesmeler oldu, ama yenilikler ...?
DAHA İYİ VE DAHA İYİ
BIOS'taki değişikliklerin çoğu en iyi ihtimalle yalnızca bandaj oldu. Sabit disk olması için fiziksel olarak haritalanması gerekiyordu - verilerinin depolandığında ya da ondan alındığında geometrisinin çeşitli ve özel yönlerine değiniliyordu. Sonunda geleneksel sabit disk bunu yasaklayan bir boyuta ulaştı. Sadece soyut harita bile bir BIOS'un idare edebileceği kadar fazla bilgi değildi . Sadece Gerçek Modda çalışabileceği için, BIOS her bir kayıt başına 1 MB ile sınırlıdır. Silindir haritasını bundan daha büyük bir şekilde şişin ya da özelliklerinden herhangi birini bu kadar çok bitte ele alınabilecek olandan daha büyük hale getirin ve BIOS tam anlamıyla sınırlarını aştı.
Bu engel birçok kez karşılandı ve kırıldı . Her harita, daha yeni, daha akıllı ve daha az doğru bir şekilde soyutlanıp kodlandığında. Ve bu günlerde bir BIOS'un bir sürücüyü doğru şekilde eşlemesi tam anlamıyla imkansız. Mantıksal Blok Adresleme şu an fiili standarttır, ancak bazı Silindir / Baş / Sektör (veya CHS) çevirileri hala gereklidir. Ana kart üretici yazılımının doğruluk / sorumluluk açısından kaybettiği şey gibi, bu uzantılar soyutlanmış ve boşlukları doldurmak için disk üretici yazılımının sorumluluklarını eklemiştir.
Sorunuzda referans verilen bu kedi-fare oyunudur. BIOS, büyüklüğü nedeniyle belirli bir noktanın ötesindeki bir diski anlayamadığında, önyükleme sırasında sizin için alabilmesini isteyebileceğiniz herhangi bir veri (örneğin bir önyükleyici veya çekirdek gibi) muhtemelen bu noktanın ötesinde bulunmasaydı. Burası nereden /boot
geldi?
MAYBE GERÇEKTEN DAHA İYİ
Bugünlerde böyle şeyler, neyse ki, BIOS'un ölümü ile ilgisiz hale getirildi. 30 yıl oldu, ancak son birkaç yıl içinde büyük ölçüde UEFI (veya EFI 2.0) standardıyla değiştirildi. UEFI, ilk dakikadan itibaren bir bağlantı sağlar , Korumalı Mod'da başlatır, kendi önyükleyicisini içerir, yeniden başlatmaya devam eden flash bellek değişken depolaması sağlar, bazı umpteen zetabayt veya disk başına ne olursa olsun ... Başka. Mükemmel olmaktan uzak, ancak selefine göre çok büyük bir gelişme.
Disk şifreleme veya katmanlı dosya sistemlerini içeren özel önyükleyicilere yönelik argümanlar bile, bunların hepsinin yine de işletim sistemi çekirdeği tarafından ele alınması gerektiğini düşündüğünüzde düz düşer ve önyüklemede bir montaj sağlanmışsa , yürütmek için vurdu (özellikle Linux çekirdeğinin varsayılan yapılandırmasında, kendi başına bir EFI tarafından çalıştırılabilir olduğunu göz önünde bulundurarak) .
Bu yüzden ayrı bir /boot
bölüm muhtemelen sizi fazla ilgilendirmemelidir ve eğer bir EFI sistemindeyseniz, zaten EFI modunu başlatmak için bir gereklilik olduğundan, zaten zaten bir EFI-sistem bölümünde bir analogunuz var.