SYSTEMY OPERACYJNE
dr. hab. Vitaliy Yakovyna
yakovyna@matman.uwm.edu.pl http://wmii.uwm.edu.pl/~yakovyna/
UNIWERSYTET WARMIŃSKO-MAZURSKI W OLSZTYNIE
Wydział Matematyki i Informatyki
Stronicowanie
Pamięci
Stronicowanie
• Stronicowanie to schemat zarządzania pamięcią, który pozwala, aby fizyczna przestrzeń adresowa procesu była nieciągła
• Stronicowanie pozwala uniknąć fragmentacji
zewnętrznej i związanej z tym potrzeby zagęszczania
• Stronicowanie w różnych formach jest używane w większości systemów operacyjnych
• Stronicowanie jest realizowane poprzez współpracę między systemem operacyjnym a sprzętem
Metoda Podstawowa
• 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
• Każdy adres jest dzielony na dwie części: numer strony (p) i przesunięcie w obrębie strony (d)
• Numer strony służy jako indeks w tablicy stron procesu
Stronicow anie
Model stronicow
ania pamięci
Rozmiar Strony
• Rozmiar strony jest określany przez sprzęt. Rozmiar strony to potęga 2, zwykle między 4 KB a 1 GB, w zależności od architektury komputera.
• Jeśli rozmiar logicznej przestrzeni adresowej wynosi 2m, a rozmiar strony to 2n bajtów, to starsze (m−n) bitów adresu logicznego oznaczają numer strony, a młodsze n bitów oznaczają przesunięcie w
obrębie strony
Fragmentacja
• Brak fragmentacji zewnętrznej: dowolna wolna ramka może być przypisana do procesu, który jej potrzebuje
• Niektóra fragmentacja wewnętrzna: ostatnia
przydzielona ramka może nie być całkowicie pełna
• W najgorszym przypadku proces wymagałby n stron plus 1 bajt
• Jeśli rozmiar procesu jest niezależny od rozmiaru strony, oczekujemy, że fragmentacja wewnętrzna wyniesie średnio połowę strony na proces
Rozmiar Strony
• Fragmentacja wewnętrzna sugeruje, że pożądane są małe rozmiary stron
• Jednak w takim razie zwiększa się rozmiar tablicy stron
• Ponadto dyskowe operacje we/wy są bardziej wydajne, gdy ilość przesyłanych danych jest większa
• Niektóre procesory i systemy operacyjne obsługują wiele rozmiarów stron
• W systemach x86-64 system Windows 10 obsługuje strony o rozmiarze 4 KB i 2 MB
• Linux obsługuje także dwa rozmiary stron: domyślny rozmiar strony (zwykle 4 KB) i zależny od architektury większy rozmiar strony zwany ogromnymi stronami (ang. huge pages)
Przydział Procesu w
Pamięci
Tablica Ramek
• Ponieważ system operacyjny zarządza pamięcią
fizyczną, musi być świadomy szczegółów przydzielenia pamięci fizycznej
• Informacje te są na ogół przechowywane w pojedynczej systemowej strukturze danych zwanej tablicą ramek
• Tablica ramek ma jeden wpis dla każdej fizycznej
ramki, wskazując, czy ta jest wolna czy przydzielona, a jeśli jest przydzielona, której stronie którego procesu (lub procesów)
Tablicy Stron
• System operacyjny utrzymuje kopię tabeli stron dla każdego procesu
• Ta kopia służy do translacji adresów logicznych na adresy fizyczne, ilekroć system operacyjny musi mapować adres logiczny na adres fizyczny
• Jest również wykorzystywana przez dyspozytora CPU do definiowania sprzętowej tablicy stron, kiedy procesor ma zostać przydzielony procesowi
• Stronicowanie zwiększa zatem czas przełączania kontekstu
Wsparcie Sprzętowe
• Wskaźnik do tablicy stron jest przechowywany z innymi wartościami rejestrów w PCB każdego procesu
• W najprostszym przypadku tablica stron jest
implementowana jako zestaw dedykowanych szybkich rejestrów sprzętowych
• Takie podejście wydłuża czas przełączania kontekstu, ponieważ każdy z tych rejestrów musi być wymieniany podczas przełączania kontekstu
• Większość współczesnych procesorów obsługuje duże tablicy stron (np. 220 wpisów) → użycie szybkich rejestrów nie jest możliwe
• Tablica stron jest przechowywana w pamięci głównej, a rejestr bazowy tablicy stron wskazuje tę tablicę stron
• Zmiana tablicy stron wymaga zmiany tylko wartości rejestru bazowego, co znacznie skraca czas przełączania kontekstu
Translation Look-Aside Buffer (TLB)
• Przechowywanie tablicy stron w pamięci głównej może dać szybsze przełączanie kontekstu, lecz także może
wydłużyć czas dostępu do pamięci
• Potrzebne są dwa dostępy do pamięci w celu uzyskania dostępu do danych (jeden dla wpisu tablicy strony i
jeden dla danych rzeczywistych) → dostęp do pamięci jest spowalniany dwukrotnie
• Dlatego procesory posiadają pamięć podręczną (ang.
TLB, Translation Lookaside Buffer), w której pamiętane są ostatnio wyznaczone adresy fizyczne stron
Translation Look-Aside Buffer (TLB)
• TLB to skojarzeniowa (adresowana zawartością) pamięć
• Kiedy pamięć skojarzeniowa wyszukuje element, element jest porównywany ze wszystkimi kluczami jednocześnie
• Wyszukiwanie jest szybkie; wyszukiwanie przez TLB na nowoczesnym sprzęcie jest częścią potoku instrukcji, zasadniczo nie powoduje obniżenia wydajności
• Jednak aby móc przeprowadzić wyszukiwanie w jednym kroku potoku, TLB musi być niewielka. Zwykle ma od 32 do 1024 pozycji
Stronicow anie
Sprzętowe z TLB
Ochrona
• Ochrona pamięci w środowisku stronicowanym realizowana jest przez bity ochronne związane z każdą ramką
• Zwykle te bity są przechowywane w tablicy stron
• Jeden bit może zdefiniować stronę do odczytu/zapisu lub tylko do odczytu
• Zapewniając oddzielne bity ochrony dla każdego
rodzaju dostępu (odczyt, zapis, wykonanie), możemy zezwolić na dowolną kombinację tych dostępów
Bit Ważności
• Jeden dodatkowy bit jest zazwyczaj dołączany do każdego wpisu w tablicy stron: bit ważności (ang.
valid–invalid bit)
• Gdy bit ten jest ustawiony na ważny, powiązana strona znajduje się w przestrzeni adresowej
procesu
• Gdy bit jest ustawiony na niepoprawny, strona nie znajduje się w przestrzeni adresowej procesu
• System operacyjny ustawia bit ten dla każdej strony, aby zezwolić lub zabronić dostęp do strony
Bit
Ważności w tablicy
stron
• System z 14-bitową przestrzenią adresową (od 0 do 16383)
• Program używa adresów tylko od 0 do 10468
• Rozmiar strony – 2 KB
Rejestr Długości Tablicy Stron
• Wiele procesów wykorzystuje tylko niewielką część dostępnej dla nich przestrzeni adresowej
• Większość tablicy stron byłaby nieużywana, ale zajmowałaby cenne miejsce w pamięci
• Niektóre systemy zapewniają sprzęt, w postaci rejestru długości tablicy stron, dla wskazania rozmiaru tablicy stron
• Wartość ta jest sprawdzana dla każdego adresu
logicznego, aby sprawdzić, czy adres znajduje się w ważnym zakresie dla tego procesu
Strony Współdzielone
• Zaletą stronicowania jest możliwość współdzielenia wspólnego kodu
• Aby można było go udostępnić, kod musi być
kodem niemodyfikującym się: nigdy nie zmienia się podczas wykonywania
• Niektóre systemy operacyjne implementują IPC pamięci współdzielonej za pomocą wspólnych stron
• Stronicowanie zapewnia wiele korzyści oprócz
umożliwienia wielu procesom współdzielenia tych samych stron fizycznych
Współdzielenie Standardowej
Biblioteki C w
Środowisku
Stronicowania
Struktura
Tablicy Stron
Stronicowanie Hierarchiczne
• Większość nowoczesnych systemów komputerowych
obsługuje dużą logiczną przestrzeń adresową (232 do 264)
• Sama tablica stron staje się zbyt duża, np.:
• system z 32-bitową logiczną przestrzenią adresową
• rozmiar strony w takim systemie wynosi 4 KB (212)
• tablica stron składa się z ponad 1 miliona wpisów (220 = 232/212)
• jeśli każdy wpis składa się z 4 bajtów, każdy proces może potrzebować do 4 MB dla samej tablicy stron
• Rozwiązanie – podzielić tablicę stron na mniejsze części
Dwupoziom owa tablica
stron
Translacja adresów dla dwupoziomo
wej
architektury
Stronicowanie Hierarchiczne:
Architektury 64-bitowe
• Zewnętrzna tablica stron składa się z 242 pozycji lub 244 bajtów (16 TB):
• Zewnętrzna tablica stron nadal ma rozmiar 234 bajtów (16 GB):
• W przypadku architektur 64-bitowych hierarchiczne tablice stron są ogólnie uważane za nieodpowiednie
Haszowane Tablice Stron
• Jednym podejściem do obsługi przestrzeni adresowych większych niż 32 bity jest użycie haszowanej tablicy
stron (wartością skrótu jest wirtualny numer strony)
• Każdy wpis w tablicy skrótów zawiera listę elementów, które mają skrót do tej samej lokalizacji (kolizji)
• Każdy element składa się z trzech pól:
1) wirtualny numer strony
2) wartość zmapowanej ramki strony
3) wskaźnik do następnego elementu na liście
Haszowane Tablice
Stron
Odwrócone Tablice Stron
• Odwrócona tablica stron ma jeden wpis dla każdej rzeczywistej strony (lub ramki) pamięci
• Każdy wpis składa się z adresu wirtualnego z
informacją o procesie będącym właścicielem strony
• Tak więc, tylko jedna tablica stron jest w systemie
• Zmniejszenie ilości pamięci do przechowywania tabeli stron, zwiększenie czasu wyszukiwania w tablicy
• Przykłady: 64-bitowe UltraSPARC oraz PowerPC
Odwrócone Tablice
Stron
Swapping
Swapping (Wymiana)
• Proces lub jego część można tymczasowo wymienić z pamięci do dysku, a następnie przywrócić do
pamięci w celu dalszego wykonywania
• Zamiana umożliwia, że całkowita fizyczna przestrzeń adresowa wszystkich procesów
przekracza rzeczywistą pamięć fizyczną systemu
• ⟹ zwiększenie stopnia multiprogramowania w systemie
Wymiana
Standardowa
Wymiana z Stronicowa
niem
Wymiana w Systemach Mobilnych
• Systemy mobilne zazwyczaj nie obsługują wymiany
• Pamięć flash ⇒
• ograniczenie przestrzeni
• ograniczona liczba zapisów
• słaba przepustowość między pamięcią główną a pamięcią flash
• Mobilny SO prosi aplikacje o dobrowolne zrzeczenie się przydzielonej pamięci (dane tylko do odczytu)
• Wszelkie aplikacje, które nie zwolnią wystarczającej ilości pamięci, mogą zostać zakończone (Android zapisuje stan aplikacji)
Stronicowanie.
Streszczenie
Streszczenie (1)
• Nowoczesne systemy operacyjne używają
stronicowania do zarządzania pamięcią. W tym procesie pamięć fizyczna jest dzielona na bloki o stałej wielkości zwane ramkami, a pamięć logiczna na bloki o tym samym rozmiarze zwane stronami
• Gdy używane jest stronicowanie, adres logiczny jest dzielony na dwie części: numer strony i
przesunięcie w obrębie strony. Numer strony służy jako indeks do tabeli stron, która zawiera ramkę w pamięci fizycznej. Przesunięcie to określone miejsce w ramce, do której następuje odwołanie
Streszczenie (2)
• Translation look-aside buffer (TLB) to sprzętowa pamięć podręczna tablicy stron. Każdy wpis TLB zawiera numer strony i odpowiadającą mu ramkę
• Korzystanie z TLB w tłumaczeniu adresu dla
systemów z stronicowaniem obejmuje uzyskanie numeru strony z adresu logicznego i sprawdzenie, czy ramka strony znajduje się w TLB. Jeśli tak, ramka jest uzyskiwana z TLB. Jeśli ramka nie jest obecna w TLB, należy ją pobrać z tablicy stron
Streszczenie (3)
• Stronicowanie hierarchiczne polega na dzieleniu adresu logicznego na wiele części, z których każda odnosi się do różnych poziomów tablicy stron.
Ponieważ adresy rozszerzają się poza 32 bity, liczba poziomów hierarchicznych może stać się duża. Dwie strategie, które rozwiązują ten problem, to
haszowane i odwrócone tablice stron
• Wymiana pozwala systemowi przenosić strony
należące do procesu na dysk, aby zwiększyć stopień multiprogramowania