Strona zerowa

Strona zerowa lub strona podstawowa to blok pamięci na samym początku przestrzeni adresowej komputera ; to znaczy strona , której adresem początkowym jest zero. Rozmiar strony zależy od kontekstu, a znaczenie pamięci strony zerowej w porównaniu z pamięcią o wyższym adresie w dużym stopniu zależy od architektury maszyny. Na przykład rodziny procesorów Motorola 6800 i MOS Technology 6502 traktują pierwsze 256 bajtów pamięci specjalnie, podczas gdy wiele innych procesorów tego nie robi.

W przeciwieństwie do bardziej nowoczesnego sprzętu, w latach 70. pamięć RAM komputera była tak szybka lub szybsza niż procesor. [ potrzebne źródło ] Dlatego sensowne było posiadanie kilku rejestrów i używanie pamięci głównej jako rozszerzonej puli dodatkowych rejestrów. W maszynach ze stosunkowo szeroką 16-bitową szyną adresową i stosunkowo wąską 8-bitową magistralą danych dostęp do lokalizacji strony zerowej może być szybszy niż dostęp do innych lokalizacji.

Adresowanie stron zerowych ma teraz głównie znaczenie historyczne, ponieważ rozwój technologii układów scalonych sprawił, że dodawanie większej liczby rejestrów do procesora stało się tańsze, a operacje procesora znacznie szybsze niż dostęp do pamięci RAM.

Rozmiar

Rzeczywisty rozmiar strony zerowej w bajtach jest określany przez konstrukcję mikroprocesora , aw starszych projektach jest często równy największej wartości, do której mogą się odwoływać rejestry indeksujące procesora. Na przykład wspomniane 8-bitowe procesory mają 8-bitowe rejestry indeksowe i rozmiar strony 256 bajtów. Dlatego ich strona zerowa rozciąga się od adresu 0 do adresu 255.

Komputery z kilkoma rejestrami procesora

We wczesnych komputerach, w tym PDP-8 , strona zerowa miała specjalny tryb szybkiego adresowania , który ułatwiał jej użycie do tymczasowego przechowywania danych i rekompensował względny niedobór rejestrów procesora . PDP-8 miał tylko jeden rejestr, więc adresowanie zerowej strony było niezbędne. W oryginalnych PDP-10 KA-10 rejestry, które posiada, to po prostu pierwsze 16 słów o długości 36 bitów pamięci głównej. Dostęp do tych lokalizacji można uzyskać zarówno jako rejestry, jak i lokalizacje pamięci.

W przeciwieństwie do bardziej nowoczesnego sprzętu, pamięć RAM komputera z lat 70. była tak szybka lub szybsza niż procesor. Dlatego sensowne było posiadanie kilku rejestrów i używanie pamięci głównej jako rozszerzonej puli dodatkowych rejestrów. W maszynach ze stosunkowo szeroką 16-bitową szyną adresową i stosunkowo wąską 8-bitową magistralą danych dostęp do lokalizacji strony zerowej może być szybszy niż dostęp do innych lokalizacji. Ponieważ lokalizacje stron zerowych mogą być adresowane przez pojedynczy bajt , instrukcje uzyskujące do nich dostęp mogą być mniejsze i ładowane szybciej.

Na przykład technologia MOS 6502 ma tylko jeden rejestr ogólnego przeznaczenia (akumulator). Aby zrekompensować tę słabość i uzyskać przewagę wydajności, zaprojektowano go tak, aby w specjalny sposób wykorzystywał stronę zerową, dostarczając specjalne instrukcje, które są mniejsze, co wymaga mniejszej liczby cykli pobierania pamięci i szybszego wykonywania. Wiele instrukcji jest kodowanych inaczej dla adresów strony zerowej i niezerowej, nazywa się to adresowaniem strony zerowej w terminologii 6502 ( w terminologii 6800 nazywano to adresowaniem bezpośrednim ):

              
             LDA  00  $  ; strona zerowa   LDA  0000  $  ; niezerowa strona  

Powyższe dwie instrukcje wykonują to samo: ładują wartość komórki pamięci $00 do rejestru .A (akumulatora). Jednak pierwsza instrukcja ma tylko dwa bajty długości i wymaga trzech cykli zegara. Druga instrukcja ma długość trzech bajtów i wymaga czterech cykli zegara do wykonania. Ta różnica w czasie wykonania może stać się znacząca w przypadku powtarzalnego kodu.

Niektóre procesory, takie jak Motorola 6809, rozszerzają tę koncepcję, umożliwiając szybki dostęp do dowolnej 256-bajtowej strony, tak zwanej strony bezpośredniej , wybieranej przez specjalny 8-bitowy rejestr „Direct Page” (DP). Nazywa się to bezpośrednim adresowaniem strony .

Wskaźniki zerowe

W przeciwieństwie do pierwotnego preferencyjnego użycia strony zerowej, niektóre nowoczesne systemy operacyjne, takie jak FreeBSD , Linux i Microsoft Windows, w rzeczywistości uniemożliwiają dostęp do strony zerowej w celu pułapek na użycie wskaźników zerowych . Takie wartości wskaźników mogą prawidłowo wskazywać wartości niezainicjowane lub węzły wartownicze , ale nie wskazują prawidłowych obiektów. Błędny kod może próbować uzyskać dostęp do obiektu za pomocą pustego wskaźnika, co może zostać uwięzione na poziomie systemu operacyjnego jako naruszenie dostępu do pamięci .

Wektory przerwań

Jednak niektóre architektury komputerów nadal rezerwują początek przestrzeni adresowej do innych celów; na przykład Intel x86 rezerwują pierwsze 256 podwójnych słów przestrzeni adresowej dla tablicy wektorów przerwań (IVT), jeśli działają w trybie rzeczywistym .

Podobna technika wykorzystania strony zerowej dla wektorów związanych ze sprzętem została zastosowana w architekturze ARM. W źle napisanych programach może to prowadzić do zachowania „ofla”, w którym program próbuje odczytać informacje z niezamierzonego obszaru pamięci i traktuje kod wykonywalny jako dane lub odwrotnie. Jest to szczególnie problematyczne, jeśli obszar strony zerowej jest używany do przechowywania systemowych wektorów skoku, a oprogramowanie układowe jest oszukiwane w celu nadpisania ich.

CP/M

W 8-bitowym CP/M strona zerowa służy do komunikacji między uruchomionym programem a systemem operacyjnym.

Adresowanie strony

W niektórych architekturach procesorów, takich jak 4-bitowy procesor Intel 4004 , pamięć była podzielona na strony (256 bajtów) i trzeba było przedsięwziąć specjalne środki ostrożności, gdy przepływ sterowania przekraczał granice stron , ponieważ niektóre instrukcje maszynowe zachowywały się inaczej, jeśli znajdowały się w kilka ostatnich instrukcji na stronie, więc tylko kilka instrukcji było zalecanych do przeskakiwania między stronami.

Zobacz też

Dalsza lektura