Hierarchia pamięci w systemie komputerowym

Podobne dokumenty
Architektura Systemów Komputerowych

Schematy zarzadzania pamięcia

Architektura komputerów

Architektura komputerów

Zarządzanie pamięcią operacyjną

Zarządzanie pamięcią w systemie operacyjnym

Zarządzanie pamięcią operacyjną

architektura komputerów w. 8 Zarządzanie pamięcią

dr inż. Jarosław Forenc

Zarządzanie zasobami pamięci

Systemy operacyjne III

Pamięć wirtualna. Przygotował: Ryszard Kijaka. Wykład 4

Stronicowanie w systemie pamięci wirtualnej

Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1

Wydajność systemów a organizacja pamięci, czyli dlaczego jednak nie jest aż tak źle. Krzysztof Banaś, Obliczenia wysokiej wydajności.

Zarządzanie pamięcią operacyjną zagadnienia podstawowe

Wykład 7. Zarządzanie pamięcią

Pamięć. Jan Tuziemski Źródło części materiałów: os-book.com

3 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK SP.06 Rok akad. 2011/ / 22

Architektura komputerów

Pamięci półprzewodnikowe w oparciu o książkę : Nowoczesne pamięci. Ptc 2013/

Organizacja typowego mikroprocesora

Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1

System pamięci. Pamięć wirtualna

Ograniczenia efektywności systemu pamięci

System plików warstwa fizyczna

System plików warstwa fizyczna

System plików warstwa fizyczna

Układ sterowania, magistrale i organizacja pamięci. Dariusz Chaberski

Współpraca procesora ColdFire z pamięcią

Od programu źródłowego do procesu

Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1

Wprowadzenie do architektury komputerów. Pamięci w systemach komputerowych Pamięć podręczna

Zarządzanie pamięcią. Od programu źródłowego do procesu. Dołączanie dynamiczne. Powiązanie programu z adresami w pamięci

Mikroprocesor Operacje wejścia / wyjścia

System plików. Warstwowy model systemu plików

Rys. 1. Podłączenie cache do procesora.

Programowanie na poziomie sprzętu. Tryb chroniony cz. 1

Systemy Operacyjne Pamięć wirtualna cz. 2

Budowa i zasada działania komputera. dr Artur Bartoszewski

Struktura i funkcjonowanie komputera pamięć komputerowa, hierarchia pamięci pamięć podręczna. System operacyjny. Zarządzanie procesami

PRZYDZIAŁ PAMIĘCI OPERACYJNEJ

Ograniczenia efektywności systemu pamięci

Procesor ma architekturę rejestrową L/S. Wskaż rozkazy spoza listy tego procesora. bgt Rx, Ry, offset nand Rx, Ry, A add Rx, #1, Rz store Rx, [Rz]

Budowa komputera Komputer computer computare

ARCHITEKTURA PROCESORA,

SYSTEMY OPERACYJNE WYKLAD 4 - zarządzanie pamięcią

