Editing Realizacja pamięci wirtualnej

From Obrona

Warning: You are not logged in. Your IP address will be recorded in this page's edit history.
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Current revision Your text
Line 1: Line 1:
-
==Pamięć wirtualna==
 
'''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).
'''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).
Line 6: Line 5:
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).
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).
-
==Stronicowanie==
 
Pamięć wirtualna jest najczęściej zaimplementowana przy użyciu stronicowania. Procesor gospodaruje wówczas pamięcią w blokach będących wielokrotnością strony o jednakowej wielkości (w procesorach Pentium 4 kB lub 4 MB). Procesy (poza procesem zarządzania pamięcią) "widzą" pamięć poprzez adresy logiczne. Gdy proces rezerwuje pamięć proces rządzący pamięcią przydziela blok opisujący parametry tej pamięci w tablicy stron (adres logiczny, wielkość, adres fizyczny, warunki użycia i inne informacje umożliwiające gospodarowaniem pamięcią).  
Pamięć wirtualna jest najczęściej zaimplementowana przy użyciu stronicowania. Procesor gospodaruje wówczas pamięcią w blokach będących wielokrotnością strony o jednakowej wielkości (w procesorach Pentium 4 kB lub 4 MB). Procesy (poza procesem zarządzania pamięcią) "widzą" pamięć poprzez adresy logiczne. Gdy proces rezerwuje pamięć proces rządzący pamięcią przydziela blok opisujący parametry tej pamięci w tablicy stron (adres logiczny, wielkość, adres fizyczny, warunki użycia i inne informacje umożliwiające gospodarowaniem pamięcią).  
Adresy logiczne są tłumaczone na ich fizyczne odpowiedniki przy pomocy tablicy stron. Ta znajdująca się w RAM struktura zawiera informacje o tym, gdzie w danej chwili znajduje się dana strona. Tablica stron pamięci jest najczęściej buforowana poprzez bufor TLB, zawierający kilkadziesiąt (zwykle ok. 32) wpisów, do których w ostatnim czasie nastąpiło odwołanie.  
Adresy logiczne są tłumaczone na ich fizyczne odpowiedniki przy pomocy tablicy stron. Ta znajdująca się w RAM struktura zawiera informacje o tym, gdzie w danej chwili znajduje się dana strona. Tablica stron pamięci jest najczęściej buforowana poprzez bufor TLB, zawierający kilkadziesiąt (zwykle ok. 32) wpisów, do których w ostatnim czasie nastąpiło odwołanie.  
-
'''Stronicowanie''' jest jednym ze sposobów rozwiązania problemu zewnętrznej fragmentacji polegającym na dopuszczeniu nieciągłości logicznej przestrzeni adresowej procesu.
 
-
 
-
Podstawowa metoda stronicowania:
 
-
* Pamięć fizyczną dzieli się na bloki stałej długości zwane ramkami
 
-
* Pamięć logiczną dzieli się na bloki stałej długości zwane stronami
 
-
* Rozmiar strony i ramki jest identyczny
 
-
* Przy wykonaniu procesu strony z pamięci pomocniczej są wprowadzane w dowolne ramki pamięci operacyjnej
 
-
 
-
W systemach komputerowych podział pamięci na mniejsze  obszary o ustalonej lub zmiennej wielkości przydzielanie tym blokom adresów fizycznych lub logicznych.
 
-
 
-
===Stronicowanie pamięci fizycznej===
 
-
Stronicowanie pamięci wykonuje się z powodu ograniczenia przestrzeni adresowej procesora (stronicowanie fizyczne), takie stronicowanie stosowano w systemach 8 i 16 bitowych w których instalowano więcej pamięci niż wynosi możliwość adresowania procesora.
 
-
 
-
W pamięciach Flash EEPROM zapis do pamięci następuje poprzez wypełnienie bufora (strony) i następnie na wybrany rozkaz bufor zostaje przeniesiony do pamięci co trwa od 1 ms do 10 ms.
 
-
 
-
===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 zadresować 1MB pamięci. Na początku lat dziewięćdziesiątych pojawiła się koncepcja wykorzystania w MS DOS pamięci w obszarze ponad 1MB, pamięc ta była dzielona na bloki (strony) o wielkości 16kB i w tej wielkości dostępna przez okienko o wielkości 64 kB w przestrzeni adresowej procesora.
 
-
 
 
-
===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'', w j. ang. ''paging''. Adresy logiczne obejmują całą przestrzeń adresową procesora, czyli 4GB, niezależnie od tego ile w rzeczywistości w danym komputerze zainstalowano pamięci. Zadaniem systemu operacyjnego jest odpowiednie zamapowanie adresów logicznych na adresy istniejącej pamięci fizycznej, natomiast zwykłe, użytkowe programy mogą '''zawsze''' 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:
 
