Tryb rzeczywisty - Real mode

Trybie rzeczywistym , zwany także tryb rzeczywisty adres , to tryb pracy wszystkich x86 -Kompatybilny procesorów . Tryb zawdzięcza swoją nazwę temu, że adresy w trybie rzeczywistym zawsze odpowiadają rzeczywistym lokalizacjom w pamięci. Tryb rzeczywisty charakteryzuje się 20- bitową segmentowaną przestrzenią adresową pamięci (dającą dokładnie 1 MB pamięci adresowalnej) i nieograniczonym bezpośrednim dostępem oprogramowania do całej adresowalnej pamięci, adresów I / O i urządzeń peryferyjnych. Tryb rzeczywisty nie obsługuje ochrony pamięci, wielozadaniowości ani poziomów uprawnień do kodu.

Przed wydaniem 80286 , który wprowadził tryb chroniony, tryb rzeczywisty był jedynym dostępnym trybem dla procesorów x86; a dla kompatybilności wstecznej wszystkie procesory x86 uruchamiają się w trybie rzeczywistym po zresetowaniu, chociaż możliwe jest emulowanie trybu rzeczywistego w innych systemach podczas uruchamiania w innych trybach.

Historia

Architektura 286 wprowadziła tryb chroniony , umożliwiając (między innymi) ochronę pamięci na poziomie sprzętowym. Korzystanie z tych nowych funkcji wymagało jednak nowego systemu operacyjnego zaprojektowanego specjalnie dla trybu chronionego. Ponieważ podstawową specyfikacją projektową mikroprocesorów x86 jest to, że są one w pełni kompatybilne wstecz z oprogramowaniem napisanym dla wszystkich wcześniejszych układów x86, układ 286 został stworzony do uruchamiania w `` trybie rzeczywistym '' - to znaczy w trybie, który wyłącza nową pamięć. funkcje ochrony, aby mógł uruchamiać systemy operacyjne napisane dla 8086 i 8088 . Od 2018 r. Obecne procesory x86 (w tym procesory x86-64 ) mogą uruchamiać systemy operacyjne trybu rzeczywistego i mogą uruchamiać oprogramowanie napisane dla prawie każdego poprzedniego układu x86 bez emulacji lub wirtualizacji.

BIOS komputera PC, który wprowadził IBM, działa w trybie rzeczywistym, podobnie jak systemy operacyjne DOS ( MS-DOS , DR-DOS itp.). Wczesne wersje systemu Microsoft Windows działały w trybie rzeczywistym. Windows / 386 umożliwiał pewne wykorzystanie trybu chronionego, co zostało w pełni zrealizowane w systemie Windows 3.0 , który mógł działać zarówno w trybie rzeczywistym, jak i korzystać z trybu chronionego na wzór Windows / 386. W rzeczywistości Windows 3.0 miał kilka trybów: „tryb rzeczywisty”, „tryb standardowy” i „tryb rozszerzony 386”, ten ostatni wymagał niektórych funkcji wirtualizacji procesora 80386 i dlatego nie działał na 80286. Usunięto obsługę systemu Windows 3.1 dla trybu rzeczywistego i było to pierwsze główne środowisko operacyjne, które wymagało co najmniej procesora 80286. Żadnej z tych wersji nie można uznać za nowoczesny system operacyjny x86, ponieważ przełączały się w tryb chroniony tylko dla niektórych funkcji. Unix , Linux , OS / 2 , Windows NT 3.x, a później Windows NT itp. Są uważane za nowoczesne systemy operacyjne, ponieważ przełączają procesor w tryb chroniony podczas uruchamiania, nigdy nie wracają do trybu rzeczywistego i zapewniają wszystkie zalety trybu chronionego cały czas. 64-bitowe systemy operacyjne używają trybu rzeczywistego tylko na etapie uruchamiania, a jądro systemu operacyjnego przełączy procesor w tryb długi . Warto zauważyć, że tryb chroniony w 80286 jest znacznie bardziej prymitywny niż ulepszony tryb chroniony wprowadzony w 80386; ten ostatni jest czasami nazywany trybem chronionym 386 i jest trybem, w którym działają nowoczesne 32-bitowe systemy operacyjne x86.

Zdolność adresowania

8086, 8088 i 80186 mają 20-bitową szynę adresową, ale nietypowy schemat adresowania segmentowego, który Intel wybrał dla tych procesorów, w rzeczywistości generuje efektywne adresy, które mogą mieć 21 znaczących bitów. Ten schemat przesuwa 16-bitowy numer segmentu w lewo o cztery bity (tworząc 20-bitową liczbę z czterema najmniej znaczącymi zerami) przed dodaniem do niej 16-bitowego przesunięcia adresu; maksymalna suma występuje, gdy zarówno segment, jak i przesunięcie mają wartość 0xFFFF, dając 0xFFFF0 + 0xFFFF = 0x10FFEF. W modelach 8086, 8088 i 80186 efekt efektywnego adresu, który przepełnia 20 bitów, jest taki, że adres „zawija się” do końca zakresu adresów, tzn. Przyjmuje się modulo 2 ^ 20 (2 ^ 20 = 1048576 = 0x100000). Jednak 80286 ma 24 bity adresu i oblicza efektywne adresy do 24 bitów, nawet w trybie rzeczywistym. Dlatego dla segmentu 0xFFFF i przesunięcia większego niż 0x000F, 80286 faktycznie miałby dostęp do początku drugiego megabajta pamięci, podczas gdy 80186 i wcześniejsze miałyby dostęp do adresu równego [offset] -0x10, który jest na początek pierwszego megabajta. (Zauważ, że w 80186 i wcześniejszych, pierwszy kilobajt przestrzeni adresowej, zaczynając od adresu 0, jest stałą, nieruchomą lokalizacją tablicy wektorów przerwań.) Tak więc rzeczywista ilość pamięci adresowalnej przez procesory 80286 i późniejsze x86 w trybie rzeczywistym to 1 MB + 64 KB - 16 B = 1114 096 B.

