Jest to kolejny przypadek, w którym otrzymana ludowa mądrość na ten temat, niestety pokazana na przykładzie psusi
odpowiedzi, a nawet części pytania, utknęła w świecie tak, jak było około 1991 roku, pomimo bogactwa dostępnych odniesień technicznych wyjaśniających, jak to jest teraz. Inaczej.
W świecie pod koniec lat osiemdziesiątych oprogramowanie układowe maszyny - jedna z dwóch rzeczy zwanych „BIOS” w świecie kompatybilnym z IBM PC - rzeczywiście znajdowało się w układzie ROM na szynie ISA; a procesory rzeczywiście zaczęły wykonywać kod pod adresem fizycznym 000FFFF0
, miejscem w „konwencjonalnej pamięci” dostępnym za pośrednictwem wskaźnika trybu rzeczywistego F000:FFF0
Ten świat już dawno minął.
(Świat, w którym autor strony WWW, na którą wskazałeś, S. Ebrahim Shubbar, błędnie żyje, pomimo pisania w 2002 roku, jest jeszcze starszy. Procesory nie zaczęły się od tej CS:IP
kombinacji FFFF:0000
od 8086 roku. 80286 zmienił to na F000:FFF0
Ale sam świat 80286 jest bardzo przestarzałym światem późnych lat osiemdziesiątych, w którym wciąż krąży mądrość ludowa).
Twój „układ BIOS” to pamięć RAM; a twój procesor nie jest 16-bitowy.
W nowoczesnych komputerach oprogramowanie układowe urządzenia jest przechowywane w nieulotnej pamięci RAM . Układ NVRAM jest podłączony do magistrali LPC (lub do dedykowanego interfejsu koncentratora oprogramowania układowego), a mostek LPC / FWH w „chipsecie” zwykle wyłącza do niego cykle zapisu. „Flashowanie” oprogramowania układowego polega na ustawieniu rejestrów mikroukładów, które umożliwiają zapis do NVRAM, a następnie zapis do NVRAM. (Na przykład w procesorze Intel ICH10 bit rejestru chipsetu, który umożliwia cykle zapisu, nosi nazwę BIOSWE
„BIOS Write Enable”. Jest kilka dodatkowych szczegółów, które pominę tutaj, ale to jest sedno.)
Procesory x86 nie rozpoczęły wykonywania w miejscu 000FFFF0
od czasów 80286. 32-bitowe procesory uruchamiają się w tak zwanym potocznie trybie nierealnym . Mimo że początkowa wartość CS
rejestru po resecie jest F000
, deskryptor segmentu powiązany z tym rejestrem początkowo zachowuje się FFFF0000
jako jego adres bazowy. Tak fizyczny adres, który początkowo odpowiada na 16:16 CS: adres IP F000:FFF0
jest w rzeczywistości, a nie było od czasów 80386 FFFFFFF0
.
I właśnie tam oprogramowanie wewnętrzne maszyny jest głównie mapowane na fizyczną przestrzeń adresową na 32-bitowych i 64-bitowych komputerach x86. W oprogramowaniu wbudowanym znajduje się okno 128 kB w obszarze „pamięci konwencjonalnej”, ale pamięć NVRAM przechowująca oprogramowanie układowe może mieć do 16 MB (choć zależy to od mikroukładu) na nowoczesnych komputerach i jest natychmiast mapowana do 16 MB fizycznej przestrzeni adresowej poniżej linii 4GiB - tj. adresy fizyczne FF000000
do FFFFFFFF
. (Aby ponownie użyć ICH10 jako przykładu: część tej przestrzeni adresowej mapowanej na NVRAM jest kontrolowana przez rejestr mikroukładu znany jako FWH_DEC_EN
„Włączanie dekodowania koncentratora oprogramowania układowego”. Oprogramowanie układowe jest kodowane w celu przeprogramowaniaFWH_DEC_EN
zarejestruj się zgodnie z rozmiarem rzeczywistego układu NVRAM zainstalowanego na płycie głównej. Ale top 512KiB z NVRAM jest zawsze mapowany do adresów fizycznych FFF80000
produktu FFFFFFF
i nie mogą być wyłączone.) Kod pierwotnie wykonywany przez procesor natychmiast po resecie życia w górnym 64Kb tego zakresu adresów 16MiB.
Co się tyczy cieniowania ROM BIOS-u (tak się nazywa - to, dlaczego barlop
myślenie, że procesor jest śledzony, jest tajemnicą): Tak, dostęp do NVRAM na magistrali LPC lub hubie oprogramowania wciąż nie jest tak szybki, jak dostęp do głównego systemu (lotna) pamięć RAM. Ale powody, dla których cieniowanie jest ważne, znacznie zmniejszyły się wraz z zaletami systemów operacyjnych takich jak OS / 2 i Windows NT - ponownie na przełomie lat 80. i 90. Systemy operacyjne w trybie rzeczywistym, takie jak MS-DOS, PC-DOS, DR-DOS i tak dalej, były oparte na funkcjonalności I / O zapewnianej przez oprogramowanie układowe urządzenia. Tak więc kod oprogramowania i dane tylko do odczytu były często uzyskiwane w czasie wykonywania. Systemy operacyjne w trybie chronionym , takie jak OS / 2 i Windows NT, polegają znacznie mniejw przypadku usług dostarczanych przez oprogramowanie układowe w czasie wykonywania. Tak więc fakt, że kod wykonywany z pamięci NVRAM i dane tylko do odczytu w tym samym czasie przychodzą do procesora wolniej niż wtedy, gdy jest ukryty w systemowej pamięci RAM, jest mniejszym problemem niż kiedyś.
Co więcej, na jakim kodzie oprogramowania układowego i danych, na których polegają, niekoniecznie musi znajdować się część NVRAM odwzorowana na część fizycznej przestrzeni adresowej, wspomniane okno „konwencjonalnej pamięci” 128 kB, które z konieczności jest nawet możliwe do zacienienia. Nie wszystkie usługi oprogramowania układowego w trybie chronionym muszą znajdować się poniżej linii 1MiB w fizycznej przestrzeni adresowej, podobnie jak usługi oprogramowania układowego w trybie rzeczywistym, a niektóre nie. (I oczywiście będzie to tylko możliwe, aby wykonać tę samą sztuczkę o powierzchni fizycznej przestrzeni adresowej, że oni robią na żywo, jeśli istnieje co najmniej 4GiB systemowej RAM).
Jak na ironię, dokładniejszym źródłem informacji na ten temat niż pisanie S. Ebrahima Shubbara w 2002 r. Jest książka Phila Crouchera The BIOS Companion sprzed roku 2001. M. Croucher zauważa, że Unices, Linux, Windows NT i „prawdopodobnie” (95 / 98) „„ nie czerpią korzyści z cieniowania ”. Niekoniecznie jest to całkowicie bezużyteczne , ale w porównaniu ze światem osób korzystających z MS-DOS, PC-DOS i DR-DOS w trybie rzeczywistym na 16-bitowych komputerach 80286 w 1989 roku jest stosunkowo niewiele.