BOOTING JEST TWARDY
Uruchamianie ... cóż ... to naprawdę najtrudniejsza część. Za każdym razem, gdy komputer się uruchamia, zasadniczo spotyka się na nowo. Zapoznaje się z różnymi częściami i na każdej napotkanej nabiera zdolności. Ale musi podciągać się za swoje własne paski startowe, że tak powiem, od początku za każdym razem.
Przy projektowaniu procesu rozruchu sztuką jest stopniowe uruchamianie maszyny. Twój boot musi być szybki i niezawodny, a za każdym razem muszą to być obie rzeczy w zupełnie nieznanym środowisku . Nie zapuszczę się nawet na rozmowę w trybie rzeczywistym / chronionym (co nie znaczy, że nawet mogłem) , ale przy rozruchu wiele się dzieje. Gdy komputer asymiluje różne elementy za każdym razem, gdy robi to stopniowo. Prawdopodobnie najważniejszym z nich jest przejście od wykonywania kodu pokładowego do wykonywania kodu na dysku, lub innymi słowy - jądra exec. To wtedy oprogramowanie układowe (pozornie) poddaje się systemowi operacyjnemu.
Wiele lat temu tak nie było. Kiedyś BIOS był tak naprawdę podstawowym wejściem / wyjściem - zwykłe programy wywoływały oprogramowanie układowe w celu rysowania ekranu i uzyskiwania dostępu do dysku. Były to tak zwane przerwania - stare kapelusze najlepiej pamiętają je ze względu na dreszczyk zachwytu, który często znajdowali, przypisując IRQ do nowej matrycy kropkowej lub USR.
INT13H
Jest to seria funkcji 13H przerwania ( lub INT
montażu ), które BIOS oferuje jako usługi dostępu do dysku. Są one nadal używane nawet dzisiaj w systemach BIOS w procesie rozruchu, aby przejść z oprogramowania układowego na dysk.
System BIOS sprawdzi kilka pierwszych bajtów każdego znalezionego dysku i wyszuka wzorzec, który rozpoznaje jako główny rekord rozruchowy ( lubMBR
) . Jest to de facto dziesięcioletni standard i zawiera trochę surowego, wykonywalnego pliku binarnego, który jest zapisywany na czele dysku. MBR oznacza dysk BIOS jako bootowalny. Przestanie sprawdzać, kiedy go znajdzie, a więc praktycznie wszystko, co dostajesz, bez sprytnych sztuczek. Kiedy go znajdzie, mapuje go do pamięci i wykonuje (w trybie rzeczywistym, ale wciąż tam nie idę) .
Wykonany MBR prawie na pewno nie jest twoim jądrem systemu - 512 bajtów (daj lub bierz) byłoby w tym dziale całkiem bezużyteczne. Prawdopodobnie jest to program ładujący - program zaprojektowany specjalnie w celu przezwyciężenia jednego z wielu ograniczeń adresacyjnych BIOS-u - szczególnie, że w ogóle nie rozumie żadnego systemu plików.
Kiedy bootloader odczytuje rzeczywiste jądro i wykonuje go w pamięci (jak wszyscy modlimy się za każdym razem) , prawdopodobnie zrobi to, pytając BIOS poprzez INT13H
przerwanie połączenia. A jeśli tak się nie stanie - wielu bardziej pomysłowych programów ładujących zamontuje systemy plików w konwencjonalnym sensie i wykona kod w inny sposób - wtedy jest bardzo mało prawdopodobne, że bootloader jest tak fantazyjny bez jednego INT13H
lub dwóch. Często bootloadery muszą ładować się same - lub różne ich etapy - ponieważ 512 przydzielonych im bajtów najpierw nie odpowiada nawet ich potrzebom.
KURCZAK I JAJKO
Wszystko to jest okrągłym sposobem omawiania dysku, wiem, ale w tym momencie powinno być całkowicie jasne, że głównym problemem - można by nazwać go kurczakiem i jajkiem - jest dostęp do dysku zawierającego instrukcje programu o tym, jak uzyskać dostęp do dysków . Kluczem do tego problemu jest oprogramowanie układowe - i nadal działa na bardzo różne sposoby, nawet w systemach EFI - i, najsłabsze lub nie, oprogramowanie układowe jest najważniejszym ogniwem w łańcuchu rozruchowym.
Widzisz, gdy jądro się uruchomi i wszystkie jego niezliczone procedury dostępu i kontroli sprzętu się zainicjują, wszystkie te problemy jakby znikają (lub przynajmniej się nieco zmieniają) , ponieważ współczesne systemy operacyjne przejmują pełną kontrolę nad systemem, ale dopóki tego nie zrobią, limity systemu rozciągają się tylko na tyle, na ile pozwala oprogramowanie wewnętrzne. To wiele mówi - BIOS niewiele się zmienił od 8086. INT13H
Wywołanie to oryginał 8086. Tak, były (niezliczone) rozszerzenia i oczywiście hacki, ale innowacje ...?
LEPIEJ I LEPIEJ
Większość zmian w BIOSie to w najlepszym razie zwykłe bandaże. Kiedyś był to dysk twardy, który musiał być fizycznie zmapowany - do różnych i specyficznych aspektów jego geometrii odwoływano się, gdy dane były na nim przechowywane lub pobierane. Ostatecznie konwencjonalny dysk twardy urósł do rozmiaru, który tego zabraniał. Nawet tylko abstrakcyjna mapa zawierała zbyt wiele informacji, aby BIOS mógł sobie z tym poradzić. Ponieważ może działać tylko w trybie rzeczywistym, BIOS jest ograniczony do 1 MB na rejestr pamięci. Rozszerz mapę cylindra dowolną większą lub spraw, aby dowolna z jej właściwości była większa, niż można by ją rozwiązać za pomocą tak wielu bitów, a BIOS zostanie dosłownie stracony - poza granice.
Bariera ta została napotkana i przełamana wiele razy. Za każdym razem, gdy mapa jest wyodrębniana i kodowana w nowy, sprytniejszy i mniej dokładny sposób. Dlatego w dzisiejszych czasach dosłownie niemożliwe jest, aby BIOS dokładnie odwzorował dysk. Logiczne blokowanie adresowania jest obecnie de facto standardem, chociaż niektóre tłumaczenia cylindra / głowicy / sektora (lub CHS) są nadal konieczne. To, co oprogramowanie układowe na płycie głównej straciło na dokładności / odpowiedzialności, takie rozszerzenia wyodrębniły i dodały obowiązki oprogramowania układowego dysku, aby wypełnić luki.
To jest ta gra w kotka i myszkę, o której mowa w twoim pytaniu. Kiedy BIOS nie rozumie dysku przekraczającego pewien punkt ze względu na jego rozmiar, wtedy wszelkie dane, które możesz chcieć pobrać dla ciebie podczas rozruchu - takie jak bootloader lub jądro - prawdopodobnie lepiej nie znajdować się poza tym punktem. Stąd /boot
pochodzi.
MOŻE BYĆ W rzeczywistości LEPSZY
W dzisiejszych czasach takie rzeczy, na szczęście, stały się nieistotne z powodu śmierci BIOS-u. Nadchodziło 30 lat, ale w ostatnich latach został w dużej mierze zastąpiony przez standard UEFI (lub EFI 2.0) . UEFI zapewnia montowanie od pierwszej chwili, inicjuje się w trybie chronionym, zawiera własny bootloader, zapewnia trwałą pamięć zmienną pamięci flash przy ponownym uruchomieniu, jest zalecany do obsługi kilku zetabajtów lub cokolwiek innego na dysk ... i wiele więcej jeszcze. Jest daleki od ideału, ale jest ogromną poprawą w stosunku do swojego poprzednika.
Nawet argumenty za wyspecjalizowanymi programami ładującymi obejmującymi szyfrowanie dysku lub warstwowe systemy plików są bez znaczenia, jeśli weźmiesz pod uwagę, że wszystkie one muszą zostać obsłużone przez jądro systemu operacyjnego, a jeśli masz zapewnione podłączenie przy starcie, zawsze masz jasne wykonano go (szczególnie biorąc pod uwagę, że jądro Linuksa w domyślnej konfiguracji jest programem wykonywalnym EFI we własnym zakresie) .
Oddzielna /boot
partycja prawdopodobnie nie powinna nadmiernie ciebie dotyczyć, a jeśli korzystasz z systemu EFI, prawdopodobnie i tak masz już partycję systemową EFI, ponieważ jest to wymagane do uruchomienia trybu EFI.