Linia A20

Niektóre programy starsze niż 80286 zostały zaprojektowane tak, aby wykorzystywać zachowanie adresowania pamięci typu wrap-around (modulo), więc 80286 stwarzał problem ze wsteczną kompatybilnością. Wymuszenie 21. linii adresowej (rzeczywisty przewód sygnałowy logiki wychodzący z chipa) do niskiego poziomu logicznego, reprezentującego zero, powoduje efekt modulo-2 ^ 20, aby dopasować się do arytmetyki adresowej wcześniejszych procesorów, ale 80286 nie ma wewnętrznego możliwość wykonywania tej funkcji. Kiedy IBM używał 80286 w swoim IBM PC / AT , rozwiązał ten problem, włączając ustawianą programowo bramkę do włączania lub wyłączania (wymuszanie zerowania) linii adresowej A20, między pinem A20 na 80286 a magistralą systemową; jest to znane jako Gate-A20 (bramka A20) i do dziś jest zaimplementowane w chipsetach komputerów PC. Większość wersji sterownika rozszerzonej pamięci HIMEM.SYS dla IBM- / MS-DOS słynie z wyświetlenia komunikatu o zainstalowaniu modułu obsługi „A20”, oprogramowania do sterowania Gate-A20 i koordynowania go do potrzeb programów . W trybie chronionym linia A20 musi być włączona, w przeciwnym razie wystąpią fizyczne błędy adresowania, które prawdopodobnie doprowadzą do awarii systemu. Nowoczesne starsze programy ładujące (takie jak GNU GRUB ) używają linii A20.

Przejście do trybu rzeczywistego

Intel wprowadził tryb chroniony do rodziny x86 z zamiarem, aby systemy operacyjne, które go używały, działały całkowicie w nowym trybie, a wszystkie programy działające w systemie operacyjnym w trybie chronionym działały również w trybie chronionym. Ze względu na znaczne różnice między trybem rzeczywistym a nawet raczej ograniczonym 286 trybem chronionym, programy napisane dla trybu rzeczywistego nie mogą działać w trybie chronionym bez przepisywania. Dlatego przy szerokiej bazie istniejących aplikacji trybu rzeczywistego, na których polegali użytkownicy, rezygnacja z trybu rzeczywistego stwarzała problemy dla przemysłu, a programiści szukali sposobu na dowolne przełączanie się między trybami. Jednak Intel, zgodnie z ich intencjami dotyczącymi wykorzystania procesora, zapewnił łatwy sposób przełączenia się w tryb chroniony na 80286, ale nie ma łatwego sposobu na powrót do trybu rzeczywistego. Przed 386 jedynym sposobem przełączenia z trybu chronionego z powrotem do trybu rzeczywistego było zresetowanie procesora; po zresetowaniu zawsze uruchamia się w trybie rzeczywistym, aby być kompatybilnym z wcześniejszymi procesorami x86 z powrotem do 8086. Resetowanie procesora nie czyści pamięci RAM systemu, więc jest to niewygodne i nieefektywne, ale jest faktycznie wykonalne. Z trybu chronionego stan procesora jest zapisywany w pamięci, następnie procesor jest resetowany, uruchamia się ponownie w trybie rzeczywistym i wykonuje kod trybu rzeczywistego, aby przywrócić zapisany stan z pamięci. Następnie może uruchamiać inny kod trybu rzeczywistego, dopóki program nie będzie gotowy do powrotu do trybu chronionego. Przejście do trybu rzeczywistego jest kosztowne pod względem czasu, ale ta technika umożliwia programom w trybie chronionym korzystanie z usług, takich jak BIOS, który działa całkowicie w trybie rzeczywistym (został zaprojektowany pierwotnie dla modelu komputera osobistego IBM opartego na 8088 (typ maszyny) 5150). Ta technika przełączania trybu jest również używana przez DPMI (w rzeczywistym, nie emulowanym, DOS) i rozszerzenia DOS, takie jak DOS / 4GW, aby umożliwić uruchamianie programów w trybie chronionym pod DOS; system DPMI lub przedłużacz DOS przełącza się w tryb rzeczywisty, aby wywołać wywołania DOS lub BIOS, a następnie przełącza się z powrotem do programu użytkowego, który działa w trybie chronionym.

Upadek

Zmiana w kierunku jądra NT spowodowała, że ​​system operacyjny nie potrzebował DOS-a do uruchamiania komputera, a także nie mógł go używać. Potrzeba ponownego uruchomienia komputera w trybie rzeczywistym MS-DOS spadła po Windows 3.1x, aż nie był już obsługiwany w Windows ME . Jedynym sposobem obecnie uruchomionych aplikacji DOS, które wymagają trybu rzeczywistego w nowszych wersjach systemu Windows, jest użycie emulatorów, takich jak produkty do wirtualizacji DOSBox lub x86 .

Zobacz też

Bibliografia

Linki zewnętrzne