Tryb rzeczywisty

Tryb rzeczywisty , zwany także trybem adresu rzeczywistego , jest trybem działania wszystkich procesorów zgodnych z architekturą x86 . Tryb bierze swoją nazwę od faktu, że adresy w trybie rzeczywistym zawsze odpowiadają rzeczywistym lokalizacjom w pamięci. Tryb rzeczywisty charakteryzuje się 20- bitową segmentowaną przestrzenią adresową pamięci (co daje 1 MB pamięci adresowalnej) oraz nieograniczonym bezpośrednim dostępem programowym do całej pamięci adresowalnej, adresów wejść/wyjść i urządzeń peryferyjnych. Tryb rzeczywisty nie obsługuje ochrony pamięci, wielozadaniowości ani poziomów uprawnień kodu.

Przed wydaniem 80286 , który wprowadził tryb chroniony , tryb rzeczywisty był jedynym dostępnym trybem dla procesorów x86; a dla zapewnienia 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

W architekturze 286 wprowadzono tryb chroniony , pozwalający (między innymi) na sprzętową ochronę pamięci. Korzystanie z tych nowych funkcji wymagało jednak nowego systemu operacyjnego , który został specjalnie zaprojektowany do pracy w trybie chronionym. Ponieważ podstawową specyfikacją projektową mikroprocesorów x86 jest to, że są one w pełni wstecznie kompatybilne 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ł obsługiwać systemy operacyjne napisane dla 8086 i 8088 . Od 2018 roku obecne procesory x86 (w tym x86-64 ) są w stanie uruchamiać systemy operacyjne w trybie rzeczywistym i mogą uruchamiać oprogramowanie napisane dla prawie każdego wcześniejszego układu x86 bez emulacji lub wirtualizacji.

BIOS komputera PC wprowadzony przez 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żliwił pewne wykorzystanie trybu chronionego, co zostało w pełni zrealizowane w Windows 3.0 , który mógłby działać w trybie rzeczywistym lub korzystać z trybu chronionego, podobnie jak Windows/386. Windows 3.0 miał w rzeczywistości kilka trybów: „tryb rzeczywisty”, „tryb standardowy” i „tryb rozszerzony 386”; ten ostatni wymagał niektórych funkcji wirtualizacji procesora 80386, a zatem nie działałby na 80286. Windows 3.1 usunął obsługę 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łączyły się one w tryb chroniony tylko dla niektórych funkcji. Unix , Linux , OS/2 , Windows NT 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 przez cały czas. 64-bitowe systemy operacyjne używają trybu rzeczywistego tylko na etapie uruchamiania, a jądro systemu operacyjnego przełącza procesor w tryb długi . Warto zauważyć, że tryb chroniony 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. [ Potrzebne źródło ]

Pojemność adresowania