ang. file) Pojęcie pliku (ang( Typy plików Atrybuty pliku Fragmentacja wewnętrzna w systemie plików Struktura pliku

SOE Systemy Operacyjne Wykład 8 Pamięć wirtualna dr inż. Andrzej Wielgus

dr inż. Jarosław Forenc

dr inŝ. Jarosław Forenc

Podstawy. Pamięć wirtualna. (demand paging)

architektura komputerów w. 7 Cache

System pamięci. Pamięć wirtualna

METODY ELIMINACJI STUDENTÓW INFORMATYKI. Czyli co student INF-EKA powinien wiedzieć o MESI...

Architektura systemów informatycznych

Technologie informacyjne (2) Zdzisław Szyjewski

dr inż. Jarosław Forenc

LEKCJA TEMAT: Zasada działania komputera.

System pamięci. Pamięć wirtualna

Architektura komputera. Cezary Bolek. Uniwersytet Łódzki. Wydział Zarządzania. Katedra Informatyki. System komputerowy

Sprzętowe wspomaganie pamięci wirtualnej

Mapowanie bezpośrednie

Mikroinformatyka. Wielozadaniowość

UTK ARCHITEKTURA PROCESORÓW 80386/ Budowa procesora Struktura wewnętrzna logiczna procesora 80386

Celem wykładu jest przedstawienie podejść do zarządzania jednym z kluczowych zasobów systemu komputerowego pamięcią operacyjną. Ponieważ zarządzanie

Magistrala systemowa (System Bus)

System plików warstwa logiczna

Architektura Systemów Komputerowych. Jednostka ALU Przestrzeń adresowa Tryby adresowania

Wykład 8. Pamięć wirtualna. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

Pamięć wirtualna. Jan Tuziemski Źródło części materiałów: os-book.com

WYKŁAD. Zarządzanie pamięcią operacyjną

Budowa systemów komputerowych

System pamięci. Pamięć podręczna

Temat: Pamięci. Programowalne struktury logiczne.

43 Pamięci półprzewodnikowe w technice mikroprocesorowej - rodzaje, charakterystyka, zastosowania

Wstęp do informatyki. System komputerowy. Magistrala systemowa. Architektura komputera. Cezary Bolek

Mikroprocesory rodziny INTEL 80x86

Budowa Mikrokomputera

RDZEŃ x86 x86 rodzina architektur (modeli programowych) procesorów firmy Intel, należących do kategorii CISC, stosowana w komputerach PC,

Podstawy Informatyki DMA - Układ bezpośredniego dostępu do pamięci

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

Architektura i administracja systemów operacyjnych

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

Podstawowe zagadnienia informatyki

Zarządzanie pamięcią. Podstawy Wymiana (swapping). Przydział ciągły pamięci. Stronicowanie. Segmentacja. Segmentacja ze stronicowaniem.

Architektura Systemów Komputerowych. Rozwój architektury komputerów klasy PC

Rejestry procesora. Nazwa ilość bitów. AX 16 (accumulator) rejestr akumulatora. BX 16 (base) rejestr bazowy. CX 16 (count) rejestr licznika

Pamięci półprzewodnikowe

16MB - 2GB 2MB - 128MB

PAMIĘCI. Część 1. Przygotował: Ryszard Kijanka

Systemy operacyjne. Struktura i zasady budowy. Rozdział 1 Wprowadzenie do systemów komputerowych

Architektura komputerów

Mikroinformatyka. Tryb wirtualny

Bazy danych. Plan wykładu. Model logiczny i fizyczny. Operacje na pliku. Dyski. Mechanizmy składowania

Organizacja pamięci wewnętrznej komputerów

obszar bezpośrednio dostępny dla procesora rozkazy: load, store (PAO rejestr procesora)

Magistrala. Magistrala (ang. Bus) służy do przekazywania danych, adresów czy instrukcji sterujących w różne miejsca systemu komputerowego.

Plan wykładu. Architektura systemów komputerowych. Strategie zapisu. Cezary Bolek

Transkrypt:

Hierarchia pamięci w systemie komputerowym Aby procesor mógł do końca wykorzystać swą wysoką częstotliwość taktowania musi mieć możliwość odpowiednio szybkiego pobierania danych do przetworzenia. Pamięć RAM nawet ta najszybsza i tak nie jest w stanie zapewnić wystarczającej przepustowości danych. Dlatego też od dawna już wykorzystuje się do tego celu szybką pamięć podręczną cache L1 i L2, która na początku (np. procesory 80386) była wlutowana na płycie głównej i współpracowała jedynie z procesorem by z biegiem czasu stać się częścią procesora (od momentu wprowadzenia procesorów 80486). pojemność szybkość Pomysł na stosowanie pamięci podręcznej cache wynika z budowy i możliwości pamięci SRAM i DRAM. Pamięci dynamiczne są tańsze od pamięci statycznych i charakteryzują się mniejszym poborem mocy niż pamięci statyczne, są natomiast od nich wolniejsze, zbyt wolne w stosunku do obecnie produkowanych procesorów (chodzi tu zarówno o częstotliwości jak i architekturę procesora). Pamięci statyczne natomiast są o wiele szybsze od dynamicznych jednak ich cena, stopień ich scalenia oraz ilość pobieranej energii dyskwalifikują je jako podstawowy budulec pamięci operacyjnej. Dlatego też zrodził się pomysł żeby pamięć komputera składała się z kilku do kilkuset MB (obecnie kilka GB) pamięci operacyjnej dynamicznej i z kilku - kilkuset KB pamięci podręcznej statycznej. Dodatkowo pamięci te wsparte są przez sterownik cache odpowiadający za współpracę pamięci i reszty podzespołów. Ponad to sterownik ten cały czas monitoruje czy potrzebna informacja jest przechowywana w pamięci podręcznej czy też nie. Jeżeli tak to mamy do czynienia z cache hit ( z ang. trafienie) tzn. dane nie muszą być wyszukiwane i pobierane od początku ponieważ znajdują się już w pamięci cache mogą być więc bezpośrednio wysłane do CPU, co znacznie zwiększa wydajność. W drugim przypadku mamy do czynienia 1

z cache miss (z ang. chybienie) czyli należy pobrać nie obecne w cach'u adresy i dane potrzebne procesorowi w tym celu konieczny jest dostęp do pamięci (wolniejszej) gdzie owe dane są przechowywane i pobranie ich co w rezultacie spowalnia pracę CPU i owocuje spadkiem wydajności komputera. Pamięć buforowa (cache), pierwszy raz wprowadzona w komputerach IBM S/370 około 1968 roku, stanowi bufor dla pamięci operacyjnej umieszczony między rejestrami a pamięcią operacyjną. Jest ona niewidoczna w użytkowym modelu programowym, a jest niezbędna we współczesnych komputerach z powodu znaczącej dysproporcji pomiędzy wydajnością procesora i pamięci operacyjnej. Przy każdym odwołaniu procesora do pamięci następuje sprawdzenie, czy dana spod określonego adresu znajduje się w pamięci buforowej. Odnalezienie danej w buforze trafienie (cache hit) - dana zostaje odczytana z bufora, odwołanie do pamięci operacyjnej jest zbędne. Czas dostępu do danej tym razem jest znaczne krótszy niż dostępu do pamięci operacyjnej. Realizacja odczytu w pamięci podręcznej przy trafieniu 2

Brak danej w buforze chybienie (cache miss) - dana zostaje odczytana z pamięci i przesłana do procesora - po drodze dana wraz z jej adresem jest zapisywana do bufora; jeśli bufor jest pełny trzeba z niego coś usunąć przy następnym odwołaniu dana będzie już w buforze Realizacja odczytu w pamięci podręcznej przy chybieniu Współczynnik trafień (hit ratio) definiowany jest jako stosunek liczby trafień do całkowitej liczby odwołań w badanym przedziale czasu. Zależy on od: pojemności bufora organizacji pamięci buforowej wykonywanego programu Wiarygodny pomiar i porównanie współczynnika trafień wymaga uzgodnienia budowy testu. Średni czas dostępu do hierarchii pamięci złożonej z bufora i pamięci operacyjnej wynosi: h współczynnik trafień m=1-h współczynnik chybień Jeśli przyjmiemy h=0,9 to 3

Zasada lokalności odwołań w ograniczonym odcinku czasu odwołania procesora do pamięci są skupione na niewielkim fragmencie przestrzeni adresowej. Zakres odwołań jest ograniczony: - zakres adresów, do których odwołuje się procesor w ograniczonym odcinku czasu nazywa się zbiorem roboczym - stosunkowo niewielki bufor może przechowywać znaczącą część obiektów, do których w danym odcinku czasu odwołuje się procesor. Odwołania są na ogół powtarzane - należy zapamiętać dane, do których procesor wykonuje dostęp, bo zapewne wkrótce będzie znów ich potrzebował Bardzo prawdopodobne są kolejne odwołania do kolejnych adresów - przy napełnianiu bufora wskutek dostępu ze strony procesora warto pobrać z pamięci kilka kolejnych komórek na zapas Dla uproszczenia wyjaśnienia sposobu organizacji pamięci podręcznej założyliśmy tylko jeden poziom pamięci podręcznej w komputerze. Jeżeli występują dwa lub więcej poziomów pamięci podręcznej, to przy chybieniu na pierwszym poziomie, adres jest przekazywany sprzętowo do pamięci podręcznej drugiego poziomu. Jeśli tam uzyskamy trafienie, to żądane słowo jest pobierane z pamięci drugiego poziomu a blok zawierający dane słowo jest sprowadzany do pamięci podręcznej pierwszego poziomu. O ile i w drugiej pamięci podręcznej mamy chybienie, to słowo jest pobierane z pamięci operacyjnej a bloki zawierające te słowa są sprowadzane do pamięci podręcznych obu poziomów. Rozmiar bloku pamięci pierwszego poziomu wynosi od 8 do kilkudziesięciu bajtów (liczba stanowi potęgę dwu). Rozmiar bloku pamięci drugiego poziomu jest wielokrotnie większy od rozmiaru bloku pamięci pierwszego poziomu. Podzespół pamięci podręcznej może być różnie podłączony do procesora i pamięci operacyjnej: jako dodatkowy układ podłączony do szyny systemowej łączącej procesor z pamięcią operacyjną jako układ pośredniczący między procesorem a pamięcią operacyjną jako układ osobno podłączony do procesora, równolegle do pamięci operacyjnej. To trzecie rozwiązanie jest obecnie stosowane najczęściej. Obecnie omówimy różne rodzaje organizacji informacji w pamięci podręcznej. Znane są trzy główne metody odwzorowania w pamięci podręcznej informacji przychodzącej z pamięci operacyjnej: odwzorowanie asocjacyjne (ang. associative mapping) odwzorowanie bezpośrednie (ang. direct mapping) odwzorowanie zbiorowo asocjacyjne (ang. set associative mapping). 4

Pamięć asocjacyjna (skojarzeniowa) Asocjacyjna organizacja informacji w pamięci podręcznej Określa się ją jako pamięć adresowana zawartością, nie posiada adresów, a dostęp do danej następuje poprzez porównanie części danej zwanej kluczem z wzorcem dostarczonym z zewnątrz. Pamięć odpowiada poprzez wystawienie danych zgodnych z wzorcem lub informacji, że takich danych nie ma. Odczyt z pamięci podręcznej z odwzorowaniem asocjacyjnym przy trafieniu W każdej komórce pamięci buforowej może być przechowywana dana spod dowolnego adresu duża elastyczność w porównaniu z następnymi architekturami. Linia do usunięcia wyznaczana według algorytmu LRU (kosztowna implementacja) lub losowo. Każda komórka wyposażona jest w komparator znacznika trudna implementacja, niewielka pojemność pamięci. Jeśli rozmiar zbioru roboczego przekracza pojemność pamięci buforowej to wszystkie odwołania będą kończyły się chybieniami. Dane są przechowywane w buforze nie w postaci pojedynczych słów czy bajtów, lecz bloków zazwyczaj o długości 4x większej od rozmiaru słowa pamięci. Element zawierający blok danych i związane z nim znaczniki jest nazywany linią. Najmniej znacząca część adresu służy do wyboru bajtu lub słowa z linii. Kolejne bity adresu są używane do stwierdzenia, czy poszukiwana dana znajduje się w buforze. 5

Pamięć bezpośrednio adresowana (odwzorowanie bezpośrednie) Organizacja pamięci podręcznej z odwzorowaniem bezpośrednim Zbudowana jest na bazie zwykłej, szybkiej pamięci RAM i jednego komparatora. Dzięki prostocie budowy może mieć stosunkowo dużą pojemność. Odczyt z pamięci podręcznej z odwzorowaniem bezpośrednim 6

Najmniej znaczące bity adresu służą do wyboru bajtu z linii. Środkowa, mniej znacząca część adresu procesora służy jako adres pamięci RAM; na jej podstawie w każdym cyklu dostępu jest wybierana pojedyncza linia. Każda linia zawiera znacznik adresu i dane. Pole znacznika adresu zawiera bardziej znaczącą część adresu danej zapamiętanej w polu danych jest ono porównywane z najbardziej znaczącą częścią adresu wystawionego przez procesor. Pamięć stwierdza trafienie, jeśli znacznik adresu wybranej linii jest równy najbardziej znaczącej części adresu wystawionego przez procesor. W przypadku trafienia dane są transmitowane z bufora do procesora. W przypadku chybienia wymianie podlega wybrana linia w polu znacznika zostaje zapisana najbardziej znacząca część adresu, w polu danych zostają zapamiętane dane odczytane z pamięci. Pamięć buforowa bezpośrednio adresowana charakteryzuje się niskim kosztem, dużą pojemnością i wysoką wydajnością. Algorytm zastępowania linii wymuszony jest przez budowę pamięci buforowej. Dane spod określonego adresu mogą znaleźć się wyłącznie w jednej, z góry określonej linii pamięci w pamięci buforowej nie można zapamiętać dwóch danych, których środkowe części adresu są identyczne. Pamięć buforowa zbiorowo-asocjacyjna Odczyt z pamięci podręcznej z odwzorowaniem zbiorowo asocjacyjnym przy trafieniu Pamięć taka powstaje przez połączenie pewnej liczby pamięci buforowych bezpośrednio adresowanych zwanych blokami. Dana spod określonego adresu może być przechowywana w tylu miejscach ile jest bloków. W każdym cyklu dostępu następuje poszukiwanie danej w pojedynczej linii każdego z bloków. Zestaw linii wybieranych w każdym cyklu jest nazywany zbiorem. Zbiór zachowuje się jak mała pamięć asocjacyjna. 7

Liczba bloków jest zwana stopniem asocjacyjności, używa się również określeń pamięć buforowa dwudrożna lub czterodrożna. Pamięć buforowa zbiorowo-asocjacyjna może być również rozpatrywana jako złożenie pewnej liczby pamięci asocjacyjnych. Budowa pamięci buforowej musi gwarantować, że dana spod określonego adresu może zostać zapisana tylko w jednym bloku. W przypadku chybienia należy wyznaczyć ze zbioru jedną linię do zastąpienia (według algorytmu LRU lub losowego). Ten typ pamięci buforowej charakteryzuje się mniejszą wrażliwością na nakładanie się adresów danych. Pamięci buforowe wielopoziomowe Wymóg nadążania pamięci buforowej pierwszego poziomu (L1) ogranicza jej pojemność i asocjacyjność im większa pamięć tym wolniejsza, im większa asocjacyjność tym dłuższy czas dostępu. Pamięć drugiego poziomu (L2) może być wolniejsza (np. 5 razy) dzięki czemu może być znacząco większa i mieć wyższą asocjacyjność. Jeżeli pamięć buforowa L2 nie zapewnia odpowiednio krótkiego średniego czasu dostępu, w strukturze komputera umieszcza się pamięć L3, większą i wolniejszą od L2. Operacja zapisu do pamięci. W dotychczasowych rozważaniach rozpatrywaliśmy wyłącznie odczyt danych lub instrukcji z pamięci. W przypadku zapisu do pamięci możliwe są następujące rozwiązania: zapis przeźroczysty zapis wykonywany zawsze do pamięci, a w przypadku trafienia również do bufora, zapis zwrotny zapis do pamięci wykonywany tylko wtedy, kiedy jest to niezbędne. Przy zapisie zwrotnym możliwe są warianty: bez alokacji przy chybieniu zapisu w razie chybienia zapis zachodzi tylko do pamięci, w razie trafienia tylko do bufora, z alokacją przy chybieniu zapisu zapis jest zawsze wykonywany tylko do bufora. Przy zapisie zwrotnym usunięcie linii z bufora może wymagać zapisu usuwanej linii do pamięci. Strategie zapisu danych 8

Ścieżki danych We wcześniejszych rozwiązaniach dane pobierane z pamięci głównej przekazywane były do pamięci buforowej L2, a stamtąd do L1 i procesora. Każdy obiekt zawarty w warstwie wyższej obecny był również w warstwie niższej. Efektywna sumaryczna pojemność pamięci buforowej jest równa pojemności największej z warstw. Pojemność L2 powinna być znacząco większa od L1. W obecnych rozwiązaniach bufor L2 jest napełniany wyłącznie obiektami usuwanymi z L1 (jest to tzw. bufor ofiar victim cache). L2 zawiera głównie obiekty nieobecne w L1. Efektywna sumaryczna pojemność pamięci buforowej jest równa sumie pojemności poszczególnych warstw. Pojemność L2 może być większa lub równa L1. Asocjacyjność L2 powinna być większa od asocjacyjności L1 w przeciwnym przypadku sprawność przechwytywania ofiar byłaby niewielka. Przykładami takich rozwiązań są procesory K7 i K8 firmy AMD oraz Pentium 4 i Core firmy Intel. Spójność hierarchii pamięci. Hierarchię pamięci musi cechować spójność co oznacza, że każdy dostęp do danego adresu musi zwrócić tę samą wartość danej, niezależnie od warstwy, w której jest fizycznie zrealizowany. Problem z utrzymaniem spójności powstaje, gdy istnieje więcej niż jedna ścieżka dostępu do hierarchii pamięci, np. procesor o architekturze Harvard-Princeton z oddzielnymi buforami L1 kodu i danych, dwa procesory z oddzielnymi buforami L1 i wspólną dalszą warstwą hierarchii pamięci, procesor z pamięcią buforową i sterownik wejścia-wyjścia, wykonujący bezpośredni dostęp pamięci z pominięciem pamięci buforowej. Uwaga: Spójność nie wymaga utrzymywania identycznej zawartości we wszystkich warstwach, a jedynie zagwarantowania, że każdy dostęp będzie dotyczył aktualnej wartości danej. 9

Metody utrzymania spójności opierają się na selektywnej zmianie stanu linii po stwierdzeniu zgodności adresu, przesłanie między buforami. Wymagają realizacji złożonych protokołów utrzymania spójności. Automat zrealizowany jest oddzielnie dla każdej linii, która może znajdować w następującym stanie: M modified linia ważna, jedyna aktualna kopia we własnym buforze, zawartość pamięci nieaktualna, E exclusive linia ważna, jedyna kopia we własnym buforze, identyczna z zawartością pamięci, I invalid linia nieważna, S- shared linia ważna, jednakowa kopia u wszystkich, identyczna z zawartością pamięci, O owned linia ważna, jednakowa kopia u wszystkich, u pozostałych stan S, zawartość pamięci nieaktualna. Nazwy protokołów utrzymania spójności pochodzą od zbioru obsługiwanych stanów MEI, MESI, MOESI. Im więcej stanów, tym mniej zbędnych unieważnień. Pamięć podręczna zawiera kopie danych zawartych w pamięci operacyjnej. Gdy następuje zmiana danych w pamięci podręcznej (np. modyfikacja w wyniku wykonania operacji przez procesor) zawartość komórek pamięci operacyjnej i pamięci podręcznej o tym samym adresie różnią się. Aby zlikwidować tę niespójność stosowane są dwie metody: uaktualnianie natychmiastowe (ang. write through), zapis nowej zawartości do pamięci operacyjnej następuje od razu po zakończeniu zapisu do pamięci podręcznej, uaktualnianie opóźnione (ang. write back), zapis nowej zawartości do pamięci operacyjnej nie następuje od razu po zakończeniu zapisu do pamięci podręcznej a dopiero wtedy, gdy dany blok w pamięci podręcznej jest zastępowany nowym blokiem sprowadzonym z pamięci operacyjnej. Po zapisie pamięci podręcznej następuje jedynie zmiana bitu stanu w bloku, wskazująca, że blok został zmodyfikowany. Uaktualnianie opóźnione jest bardziej ekonomiczne czasowo, dlatego, że jeśli poszczególne komórki bloku były wielokrotnie modyfikowane w czasie gdy pozostawały w pamięci podręcznej, ich uaktualnienie wykonane jest jednokrotnie. 10

Zarządzanie pamięcią. Pamięć wirtualna. Pamięć operacyjna, obok procesora, jest kluczowym zasobem systemu komputerowego dla wykonywania programów. Zarządzanie pamięcią jest jednak dość skomplikowane, ponieważ jej poszczególne części są w tym samym czasie wykorzystywane przez wiele procesów oraz przez jądro systemu operacyjnego. Stabilność pracy systemu komputerowego wymaga odpowiedniej ochrony przestrzeni użytkowników i jądra systemu. Podstawowe zadania, realizowane w ramach zarządzania pamięcią operacyjną obejmują przydział pamięci i jej odzyskiwanie, ochronę, udostępnianie w celu współdzielenia, transformację adresów oraz transfer danych. Zadania te podzielone są między układy sprzętowe na poziomie architektury komputera, a system operacyjny. Ze względu na efektywność realizacji, niektóre zadania są realizowane przez odpowiednie układy sprzętowe. Zadaniem systemu jest dostarczenie tym układom odpowiednich danych, które wynikają z wcześniejszych decyzji o przydziale pamięci, co należy do kompetencji systemu operacyjnego. Pamięć wirtualna jest techniką pozwalającą na sztuczne zwiększenie ilości pamięci RAM poprzez użycie w jej charakterze pamięci masowej (np. twardego dysku). Ogólna organizacja pamięci wirtualnej Pamięć wirtualna jest techniką programową a także sprzętową gospodarowania pamięcią operacyjną RAM pozwalającą na przydzielanie pamięci dla wielu procesów, zwalnianie jej i powtórne przydzielanie, w ilości większej niż rzeczywista ilość pamięci fizycznej zainstalowanej w komputerze poprzez przeniesienie danych z ostatnio nie używanej pamięci do pamięci masowej (np. twardego dysku), w sytuacji gdy procesor odwołuje się do danych z pamięci przeniesionej na dysk przesuwa się te dane do pamięci w wolne miejsce, a gdy brak wolnej pamięci zwalnia się ją przez wyżej opisane przerzucenie jej na dysk. Najczęściej spotykane są dwa sposoby przechowywania danych zrzuconych z pamięci fizycznej na dysk. Pierwszy, stosowany w systemach rodziny Windows polega na zapisie pamięci w pliku znajdującym się na ustalonej partycji komputera. Drugi, stosowany w systemach z rodziny UNIX to utworzenie osobnej partycji wymiany (partycji swap) przeznaczonej wyłącznie na pamięć wirtualną. Zapewnia to szybszy dostęp do danych niż pierwsze rozwiązanie (głównie ze względu na ominięcie obsługi systemu plików). 11

Wyróżniamy kilka sposobów zarządzania pamięcią operacyjną w systemie: segmentacja, stronicowanie czy segmentacja ze stronicowaniem. SEGMENTACJA Segmentacja pamięci jedna z metod ochrony pamięci, używana przy wielozadaniowości. Każdy proces otrzymuje swój własny obszar pamięci, realizowany poprzez rejestry segmentowe. Segmentacja pamięci polega na podzieleniu przez procesor pamięci fizycznej na: adres bazowy fizyczny adres początku segmentu w pamięci, rozmiar długość segmentu w ustalonych jednostkach (np. w bajtach, paragrafach), atrybuty określające rodzaj zawartości i dostępność (np. kod programu, dane tylko do odczytu, stos itp., pierścień ochrony) na potrzeby weryfikacji poprawności odniesień, identyfikator (określany też jako nazwa lub numer) wartość wskazująca na opis segmentu w tablicy segmentów (najczęściej indeks w tablicy segmentów). Jeśli identyfikatorem segmentu jest indeks, to jego wartość nie jest przechowywana w deskryptorze, ale wynika z lokalizacji deskryptora w tablicy. System tworzy takie segmenty na żądanie aplikacji, przekazując jej jedynie identyfikatory nie pozwalające na odczytanie parametrów segmentów. Programy odwołują się zatem do kolejnych komórek pamięci w ramach należących do nich segmentów, nie wiedząc nic o tym, w jakie miejsca pamięci fizycznej trafiają odwołania do nich. Procesy nie mają też prawa widzieć segmentów należących do innych programów w czasie przekazywania kontroli procesowi system musi zablokować definicje segmentów należących do pozostałych procesów, przy każdym przełączeniu blokując segmenty wyłączanego programu i na nowo uaktywniając segmenty programu aktywowanego. 12

SEGMENTACJA NA PROCESORZE INTEL 80386 PROCES TŁUMACZENIA ADRESU WIRTUALNEGO NA LINIOWY Kiedy proces odwołuje się do pamięci z odpowiedniego rejestru segmentowego (CS, SS, DS, ED, FS, GS) pobierany jest selektor segmentu. Na jego podstawie odnajdowany jest odpowiadający mu deskryptor: wartość w polu TI (wskaźnik tablicy - w związku z istnieniem dwóch tablic deskryptorów: lokalnej i globalnej - bit ten wskazuje o która tablicę chodzi: 0 - globalna, 1 - lokalna) określa tablicę, numer deskryptora jest indeksem w tej tablicy, a wartość RPL (poziom ochrony zadania żądającego dostępu) musi być mniejsza lub równa od numeru uprawnienia wskazywanego przez selektor (w przeciwnym przypadku generowane jest przerwanie wewnętrzne). Z deskryptora pobierany jest adres bazowy i dodawany do przesunięcia - w ten sposób wyliczony zostaje adres liniowy. ZALETY SEGMENTACJI Skuteczna, prosta relokacja kodu i danych nieważne jest, gdzie w pamięci fizycznej znajduje się segment, program może odwoływać się do kolejnych słów pamięci w ramach segmentu, licząc od zera do końca segmentu Bardzo dobra ochrona, wynikająca ze struktury logicznej przestrzeni adresowej Możliwość łatwego współdzielenia kodu oraz danych Brak wewnętrznej fragmentacji Wyższy stopień wieloprogramowości 13

WADY SEGMENTACJI Komplikacja modelu programowego (dwuelementowy adres) Problematyczna i niewydajna dynamiczna alokacja Praktycznie nierealizowalna pamięć wirtualna Duże ograniczenia na rozmiary segmentów co zmuszało do dzielenia kodu programów oraz bloków danych w sposób nienaturalny, utrudniając tworzenie wielkich struktur danych (te ograniczenie zostało później zniesione, ale dzielenie programu na logiczne części jest dalej skomplikowane) STRONICOWANIE Stronicowanie jeden ze sposobów rozwiązania problemu zewnętrznej fragmentacji, polegający na dopuszczeniu nieciągłości rozmieszczenia logicznej przestrzeni adresowej procesu w pamięci fizycznej. Jest to podział pamięci na mniejsze obszary o ustalonej lub zmiennej wielkości i przydzielanie tym blokom adresów fizycznych lub logicznych. 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. 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. 14

STRONICOWANIE NA PROCESORZE INTEL 80386 Procesory 80386 i nowsze pracujące w trybie chronionym umożliwiają dowolne mapowanie adresów logicznych na adresy fizyczne. 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ęć (4GB) dzielona jest na bloki strony o rozmiarach 4kB; w procesorach Pentium i nowszych możliwe jest także używanie stron o rozmiarach 4MB. Gdy program odwołuje się do pamięci, a więc podaje 32-bitową liczbę numer komórki pamięci jest ona rozbijana na trzy 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. Zatem adres fizyczny na który zamapowano adres logiczny jest wyznaczany z dwóch składników: adresu fizycznego strony i przesunięcia. 15

Ponieważ jest to dość skomplikowana operacja, dlatego procesory posiadają pamięć podręczną (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: Bit obecności 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 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 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. STRONICOWANIE WIELOPOZIOMOWE Logiczna przestrzeń adresowa na 32-bitowej maszynie z rozmiarem strony 4KB powoduje, że tablica stron może zawierać do miliona wpisów. Ponieważ każda pozycja w tablicy stron ma 4B, więc każdy proces może wymagać do 4MB fizycznej przestrzeni adresowej na samą tylko tablicę stron. Jednym z rozwiązań jest stronicowanie wielopoziomowe. Idea stronicowania dwupoziomowego: Tablica stron podlega stronicowaniu Tablica stron pierwszego poziomu przechowuje numery stron w tablicy drugiego poziomu Każdej pozycji w tablicy stron pierwszego poziomu odpowiada tablica stron drugiego poziomu Tablica stron drugiego poziomu przechowuje numery stron 16

PRZYKŁAD STRONICOWANIA WIELOPOZIOMOWEGO ZALETY STRONICOWANIA Brak fragmentacji zewnętrznej Wspomaganie dla współdzielenia i ochrony pamięci Wyższy stopień wieloprogramowości Duża przestrzeń adresów wirtualnych WADY STRONICOWANIA Narzut czasowy przy transformacji adresu Narzut pamięciowy (na potrzeby tablicy stron) Fragmentacja wewnętrzna (niewielka) Obsługa wirtualnej pamięci stronicowanej wymaga wykonywania dużej liczby operacji. Szczególnie niekorzystne jest tutaj obciążanie czasu dostępu do danych i rozkazów czasem na dodatkowy dostęp do pamięci operacyjnej, związany z odczytem deskryptorów stron. Aby zredukować te dodatkowe nakłady czasu, w nowoczesnych mikroprocesorach wprowadzono odpowiednik pamięci podręcznej na deskryptory ostatnio wykorzystywanych stron. Jest to bardzo szybka pamięć nazywana buforem translacji adresów (ang. translation look-aside buffer - TLB). W czasie translacji adresów sprawdzana jest najpierw obecność deskryptora stron w buforze translacji adresów a dopiero przy negatywnym wyniku testu, podejmowane jest odczytanie i sprowadzenie do TLB deskryptora z pamięci operacyjnej. Dalszym krokiem w kierunku usprawnienia translacji adresów jest wprowadzenie w nowoczesnych mikroprocesorach wydzielonego sprzętowego bloku zarządzania pamięcią (ang. memory management unit - MMU). Blok zarządzania pamięcią działa w oparciu o bufor translacji adresów oraz rejestry, w których są przechowywane bieżące wskaźniki do wszelkich tablic wykorzystywanych przy konwersji adresów wirtualnych na fizyczne. 17

Usytuowanie Bloku Zarządzania Pamięcią Wirtualną w komputerze Blok MMU sprawdza czy deskryptor strony dla danego adresu wirtualnego jest w TLB. Jeśli tak, to MMU generuje adres fizyczny słowa dla pamięci operacyjnej. Jeśli brak deskryptora w TLB, to MMU sprowadza deskryptor z pamięci operacyjnej, zarządzając przy tym szyną tej pamięci, i uaktualnia tablicę TLB. Następnie w zależności od tego czy dana strona rezyduje w pamięci operacyjnej czy nie, MMU wykonuje translację adresu na adres rzeczywisty albo zarządza wczytanie strony do pamięci operacyjnej z pamięci pomocniczej. SEGMENTACJA ZE STRONICOWANIEM Segmentacja ze stronicowaniem stanowi połączenie technik segmentacji i stronicowania. Z punktu widzenia procesu, pamięć logiczna składa się z szeregu segmentów. Jednak poszczególne segmenty nie są rozmieszczone w pamięci fizycznej w spójny sposób. Są one dzielone na strony i każda strona może być pamiętana w dowolnej ramce. Tak więc adres logiczny składa się z numeru segmentu i adresu w obrębie segmentu. Na podstawie numeru segmentu można wyznaczyć tablicę stron określającą rozmieszczenie stron tworzących segment. Podobnie jak w przypadku stronicowania, możemy mieć do czynienia ze stronicowaniem wielopoziomowym, jak również z podręczną tablicą stron. Dzięki połączeniu technik segmentacji i stronicowania, możemy z jednej strony przydzielać procesom wiele segmentów, czy współdzielić segmenty, a z drugiej strony unikamy fragmentacji zewnętrznej. 18

SCHEMAT TŁUMACZENIA ADRESU LOGICZNEGO NA FIZYCZNY W PROCESORZE INTEL 80386 W przypadku tego procesora, segment jest identyfikowany przez tzw. selektor. Selektor jest tłumaczony na tzw. deskryptor, który po dodaniu do adresu w obrębie segmentu tworzy logiczny adres liniowy. Adres ten jest następnie tłumaczony na adres fizyczny poprzez dwustopniową tablicę stron. Adres tablicy stron pierwszego rzędu jest przechowywany w specjalnym rejestrze procesora, tzw. rejestrze bazowym tablicy stron. 19

ZALETY SEGMENTACJI ZE STRONICOWANIEM Eliminacja fragmentacji rozmieszczenie segmentów w różnych obszarach pamięci operacyjnej oraz fakt, iż segment nie musi być ciągły Wirtualność pamięci całkowita długość programu może przekraczać długość pamięci fizycznej Możliwość współdzielenia obszarów pamięci (wykorzystanie segmentów przez różnych użytkowników) Możliwość ochrony danych WADY SEGMENTACJI ZE STRONICOWANIEM Wzrost kosztów sprzętu (np. dodatkowe rejestry) Zużycie czasu procesora na obsługę tablic oraz odwzorowania adresów logicznych na fizyczne Trudniejsza kontrola poprawności kodu Translacja adresu pamięci wirtualnej z segmentacją i stronicowaniem Budowa deskryptora segmentu w pamięci segmentowanej ze stronicowaniem. 20