Współczesne procesory x86 po resecie rozpoczynają pracę w stanie związanym z trybem rzeczywistym 8086. Intel potwierdza taki stan dla procesorów Intel 64, a dokumentacja AMD opisuje podobne zachowanie — cytuje ją XDA Developers. To odziedziczony punkt startu, a nie pełna emulacja 8086. Intel XDA Developers

Ma to znaczenie, bo firmware musi przeprowadzić procesor do trybu potrzebnego systemowi, a tradycyjny rozruch dodatkowych rdzeni wciąż korzysta z mechanizmu uruchamiania wywodzącego się z trybu 16-bitowego.

Co oznacza start w trybie rzeczywistym?

W konwencjonalnym modelu trybu rzeczywistego adres powstaje z wartości segmentu pomnożonej przez 16 i dodanej do przesunięcia: (segment × 16) + offset. Dwa 16-bitowe składniki dają 20-bitowy adres i nominalną przestrzeń 1 MiB. Ten wzór opisuje typowe adresowanie w trybie rzeczywistym, nie każdy szczegół resetu współczesnego procesora.

XDA Developers podaje, że współczesne procesory Intel i AMD pobierają pierwszą instrukcję spod adresu FFFFFFF0h — 16 bajtów poniżej granicy 4 GiB. To specjalny stan resetu z ukrytym stanem segmentu kodu, a nie zwykły adres wyliczany według modelu 8086. XDA Developers

UEFI nie zmienia tej architektury resetu. Zmienia sposób uruchamiania firmware’u i systemu: firmware przechodzi dalej, a program ładujący systemu na komputerze z UEFI nie musi działać w trybie rzeczywistym. Sam procesor jednak zaczyna od stanu resetu opisanego dla x86. Intel XDA Developers

Ukryte rejestry segmentowe komplikują obraz

Anglojęzyczny tutorial Daedalus Community pokazuje kod konfigurujący GDT i programowe przejście x86 z trybu rzeczywistego do chronionego.

Tryb rzeczywisty bywa skrótowo opisywany jako „emulacja 8086”, ale to niepełny obraz. Rejestry segmentowe mają widoczną część, czyli selektor, oraz ukryte atrybuty. Jak wyjaśnia OS/2 Museum, załadowanie rejestru zmienia selektor i bazę, natomiast limity oraz część atrybutów mogą pochodzić z deskryptora. Dlatego zachowanie procesora zależy też od stanu, którego nie widać w samym selektorze. OS/2 Museum

To ma praktyczne znaczenie przy przełączaniu trybów. W odpowiedzi na konkretny problem z QEMU uczestnik forum OSDev.org nullplan wyjaśnił, że sam daleki skok nie czyści zachowanych atrybutów segmentów. W opisanym przypadku zalecił załadowanie 16-bitowych deskryptorów kodu i danych jeszcze w trybie chronionym, przed dokończeniem powrotu do trybu rzeczywistego. OSDev.org

Tutorial Daedalus Community pokazuje konfigurację tabeli deskryptorów globalnych (GDT) i programowe przejście z trybu rzeczywistego do chronionego. Film jest po angielsku.

Dodatkowe rdzenie nadal korzystają z tradycyjnego startu

W tradycyjnym mechanizmie procesor wysyła do dodatkowego rdzenia sygnał INIT, a następnie SIPI. Wektor SIPI wskazuje kod startowy poniżej 1 MiB, w którym rdzeń rozpoczyna pracę w trybie rzeczywistym. W architekturze pozbawionej trybów legacy ten mechanizm wymagałby 64-bitowego zamiennika. Intel XDA Developers

Adam Conway z XDA Developers prześledził start w różnych konfiguracjach. W teście QEMU/OVMF naliczył 18 różnych adresów instrukcji w zwykłej ścieżce firmware’u przed przejściem do trybu chronionego. W odrębnym teście QEMU z Linuxem 6.18 znalazł 67 instrukcji 16-bitowych w sekwencji uruchamiania drugiego rdzenia. To wyniki dwóch różnych ścieżek i konfiguracji, nie uniwersalne liczby dla każdego komputera. XDA Developers

Conway wskazał też w Windows 11 w wersji 10.0.28000.3086 trzy procedury związane ze startem w kolejnych trybach: HalpRMStub, HalpPMStub i HalpLMStub. To obserwacja dotycząca konkretnej wersji systemu, a nie każdej kompilacji Windows 11. XDA Developers

Co zmieniałby X86S?

Intel zaproponował X86S jako architekturę ograniczoną do trybu 64-bitowego. Projekt zakładał bezpośredni start w 64-bitowym trybie stronicowanym oraz nowy mechanizm uruchamiania dodatkowych rdzeni zamiast tradycyjnego SIPI. Intel wskazywał też, że starsze 64-bitowe systemy operacyjne mogłyby działać przez wirtualizację. Intel

Projekt startuStan początkowy procesoraStart dodatkowych rdzeniStan projektu
Udokumentowany model x86Stan resetu związany z trybem rzeczywistym 8086Tradycyjny mechanizm INIT/SIPI z kodem startowym w trybie rzeczywistymObecny model architektury
X86SProponowany bezpośredni start w 64-bitowym trybie stronicowanymProponowany zamiennik SIPI działający w 64 bitachIntel zdecydował, że nie będzie kontynuować projektu

Intel podał, że nie będzie kontynuować X86S po uwagach ekosystemu. Firma wskazuje również na swoje długoterminowe zobowiązanie do zgodności oprogramowania; to osobne stanowisko, a nie bardziej szczegółowe wyjaśnienie decyzji. Intel