Stronicowanie jest jednym ze sposobów rozwiązania problemu zewnętrznej fragmentacji polegającym na dopuszczeniu nieciągłości rozmieszczenia logicznej przestrzeni adresowej procesu w pamięci fizycznej. Zostało użyte przez polskiego inżyniera Jacka Karpińskiego w architekturze komputera K-202.
Podstawowa filozofia stronicowania:
Stronicowaniem w systemach komputerowych nazywamy podział pamięci na mniejsze obszary o ustalonej lub zmiennej wielkości i przydzielanie tym blokom adresów fizycznych lub logicznych.
Spis treści |
W światowym przemyśle komputerowym stronicowanie stosowano co najmniej we wczesnych latach 60. W Polsce inż. Jacek Karpiński przy konstruowaniu komputera K-202 w latach 1970–1973 innowacyjnie rozwiązał problem adresowania większej ilości pamięci poprzez stronicowanie. Inne porównywalne ówczesne komputery 16-bitowe dostępne na świecie mogły zaadresować jedynie 64 kilobajty (były to Super-Nova i Modular One). Dzięki owemu mechanizmowi komputer K-202 adresował do 8 megabajtów (MB) pamięci operacyjnej.
Stronicowanie pamięci fizycznej wykonywane było z powodu ograniczenia przestrzeni adresowej procesora (stronicowanie fizyczne). Stronicowanie takie stosowano w systemach 8- i 16-bitowych, w których ilość zainstalowanej pamięci przekraczała możliwości adresowania pamięci przez procesor.
W niektórych pamięciach EEPROM, podczas zapisu może nastąpić jedynie zmiana stanu komórki pamięci z 1 na 0, a zmiana z 0 na 1 przebiega znacznie dłużej i jest nazywana kasowaniem. Tego typu pamięć jest dzielona na strony, kasowanie przebiega jednocześnie dla wszystkich komórek strony, zapis do pamięci następuje poprzez wypełnienie bufora (strony) i następnie na rozkaz: bufor zostaje przeniesiony do pamięci, co trwa od 1 ms do 10 ms. Tak zorganizowana pamięć nazywana jest Flash EEPROM.
System MS-DOS używa procesora 8086 lub jego następcy w trybie rzeczywistym. W trybie tym procesor może zaadresować 1 MB pamięci. Na początku lat dziewięćdziesiątych pojawiła się koncepcja wykorzystania w MS-DOS pamięci z obszaru ponad 1 MB, pamięć ta była dzielona na bloki (strony) o wielkości 16 kB i dostępna przez okno o wielkości 64 kB składające się z 4 ramek w obszarze UMA. Ten rodzaj pamięci nazywano EMS.
Procesory 80386 i nowsze pracujące w trybie chronionym umożliwiają dowolne mapowanie adresów logicznych na adresy fizyczne – mechanizm ten nazywany jest stronicowaniem (ang. paging). Adresy logiczne obejmują całą przestrzeń adresową procesora, czyli 4 GB, niezależnie od tego, ile w rzeczywistości w komputerze zainstalowano pamięci. Zadaniem systemu operacyjnego jest odpowiednie mapowanie adresów logicznych na adresy pamięci fizycznej, co pozwala zwykłym programom użytkowym przez cały czas działania odwoływać się do tych samych adresów logicznych.
Jeśli włączone jest stronicowanie, wówczas cała pamięć (4 GB) dzielona jest na bloki – strony o rozmiarach 4 kB; w procesorach Pentium i nowszych możliwe jest także używanie stron o rozmiarach 4 MB. Gdy program odwołuje się do pamięci, podaje adres właściwej komórki pamięci. Adres ten jest 32-bitową liczbą, która składa się z trzech części:
Katalog stron zawiera wskaźniki do tablic stron, tablice stron przechowują adresy fizyczne stron. (System operacyjny może zarządzać wieloma katalogami i tablicami stron).
Zatem pierwsza część adresu wybiera z katalogu stron tablicę stron. Druga część adresu wybiera pozycję z tablicy stron, która wyznacza fizyczny adres konkretnej strony. Przesunięcie jest adresem lokalnym w obrębie wybranej strony. Ostatecznie adres fizyczny, na który zamapowano adres logiczny, wyznaczany jest z dwóch składników: adresu fizycznego strony i przesunięcia.
Ponieważ uzyskiwanie dostępu do pamięci w celu odczytania informacji o stronie jest czasochłonne, dlatego procesory posiadają pamięć podręczną (ang. TLB, Translation Lookaside Buffer), w której pamiętane są ostatnio wyznaczone adresy fizyczne stron. TLB przechowuje 32, 64, 256 lub więcej pozycji.
Każda pozycja w tablicy stron przechowuje pewne dodatkowe informacje dotyczące strony pamięci, także te przydatne w realizacji pamięci wirtualnej: