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
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 startu | Stan początkowy procesora | Start dodatkowych rdzeni | Stan projektu |
| Udokumentowany model x86 | Stan resetu związany z trybem rzeczywistym 8086 | Tradycyjny mechanizm INIT/SIPI z kodem startowym w trybie rzeczywistym | Obecny model architektury |
| X86S | Proponowany bezpośredni start w 64-bitowym trybie stronicowanym | Proponowany zamiennik SIPI działający w 64 bitach | Intel 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