Podstawowe zagadnienia informatyki Artur Opaliński (pokój E112) e-mail: (p. wykład administracyjny) URL: (p. wykład administracyjny) Obsługa pamięci
Treść wykładu Adresowanie pamięci Architektury pamięci Adresacja Adresowanie bajtów a słów Endianess Dopasowanie (Data Alignment) Zarządzanie pamięcią przez OS Zadania Podział pamięci miedzy procesy Podział przestrzeni pamięci procesu Mechanizm stronicowania Pamięć wirtualna 2
Support for Yoda Master Slajdy nie były przygotowane z myślą o samodzielnej nauce. Przyjdź na wykład, żeby je lepiej zrozumieć! Zdobądź punkty bonusowe: Korzystając z informacji z wykładu, Internetu, własnych doświadczeń, itp. - opisz myśli z tej prezentacji dokładniej i złóż na Wiki! Zaznacz, które numery slajdów omawiasz 3
Adresowanie pamięci Architektura von Neumanna Wspólna pamięć na dane i kod Architektura harwardzka Pamięć danych i kodu rozdzielona Oddzielna przestrzeń adresowa Oddzielne ścieżki pamięć CPU Pamięć kodu jest tylko do odczytu Zmodyfikowana architektura harwardzka Z pamięci kodu można czytać dane Zmodyfikowana architektura von Neumana Oddzielne pamięci cache na dane i instrukcje 4
Test Która architektura jest najlepsza? von Neumanna harwardzka zmodyfikowana harwardzka zmodyfikowana von Neumana 5
Adresowanie pamięci Komórka (cell) najmniejsza jednostka pamięci którą CPU może odczytać lub zapisać. Typowo bajt (byte) Słowo jednostka pamięci, którą CPU może sprzętowo w całości odczytać lub zapisać; przeważnie większe od komórki Przeważnie wielokrotność 2 n, ze względu na ominięcie mnożenia/dzielenia Obecnie przeważnie 32, 64 lub 128 bitów Intel: double word (dword), quadruple word (qword), double quadruple word (dqword) M$: octuple word (oword) 6
Adresowanie pamięci Każda komórka pamięci ma swój niepowtarzalny adres Liczba całkowita Przylegające do siebie (logicznie) komórki maja adresy różniące się o 1 CPU podaje adres pamięci komórki, żeby się do niej dostać Przestrzeń adresowa CPU to zakres możliwych adresów Zazwyczaj liczb całkowitych od 0 do (2 n -1) 7
Adresowanie pamięci Adresowanie bajtów 8
Adresowanie pamięci (c) www.masters-of-the-void.com 9
Adresowanie pamięci Adresowanie słów wielobajtowych 10
Adresowanie pamięci Kolejność bajtów Big-Endian najbardziej znaczący bajt (najstarszy, skrajny lewy) ma najniższy adres Zatem adres słowa to adres najstarszego bajtu Np. procesory RISC: SPARC, PowerPC, PA-RISC, MIPS Little-Endian najmniej znaczący bajt (najmłodszy, skrajny prawy) ma najniższy adres Zatem adres słowa to adres najmłodszego bajtu np. procesory Intel 80x86 11
Adresowanie pamięci Kolejność bajtów 12
Adresowanie pamięci Kolejność bajtów Interpretacja struktur danych większych niż bajt Łańcuch: cele 0x63 0x65 0x6C 0x65 (big-endian) 0x65 0x6C 0x65 0x63 (little-endian) Ale: 0x65 0x6C 0x65 0x63 elec (big-endian) unsigned int, 32 bity: 0x01 02 03 04 = 16 909 060 (big-endian) Ale: 0x04 03 02 01 = 67 305 985 (little-endian) Istotne przy transferze danych między odmiennymi architekturami 13
Test Jak zapewnić transfer danych w Internecie, gdzie komunikują się urządzenia o różnych -endianess? 14
Adresowanie pamięci Dopasowanie do komórek (alignment) W przypadku adresowania słów wielobajtowych, dane idealnie powinny zawsze zaczynać się i kończyć na granicy słowa Dane nie zawsze są wielokrotnością słowa... Jeżeli kończą się wcześniej (pod niższym adresem niż koniec słowa), można uzupełnić komórki pamięci dowolnymi wartościami (padding) Jeżeli (stanowiące słowo) starsze i młodsze bajty danych nie byłyby zapisane w jednym słowie pamięci trzeba pobierać ich ciąg dalszy z kolejnych słów Pogorszona wydajność Utrata atomowości dostępu do słowa Padding w C realizowany jest automatycznie 15
Zarządzanie pamięcią przez system operacyjny Systemy jednozadaniowe jeden program dysponował prawie całymi zasobami np. pamięci komputera aż do swojego zakończenia Systemy wielozadaniowe z podziałem czasu (time shared multitasking) Lepsze wykorzystanie czas procesora Mniejszy wpływ opóźnień I/O Wiele zadań/programów realizowanych jest we wspólnej pamięci w tym samym czasie System operacyjny (OS) zarządza wspólną pamięcią 16
Zarządzanie pamięcią przez OS Zadania Ochrona procesy zasadniczo nie powinny mieć dostępu do pamięci używanej przez inne procesy Identyfikacja jeżeli procesy wspólnie użytkują pewną cześć pamięci (współdzielenie), ta wspólna część pamięci powinna mieć swój jednoznaczny identyfikator Przejrzystość zasadniczo procesy nie powinny zajmować się technicznymi szczegółami współdzielenia, lecz korzystać z niego Wydajność zarządzanie pamięcią nie może znacząco obciążać systemu 17
Zarządzanie pamięcią przez OS Podział pamięci między procesy Pamięć dynamicznie alokowana procesom Proces zgłasza zapotrzebowanie na określoną ilość pamięci OS wyszukuje wolny obszar pamięci i przydziela go dla procesu Proces zgłasza zwolnienie niepotrzebnych obszarów pamięci Zwalnianie niepotrzebnych obszarów pamięci prowadzi do fragmentacji np. przydzielono pamięć dla procesów A,B,C, a następnie proces B zwolnił przydzieloną sobie pamięć Strategie alokacji Best fit Worst fit First fit Next fit 18
Zarządzanie pamięcią przez OS Podział pamięci między procesy Strategia Best fit Proces uzyskuje pamięć z najmniejszego blok nieprzydzielonej nikomu pamięci, który ma wystarczającą wielkość Trzeba w tym celu przejrzeć wszystkie wolne bloki Fragmentacja najbardziej uciążliwa, gdyż pozostają drobne fragmenciki pamięci, które nie wystarczają dla żadnego z procesów (fragmentacja zewnętrzna) ew. czasami przydziela się procesowi większy blok, niż żądano (ukrywanie fragmentacji) 19
Zarządzanie pamięcią przez OS Podział pamięci między procesy Strategia Worst fit Proces uzyskuje pamięć w największym bloku nieprzydzielonej nikomu pamięci Zapobiega drobnym fragmencikom tworzonym przez Best fit Trzeba w tym celu przejrzeć wszystkie wolne bloki 20
Zarządzanie pamięcią przez OS Podział pamięci między procesy Strategia First fit Proces uzyskuje pamięć w pierwszym bloku nieprzydzielonej nikomu pamięci, który ma wystarczającą wielkość Menedżer pamięci nie musi przeglądać wszystkich bloków Z czasem na początku listy wolnych bloków pozostają już tylko bloki małe, mało przydatne Fragmentacja mniejsza niż w Best fit 21
Zarządzanie pamięcią przez OS Podział pamięci między procesy Strategia Next fit Proces uzyskuje pamięć w pierwszym bloku nieprzydzielonej nikomu pamięci, który ma wystarczającą wielkość Menedżer pamięci nie musi przeglądać wszystkich bloków Przeglądanie listy wolnych bloków zaczyna się od miejsca, gdzie menedżer znalazł pasujący blok poprzednio Małe bloki nie akumuluja się na początku listy 22
Test Która strategia jest najefektywniejsza? Best fit Worst fit First fit Next fit 23
Zarządzanie pamięcią przez OS Podział pamięci między procesy Defragmentacja (compaction) Usuwanie fragmentacji poprzez przesunięcie przydzielonych bloków pamięci w jeden koniec przestrzeni pamięci Tym samym wolne fragmenty łączą się w drugim końcu pamięci Wady: Koszt kopiowania bloków pamięci Problem uaktualnienia informacji o nowych adresach bloków w poszczególnych procesach 24
Podział przestrzeni pamięci procesu Stos historycznie lokalizowany na końcu pamięci, stąd przyrastający w dół, aż do wyznaczonej granicy (stack overflow). Wielkość stosu zmienia się dynamicznie w trakcie wykonania programu. W Windows XP 32 stos jest na początku pamięci Sterta (heap) obszar pamięci z którego pamięć jest przydzielana (alokowana) dynamicznie, przeważnie wyraźnie większymi porcjami niż na stosie, i w sposób bardziej złożony BSS (historycznie: Block Started by Symbol) Segment zawierający zmienne początkowo wypełnione zerami, które istnieję przez cały czas życia procesu (zmienne globalne, zmienne statyczne niezainicjalizowane lub zainicjalizowane zerami) 25
Podział przestrzeni pamięci procesu Sekcja stałych (rodata) Zawiera dane tylko do odczytu (stałe) Segment kodu (text segment) Do odczytu i z prawami wykonywania 26
Mechanizm stronicowania Pamięć fizyczna podzielona na fragmenty o stałych rozmiarach ramki stron (page frames) Do procesu prezentowana abstrakcyjna, jednolita, liniowa przestrzeń adresowa OS dzieli przestrzeń adresową aplikacji na fragmenty o stałych rozmiarach strony (pages) Ramki stron i strony mają ten sam rozmiar typowo kilka, kilkanaście KB, czasem kilka MB potęgi liczby 2 Strony przechowywane są w ramkach Adresy generowane przez proces są dynamicznie tłumaczone na tę fizyczną ramkę, która przechowuje zawartość potrzebnej strony 27
Mechanizm stronicowania Mapowanie stron na ramki Przestrzeń adresowa procesu Strona 3 Strona 2 Strona 1 Strona 0 Ramka 11 Ramka 10 Ramka 9 Ramka 8 Ramka 7 Ramka 6 Ramka 5 Ramka 4 Ramka 3 Ramka 2 Ramka 1 Ramka 0 Pamięć fizyczna podstawowa 28
Mechanizm stronicowania Mapowanie stron na ramki Przestrzeń adresowa procesu Strona 3 Strona 2 Strona 1 Strona 0 Ramka 11 Ramka 10 Ramka 9 Ramka 8 Ramka 7 Ramka 6 Ramka 5 Ramka 4 Ramka 3 Ramka 2 Ramka 1 Ramka 0 Pamięć fizyczna podstawowa 29
Mechanizm stronicowania Mapowanie stron na ramki Strona 11 Strona 10 Strona 9 Strona 8 Strona 7 Strona 6 Strona 5 Strona 4 Strona 3 Strona 2 Strona 1 Strona 0 Przestrzeń adresowa procesu Pamięć fizyczna podstawowa Ramka 5 Ramka 4 Ramka 3 Ramka 2 Ramka 1 Ramka 0 30
Mechanizm stronicowania Adresacja wirtualna Adresy, którymi posługuje się proces, nie są fizyczne, lecz wirualne Wirtualne adresy trzeba tłumaczyć na fizyczne Podzielić na numer strony oraz na offset na stronie Przetłumaczyć numer strony na identyfikator fizycznej ramki Dotrzeć do danych w fizycznej ramce pod podanym offsetem Ramka N ::::::::: Offset Ramka N-1 31
Mechanizm stronicowania Tłumaczenie stron (page( translation) Zamiana numeru strony na identyfikator ramki Proste rozwiązanie: tablica stron (page table) Liniowa tablica identyfikatorów ramek Indeksowana numerem strony Kontrola czy numer strony mieści się w zakresie przestrzeni adresowej procesu Odnalezienie identyfikatora ramki w tablicy stron Dodanie offsetu do adresu ramki 32
Mechanizm stronicowania Zalety Zapobiega fragmentacji tzw. zewnętrznej, omawianej poprzednio Wciąż występuje fragmentacja wewnętrzna: proces dostaje pamięć w rozmiarze wielokrotności strony, a być może potrzebuje mniej Znacząco upraszcza algorytm alokacji bloków pamięci OS przechowuje listę używanych i wolnych stron Na żądanie procesu OS przydziela mu strony z listy wolnych Łatwa forma ochrony pamięci Proces ma dostęp do ramki tylko wtedy, jeżeli jest tam jego strona pamięci Tym samym procesy nie mają dostępu do pamięci innych procesów 33 Umożliwia stosowanie wtórnej pamięci fizycznej
Mechanizm stronicowania Wady Tłumaczenie stron musi zachodzić przy każdym dostępie do pamięci Pobraniu każdej instrukcji do wykonania Pobraniu każdej danej dla instrukcji Realizuje Memory Management Unit (urządzenie między CPU a cache) Wielkość tablicy stron na każdy proces przy np. 32-bitowej adresacji, stronie 4kB, i 4 bajtach na wpis w tablicy? Kilka MB (razy ilość procesów) Przy 64-bitowej adresacji z konieczności dobiera się strony np. 2MB Gdzie przechowywać tak wielką tablicę z szybkim dostępem? 34 Dysk, RAM, cache CPU?
Mechanizm stronicowania Zawartość wpisu w tablicy stron Identyfikator fizycznej ramki Bit: obecna/nieobecna (strona w ramce) Zakres ochrony strony (odczyt, zapis, wykonanie) Znacznik modyfikacji strony zaznaczany, jeżeli nastąpi zapis do strony pamięci Znacznik użycia strony odświeżany przy każdym odwołaniu do strony 35
Pamięć wirtualna Proces prawie nigdy nie odwołuje się w krótkim czasie do całej swojej przestrzeni adresowej Większość stron przestrzeni adresowej pozostaje zawsze nieużywana Nieużywane strony pamięci procesu nie muszą zajmować miejsca w podstawowej pamięci fizycznej Wtórna pamięć fizyczna Obszar dysku (swap space, swap file, plik wymiany) Plik na dysku W razie potrzeby system operacyjny pobierze stronę zapisana na dysk do ramki ew. wcześniej zapisując poprzednią zawartość ramki na dysk 36
Pamięć wirtualna Zalety Pojemność pamięci wirtualnej to suma pamięci podstawowej (np. RAM) i wtórnej (np.swap space) W pamięci wirtualnej można uruchamiać programy, które nie zmieściłyby się w RAM W pamięci wirtualnej można uruchamiać wiele programów, które w sumie nie zmieściłyby się w RAM Wsparcie dla wielozadaniowości Dla wszystkich procesów adresy w pamięci wirtualnej można łatwo przestawić jako zaczynające się od 0 37
Mechanizm stronicowania Rozwiązania Przechowywanie tablic stron w RAM Tablice wielopoziomowe: jeżeli program używa tylko trochę kodu, danych i stosu, wystarczy mu tylko kilka wpisów z tablicy najwyższego poziomu np. przy 32-bitowej wirtualnej przestrzeni adresowej można rozbić tablice na 10+10+12 bitów Tablice stron też podlegają wyrzucaniu na dysk (paging) Wykorzystanie lokalności czasowej i przestrzennej Większość programów odwołuje się głównie do niewielkiej ilości stron Zakłada się, że w przyszłości proces będzie odwoływał się do tych samych co poprzednio lub pobliskich elementów pamięci 38
Co trzeba umieć? Pojęcie przestrzeni adresowej, adresu i adresacji Znaczenie kolejności bajtów w słowie (endianess) Przeznaczenie dopasowania danych (data alignment) Zakres i zasady zarządzania pamięcią przez wielozadaniowy system operacyjny Rozumieć podział przestrzeni adresowej procesu Zasadę działania oraz wady i zalety mechanizmu stronicowania, adresacji wirtualnej 39