Modele 8086, 8088 i 80186 mają 20-bitową magistralę adresową, ale nietypowy schemat adresowania segmentowego wybrany przez firmę Intel dla tych procesorów w rzeczywistości tworzy 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 wynoszą 0xFFFF, co daje 0xFFFF0 + 0xFFFF = 0x10FFEF. W modelach 8086, 8088 i 80186 wynikiem efektywnego adresu, który przekracza 20 bitów, jest to, że adres „zawija się” do zerowego końca zakresu adresów, tj. przyjmuje się modulo 2^20 (2^20 = 1048576 = 0x100000). Jednak 80286 ma 24 bity adresu i oblicza efektywne adresy z dokładnością do 24 bitów, nawet w trybie rzeczywistym. Dlatego dla segmentu 0xFFFF i przesunięcia większego niż 0x000F, 80286 faktycznie umożliwiłoby dostęp do początku drugiego megabajt pamięci, podczas gdy 80186 i wcześniejsze miałyby dostęp do adresu równego [przesunięcie] -0x10, który znajduje się na początku pierwszego megabajta. (Zauważ, że w 80186 i wcześniejszych pierwszy kilobajt przestrzeni adresowej, zaczynając od adresu 0, to stała, nieruchoma lokalizacja tablicy wektorów przerwań.) Tak więc rzeczywista ilość pamięci adresowalnej przez procesory x86 80286 i nowsze w trybie rzeczywistym wynosi 1 MB + 64 KB – 16 B = 1 114 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 stanowił problem ze zgodnością wsteczną. Wymuszanie 21. linii adresowej (rzeczywisty przewód sygnałowy logiki wychodzący z układu) do niskiego poziomu logicznego, reprezentującego zero, skutkuje efektem modulo-2^20 pasującym do arytmetyki adresu wcześniejszych procesorów, ale 80286 nie ma wewnętrznego zdolność do pełnienia tej funkcji. Kiedy IBM użył 80286 w swoim IBM PC/AT , rozwiązali ten problem, dodając ustawianą programowo bramkę, aby włączyć lub wyłączyć (wymusić zero) linię adresową A20, między pinem A20 w 80286 a magistralą systemową; jest to znane jako Gate-A20 (bramka A20) i do dziś jest implementowane w chipsetach komputerów PC. Większość wersji sterownika rozszerzonej pamięci HIMEM.SYS dla IBM-/MS-DOS słynie z wyświetlania komunikatu po załadowaniu komunikatu, że zainstalowali „obsługę A20”, oprogramowanie do kontrolowania Gate-A20 i koordynowania go do potrzeb programy . W trybie chronionym linia A20 musi być włączona, w przeciwnym razie wystąpią fizyczne błędy adresowania, co prawdopodobnie doprowadzi do awarii systemu. Nowoczesne starsze programy ładujące (takie jak GNU GRUB ) użyj linii A20.

Przełączanie 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 również działały w trybie chronionym. Ze względu na znaczne różnice między trybem rzeczywistym, a nawet raczej ograniczonym trybem chronionym, programy napisane dla trybu rzeczywistego nie mogą działać w trybie chronionym bez ponownego napisania. Dlatego przy szerokiej bazie istniejących aplikacji trybu rzeczywistego, od których polegali użytkownicy, porzucenie trybu rzeczywistego stanowiło problem dla branży, a programiści szukali sposobu na dowolne przełączanie się między trybami. Jednak Intel, zgodnie ze swoimi intencjami dotyczącymi wykorzystania procesora, zapewnił łatwy sposób przełączenia się w tryb chroniony w 80286, ale nie łatwy sposób na powrót do trybu rzeczywistego. Przed 386 jedynym sposobem na przejście 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. Zresetowanie procesora nie powoduje wyczyszczenia pamięci RAM systemu, więc jest to, choć niewygodne i nieefektywne, w rzeczywistości wykonalne. Z trybu chronionego stan procesora jest zapisywany w pamięci, następnie procesor jest resetowany, uruchamiany 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 przełączenia z powrotem do trybu chronionego. Przejście do trybu rzeczywistego jest kosztowne pod względem czasu, ale ta technika umożliwia programom działającym w trybie chronionym korzystanie z usług, takich jak BIOS, który działa całkowicie w trybie rzeczywistym (został pierwotnie zaprojektowany dla Model komputera osobistego IBM z procesorem 8088 (typ maszyny) 5150). Ta technika przełączania trybów jest również używana przez DPMI (w prawdziwym, nie emulowanym, DOS) i przedłużacze DOS, takie jak DOS / 4GW, aby umożliwić uruchamianie programów w trybie chronionym w 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, aby powrócić do aplikacji, która działa w trybie chronionym.

Spadek

Zmiana w kierunku jądra NT spowodowała, że ​​system operacyjny nie potrzebował systemu DOS do uruchomienia komputera, a także nie mógł z niego korzystać. Konieczność restartowania komputera w trybie rzeczywistym MS-DOS spadła po Windows 3.1x , aż przestała być obsługiwana w Windows ME . Jedynym obecnie sposobem uruchamiania aplikacji DOS, które wymagają trybu rzeczywistego z nowszych wersji systemu Windows, jest użycie emulatorów, takich jak produkty do wirtualizacji DOSBox lub x86 .

Zobacz też

Linki zewnętrzne