W jakim trybie działają 64-bitowe komputery z procesorami Intel w sektorze rozruchowym?

12

Wiem, że w przypadku starszych maszyn, takich jak 286, pierwsze 512 bajtów załadowanych z pierwszego sektora dysku rozruchowego do 0000: 7C00 w pamięci uruchomiono w 16-bitowym trybie rzeczywistym, ale co z nowoczesną architekturą 64-bitową?

Edycja: Myślę, że to złe pytanie po zastanowieniu się nad tym. Autor programu ładującego decyduje, z jakich instrukcji montażu należy korzystać, prawda? Sprzęt robi po prostu to, co mu powiedziano. Zatem moje pytanie powinno brzmieć: z jakiego trybu korzystają główne programy ładujące system operacyjny, takie jak Windows 7, Mac OS X (najnowszy) i GRUB na komputerach 64-bitowych?

mring
źródło

Odpowiedzi:

12

Wszystkie obecne komputery kompatybilne z x86 (w tym także architektura x64, zarówno Intel, jak i AMD, ale nie Itanium) wykonują kod sektora rozruchowego w trybie rzeczywistym x86 , dokładnie tak jak oryginalny komputer IBM ponad 20 lat temu. To nie jest tryb jądra, to oryginalny tryb segmentacji bez ochrony pamięci, wielozadaniowości lub poziomów uprawnień do kodu.

Jeśli zdobędziesz stację dyskietek, włóż na nią MS-DOS (lub FreeDOS ) i utkniesz w dzisiejszym komputerze, rozpocznie się rozruch.

Kod rozruchowy ma za zadanie przełączyć się w tryb chroniony, skonfigurować ochronę pamięci itp. Tak więc przypuszczenie jest częściowo słuszne. Program ładujący rozpoczyna wykonywanie jako tryb rzeczywisty x86 i przełącza się w tryb chroniony, ładuje i zaczyna faktycznie uruchamiać jądro systemu operacyjnego w trybie „jądro” (pierścień 0).

Aby uzyskać więcej informacji, możesz odwiedzić artykuł w Wikipedii na temat uruchamiania systemu Windows NT , który zawiera sporo szczegółów na ten temat.

haimg
źródło
haimg, dzięki za ten link i wyjaśnienie. @Deshe, przepraszam, że zabrałem najlepszą odpowiedź.
dniu
Teraz jest czas na edycję tego, w przeciwnym razie nie zgadzasz się z własną odpowiedzią :-)
Daniel Beck
13

co z nowoczesnymi architekturami 64-bitowymi?

To zależy od oprogramowania wbudowanego w nowoczesną maszynę 64-bitową z nowoczesną architekturą 64-bitową. haimgodpowiedź byłaby taka, jak pięć do sześciu lat temu dla świata x86, ale jest obecnie nieaktualna dla świata x86.

Stare oprogramowanie układowe PC / AT

Niektóre z tych nowoczesnych komputerów 64-bitowych mają stare oprogramowanie układowe w stylu PC / AT. Jak zauważono w innych odpowiedziach, ładują i uruchamiają program ładujący z sektora nr 0 płyty w prawie taki sam sposób jak PC / AT. Jest to stary proces ładowania komputera PC / AT.

Nowe oprogramowanie układowe EFI

Inne nowoczesne 64-bitowe maszyny mają nowe oprogramowanie układowe EFI. Te nie załadować program bootstrap z sektora # 0 tarczy w ogóle . Są ładowane przez menedżera rozruchu EFI podczas ładowania i uruchamiania aplikacji ładującej EFI . Takie programy są uruchamiane w trybie chronionym. To jest proces ładowania EFI.

Oprogramowanie wewnętrzne EFI ogólnie przełącza się na tryb chroniony w ramach kilku instrukcji wychodzenia z resetowania procesora. Przejście do trybu chronionego odbywa się wcześnie w tak zwanej „fazie SEC” inicjalizacji oprogramowania EFI. Technicznie, 32-bitowe i większe procesory x86 nawet nie uruchamiają się w trybie rzeczywistym, ale w tak zwanym potocznie trybie nierealnym . (Początkowy deskryptor segmentu CSrejestru nie opisuje konwencjonalnego mapowania w trybie rzeczywistym i jest tym, co czyni go „nierealnym”).

Jako takie, można powiedzieć, że te systemy EFI nigdy wejść w tryb rzeczywisty właściwego w ogóle, gdy ładowanie początkowe natywnie do bootloadera EFI (czyli gdy nie wykorzystują moduł obsługi kompatybilności ), ponieważ oni przełączyć z trybu nierzeczywistym bezpośrednio do trybu chronionego i odtąd pozostań w trybie chronionym.

JdeBP
źródło
Łącze do procesu ładowania początkowego wydaje się być uszkodzone / martwe. Nie mogę znaleźć zamiennika.
slm
1
A teraz znam twoje imię patrząc na adresy URL 8-). Nie próba szpiegowania nie mogła nie zauważyć.
slm
Myślę, że przeniosłeś rzeczy z ntlworld, czy to prawda?
slm
Możliwy zamienny adres URL strony 1. - jdebp.eu/FGA/pcat-boot-process.html . Mój boże ppl skopiuj / wklej swoje A'er wszędzie. Nawet ta wikipedia ma cytowany A'er - en.wikipedia.org/wiki/Talk%3AReal_mode .
slm
1

O ile mi wiadomo, kod rozruchowy zawsze działa w trybie jądra.

Po pierwsze, nic nie jest w stanie zdecydować, którego trybu użyć, ponieważ jest uruchamiany z sektora rozruchowego, po prostu dlatego, że są to pierwsze instrukcje wykonywane przez oprogramowanie układowe. Kod nie ma możliwości ustawienia instrukcji, które są dla niego dostępne przed jego uruchomieniem. Zatem z założenia zestaw montażowy dostępny dla kodu w sektorze rozruchowym jest z góry określony przez architekturę.

Gdyby wybrano do tego jakikolwiek tryb nieuprzywilejowany, nigdy nie byłoby możliwe użycie instrukcji z wyższych trybów uprzywilejowanych, co prawie wymusza fakt, że kod rozruchowy działa z najbardziej dostępnym trybem uprzywilejowanym.

Deshe
źródło
1

Podręcznik Intela Podręcznik programowania systemu Tom 3 325384-053US Styczeń 2015:

2.2 TRYBY DZIAŁANIA

Procesor przechodzi w tryb adresu rzeczywistego po włączeniu zasilania lub resecie.

Dla kopnięć ładny schemat z instrukcji:

wprowadź opis zdjęcia tutaj

GRUB uruchamia systemy operacyjne z wieloma systemami w trybie chronionym. Specyfikacja Multiboot 0.6.96 Stan maszyny :

„CR0” Bit 0 (PE) musi być ustawiony.

Nie jestem pewien co do GRUB i x86_64.

Ciro Santilli
źródło
GRUB uruchamia systemy operacyjne zgodne ze specyfikacją Multiboot w trybie chronionym. Dotyczy to * BSD, ale o ile wiem, Linux nie przestrzega tej specyfikacji i robi swoje. Podczas uruchamiania systemu operacyjnego zgodnego ze specyfikacją Multiboot konfiguracja GRUB używa multibootsłowa kluczowego; dla systemu Linux, nie są dedykowane linux, linux16oraz w wersji UEFI z GRUB, linuxefisłów kluczowych, mówiąc GRUB użyć Linux konkretny protokół rozruchu.
telcoM,
@telcoM fair fair
Ciro Santilli 16 改造 中心 法轮功 六四 事件