-
# indeks w '''katalogu stron''' (liczba 10-bitowa),
 
-
# indeks w '''tablicy stron''' (liczba 10-bitowa),
 
-
# '''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.
 
-
 
-
Ponieważ jest to dość skomplikowana operacja, dlatego procesory posiadają pamięć podręczną ('''TLB''' — '''T'''ranslation '''L'''ookaside '''B'''uffer), w której pamiętane są ostatnio wyznaczone adresy fizyczne stron. TLB przechowuje 32, 64, 256 lub więcej pozycji.
 
-
 
-
[[Image:Stronicowanie386.png]] -- z powodu błędów przy próbie dodania pliku, pełna wersja z rysunkami znajduje się na http://education.wikia.com/wiki/PWr , lub na http://www.wikipedia.pl
 
-
 
-
Każda pozycja w ''tablicy stron'' przechowuje pewne dodatkowe informacje nt 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ą zawartość strony.
 
-
* '''Bit użycia''' (ang. ''dirty'') — jest ustawiany przez procesor, gdy nastąpi odwołanie do danej strony. System operacyjny chcąc zwolnić pamięć zapisuje pewne strony na dysku – wartość zerowa tego bitu, czyli brak odwołań do strony, jest sygnałem dla systemu, że może ją w pierwszej kolejności przenieść na dysk.
 
-
 
-
==Segmentacja pamięci==
 
Pamięć wirtualna może także działać w innych trybach - najpopularniejsze z nich to segmentacja i stronicowanie z segmentacją.
Pamięć wirtualna może także działać w innych trybach - najpopularniejsze z nich to segmentacja i stronicowanie z segmentacją.
Pierwsza implementacja tej techniki (w systemie UNIX) pojawiła się w systemie 3BSD, napisanym w Uniwersytecie Kalifornijskim w Berkeley.
Pierwsza implementacja tej techniki (w systemie UNIX) pojawiła się w systemie 3BSD, napisanym w Uniwersytecie Kalifornijskim w Berkeley.
-
 
-
'''Segmentacja pamięci''' - metoda ochrony pamięci używana przy wielozadaniowości. Każdy proces otrzymuje swój własny obszar pamięci, realizowany poprzez rejestry segmentowe.
 
-
 
-
Gdy proces próbuje odczytać bądź zapisać "nie swoje" dane (tzn. z innego obszaru), występuje błąd Naruszenie ochrony pamięci (bardziej znany jako <b>segmentation fault</b>), po czym (najczęściej) program się wyłącza. Czasami może to prowadzić do zawieszenia się komputera.
 
-
 
-
 
-
'''Segmentacja pamięci''' polega na podzieleniu przez system operacyjny pamięci fizycznej na fragmenty o określonym początku, rozmiarze, atrybutach i identyfikatorze. 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 fizyczne trafiają ich odwołania. 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.
 
-
Segmenty mają swoje zalety. Największą jest prostota relokacji kodu i danych: ponieważ nie jest ważne gdzie w pamięci fizycznej zakotwiczony jest segment, program może odwoływać się do kolejnych słów pamięci w ramach segmentu zawsze licząc od zera do końca segmentu. Konieczne dodawanie adresów realizuje sprzętowo układ zarządzający pamięcią — co za ulga dla systemu operacyjnego!
 
-
Okazuje się jednak, że wady segmentacji przeważyły nad zaletami. Pierwsze implementacje segmentowanej pamięci wirtualnej narzucały dość poważne ograniczenia na rozmiary segmentów zmuszając programistów do dzielenia kodu programów oraz bloków danych w sposób nienaturalny i utrudniając tworzenie naprawdę dużych struktur danych. Nawet po zniesieniu tego ograniczenia okazało się, że nikt nie chce bawić się w dzielenie programu na logiczne części, a normalną pracę systemu i programu można osiągnąć znacznie prostszymi środkami. Podsumowując: segmentacja jest rozwiązaniem bardzo eleganckim, lecz na tyle kłopotliwym, że obecnie praktycznie się jej nie stosuje.
 
-
 
{{WP-PL}}
{{WP-PL}}
[[Category:Wrocław University of Technology]]
[[Category:Wrocław University of Technology]]

Please note that all contributions to Obrona may be edited, altered, or removed by other contributors. If you don't want your writing to be edited mercilessly, then don't submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see Project:Copyrights for details). DO NOT SUBMIT COPYRIGHTED WORK WITHOUT PERMISSION!


Cancel | Editing help (opens in new window)
Personal tools