Stronicowanie pamięci

Stronicowaniem pamięci nazywamy w komputerowych systemach operacyjnych jeden ze sposobów zarządzania pamięcią, w którym komputer przechowuje i pobiera dane z pamięci dodatkowej do wykorzystania w pamięci podstawowej. Dane pobierane są z pamięci dodatkowej w blokach o jednakowym rozmiarze nazywanych stronami. Stronicowanie jest istotnym elementem implementacji pamięci wirtualnej, we współczesnych systemach operacyjnych, pozwalającym na przekroczenie ograniczeń komputera wynikających tak z ilości dostępnej pamięci fizycznej, jak też np. wykorzystywanej architektury procesora (potrafiącego zaadresować mniejszą ilość pamięci niż faktycznie dostępna).

Podstawowa filozofia stronicowania:

  • Pamięć fizyczna dzielona jest na bloki stałej długości zwane ramkami.
  • Pamięć logiczna dzielona jest na bloki stałej długości zwane stronami.
  • Rozmiary stron i ramek są identyczne.
  • Przy wykonywaniu procesu, strony z pamięci pomocniczej wprowadzane są w odpowiednie ramki pamięci operacyjnej.

Historia

W światowym przemyśle komputerowym stronicowanie stosowano od wczesnych lat 60. Firma Ferranti wprowadziła stronicowanie w komputerze ATLAS, termin stron pamięci na rynku masowym w odniesieniu do architektury komputerowej był wykorzystywany, niezależnie od tego, czy strona była przenoszona między obszarami pamięci RAM czy między pamięcią RAM a dyskiem[1][2]. Na przykład w komputerze PDP-8 7 bitów instrukcji zawierało adres pamięci, który wybierał jedno ze 128 słów. Ta strefa pamięci została nazwana stroną. Takie użycie terminu jest obecnie rzadkie. W latach 60. zamiana stron pamięci była wczesną techniką pamięci wirtualnej pozwalając na podmianę całych programów (podmieniony program stawał się nieaktywny w czasie gdy pamięć RAM wykorzystywana była przez inny program)[3][4].

Wynalezienie tablicy stron pozwoliło procesorowi działać na dowolnych stronach w dowolnym miejscu pamięci RAM jako pozornie ciągła logiczna przestrzeń adresowa. Strony te stały się jednostkami wymienianymi między dyskiem a pamięcią RAM.

W Polsce inż. Jacek Karpiński wykorzystał stronicowanie pamięci przy konstruowaniu komputera K-202 w latach 19701973 w celu adresowania większej ilości pamięci. 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

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 pamięciach flash

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.

Stronicowanie pamięci w systemie MS-DOS

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.

Stronicowanie pamięci w procesorach 80386

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)[5]. 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:

  1. indeks w katalogu stron (liczba 10-bitowa),
  2. indeks w tablicy stron (liczba 10-bitowa),
  3. przesunięcie w obrębie strony (liczba 12-bitowa).

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.

Paging 386(pl).svg

Każda pozycja w tablicy stron przechowuje pewne dodatkowe informacje dotyczące strony pamięci, także te przydatne w realizacji pamięci wirtualnej:

  • Bit obecności (ang. present) – mówi czy strona znajduje się w pamięci fizycznej. Gdy system operacyjny usuwa stronę z pamięci, tzn. zapisuje ją na dysk, zeruje ten bit. Jeśli program odwoła się do strony nieobecnej w pamięci procesor generuje wyjątek i wówczas system operacyjny wczytuje z dysku uprzednio zapisaną tam zawartość strony.
  • Bit użycia (ang. accessed) – jest ustawiany przez procesor, gdy nastąpi odwołanie do danej strony. System operacyjny zwalnia pamięć zapisując nieużywane strony pamięci na dysku. Wartość zerowa bitu użycia oznacza brak odwołań do strony i jest sygnałem dla systemu, że może być przeniesiona na dysk. Ustawiony bit użycia może w pewnym stopniu zabezpieczać stronę przed przeniesieniem na dysk.
  • Bit modyfikacji (ang. dirty lub modified) – jest ustawiany podczas zapisu danych. Jeżeli dana strona jest usuwana z pamięci, to w przypadku ustawienia bitu modyfikacji musi być zapisana na dysk. Wartość zerowa bitu modyfikacji oznacza, że strona w pamięci oraz strona na dysku jest taka sama, więc podczas usuwania strony z pamięci nie ma konieczności ponownego zapisywania jej na dysk.

Przypisy

  1. Harvey M. Deitel, An Introduction to Operating Systems, Addison-Wesley, 1983, s. 181, 187, ISBN 0-201-14473-5.
  2. Jack Belzer, Albert G. Holzman, Allen, eds Kent, "Operating Systems". Encyclopedia of computer science and technology, t. 11, CRC Press, 1981, s. 433, ISBN 0-8247-2261-2 [zarchiwizowane z adresu 2017-02-27].
  3. Jack Belzer, Albert G. Holzman, Allen, eds Kent, "Operating systems". Encyclopedia of computer science and technology, t. 11, CRC Press, 1981, s. 442, ISBN 0-8247-2261-2 [zarchiwizowane z adresu 2017-02-27].
  4. Harvey G. Cragon, Memory Systems and Pipelined Processors, Jones and Bartlett Publishers, 1996, s. 109, ISBN 0-86720-474-5 [zarchiwizowane z adresu 2017-02-27].
  5. Rozdział 5.2 Page Translation z 80386 Programmer's Reference Manual (Intel, 1987)

Zobacz też

Media użyte na tej stronie

Paging 386(pl).svg
Autor: Wojciech Muła, Licencja: CC-BY-SA-3.0
Stronicowanie na procesorach 386 - wyznaczanie adresu