Rozwiązania zarządzania pamięcią w systemie Linux
Podstawowe informacje o pracy
Ilość stron: 6
Rodzaj pracy: Zaliczeniowa
Identyfikator pracy: 192
Ta praca jest bezpłatna.
Treść pracy
Zarządzanie pamięcią jest jednym z podstawowych zadań każdego systemu operacyjnego. Wynika to ze specyfiki pracy systemów operacyjnych, które swoje działanie opierają o wykorzystanie pamięci. Dlatego też odpowiednie rozwiązanie zagadnień związanych z właściwym zarządzaniem dostępnymi pamięciami jest problemem szczególnie istotnym.
Niniejsza praca skupia się na zagadnieniach związanych z zarządzaniem pamięcią w systemie Linux.
System operacyjny Linux wykorzystuje pamięć fizyczną, do której zaliczyć można:
· rejestry, czyli zmienne procesora, na których realizowane są operacje procesora;
· cache, czyli pamięć procesora, traktowana jako bardzo szybki RAM;
· RAM, czyli pamięć główna komputera, w której znajdują się dane i kody procesów w danej chwili wykonywanych;
· pamięć pomocnicza, którą najczęściej jest dysk twardy, przechowujący trwale duże ilości danych.
System Linux dokonuje logicznego podziału pamięci na bloki o ustalonej wielkości, określane mianem ramek. Wielkość ramki to najczęściej 4096 bajtów. Ich przydział i zwalnianie odnosi się do całości ramki. Podstawowymi zaletami takiego rozwiązania jest łatwość zarządzania zasobami pamięci, jak również brak fragmentacji zewnętrznej. Podstawowymi wadami jest tu dokonywanie fragmentacji wewnętrznej i narzut systemowy związany z utrzymaniem niezbędnych struktur danych. Strona, czyli „page” ma w systemie Linux określoną strukturę, definiowaną przez pola struktury, do których zaliczyć można:
· inode, offset;
· next, prev – dwukierunkowa lista stron;
· next_hash, prev_hash – tablica haszująca stron;
· Wait – jest to kolejka procesów, które czekają na zakończenie operacji wejścia – wyjścia na danej ramce;
· count – licznik procesów odwołujących się do ramki;
· buffers – lista buforów zaalokowanych na ramkę;
· age – wiek ramki;
· flags – flagi.
System Linux wykorzystuje również pamięć wirtualną przydzielając każdemu procesowi przestrzeń adresową, która jest przez procesy widziana jako spójny i jednolity fragment pamięci. Faktycznie jednak poszczególne fragmenty są umieszczone w różnych miejscach. Do podstawowych zalet takiego rozwiązania zaliczyć należy brak ograniczeń sprzętowych związanych z wielkością procesu, jak i możliwość pokrywania się adresów procesów. Niewątpliwą zaletą jest również brak konieczności zapewniania procesowi spójnego fragmentu pamięci. Przedstawiane rozwiązanie ma jednak również wady, do których zaliczyć należy konieczność przeliczania adresów logicznych na fizyczne. Następuje również wydłużenie czasu dostępu do pamięci i konieczne jest wspieranie takiego rozwiązania przez sprzęt.
Rysunek 1. Proces tłumaczenia adresu logicznego na fizyczny w systemie Linux
Źródło: http://rainbow.mimuw.edu.pl/SO/LinuxPrezentacje/PAMIEC/P4/sld009.htm
Pamięć wirtualna jest zorganizowana w taki sposób, że procesy uruchomione przez użytkownika mogą odwoływać się do adresów wirtualnych w przestrzeni 0-4 GB. Odbywa się to przy założeniu, że górny gigabajt (przestrzeń między 3 a 4 GB) jest widoczna wyłącznie w trybie jądra systemu. W przestrzeni 0-3 GB umieszczane są dane i kod procesu. W sytuacji, gdy dany proces odwołuje się do adresu wirtualnego następuje jego tłumaczenie na adres fizyczny. Zadanie to zostało powierzone jednostce zarządzania pamięcią MMU (ang. Memory Management Unit). Jednocześnie jeden z rejestrów procesora przechowuje adres tablicy stron.
Tłumaczenie adresu logicznego w opisywanym systemie opiera się o adresy 32 bitowe, co umożliwia zaadresowanie 4 GB pamięci. Obszar 32 bitów podzielony jest na dwie części. Pierwsza z nich ma 20 bitów i zawiera numer strony procesu, druga ma 12 bitów i odnosi się do przesunięcia na stronie. Graficzne przedstawienie omawianego podziału przedstawia rysunek 1.
Linux w procesie zarządzania pamięcią wykorzystuje również tablice stron procesu. Każda z takich tablic ma wielkość jednej ramki, czyli 4096 bajtów, co umożliwia przechowywanie czterech adresów o wielkości 1 kilobajta. Przedstawienie podziału tablic zobrazowano na rysunku 2.
Rysunek 2. Proces tłumaczenia adresu logicznego na fizyczny w systemie Linux
Źródło: http://rainbow.mimuw.edu.pl/SO/LinuxPrezentacje/PAMIEC/P4/sld010.htm
Tablice stron wykorzystują również flagi do oznaczenia adresów ramek. Wyróżnia się następujące rodzaje flag:
· PRESENT – określa obecność ramki w pamięci;
· RW – określa, czy można zapisać;
· USER – określa poziom ochrony w relacji użytkownika i systemu;
· PWT – nie używany;
· PCD – nie używany;
· ACCESSED – określa, czy miało miejsce odwołanie do strony;
· DIRTY – określa, czy dana strona była modyfikowana;
· 4K – czy dana ramka jest wielkości 4 KB.
Linux zapewnia również strukturę dla pamięci procesu. Do podstawowych pól struktury mm_struct, zalicza się:
· count – jest to licznik procesów, które współdzielą strukturę;
· start_code, end_code;
· start_data, end_data;
· start_stack;
· context;
· rss – ilość ramek przyznanych procesowi;
· *_flt – statystyka błędów braku strony;
· mmap – lista obszarów;
· mmap_avl – drzewo avl obszarów;
· swappable – określa, czy proces może zostać pozbawiony ramek;
· pgd_t – katalog stron.
Dodatkowo przewidziano również segmentację pamięci wirtualnej procesu. Po pól struktury vm_area_struct, zaliczyć należy:
· vm_start – początek obszaru, który jest jednocześnie kluczem dla avl;
· vm_end – koniec obszaru;
· vm_page_port – znaczniki ochrony;
· vm_flags – flagi;
· vm_avl_right, vm_avl_left – lewy i prawy syn;
· vm_avl_height – głębokość w ramach drzewa avl;
· vm_next – lista obszarów;
· vm_next_share, vm_prev_share – obszar dzielony;
· vm_ops – operacje na obszarze;
· vm_inode, vm_offset;
· vm_mm – jest wskaźnikiem do struktury mm_struct.
Schematyczne przedstawienie pamięci wirtualnej procesu zawarto na rysunku 3.
Rysunek 3. Pamięć wirtualna procesu w Linux
Źródło: http://rainbow.mimuw.edu.pl/SO/LinuxPrezentacje/PAMIEC/P4/sld014.htm
Omawiany system operacyjny zapewnia również mechanizmy umożliwiające stronicowanie plików, polegające na odwzorowaniu danych zawartych w plikach dyskowych na przestrzeń wirtualną procesu. Umożliwia to realizację stronicowania na żądanie, co musi być jednak wspomagane przez system plików. Podstawowym zastosowaniem omawianych mechanizmów jest inicjowanie struktur procesu poprzez funkcję exec. Stronicowanie plików umożliwia dołączanie plików do przestrzeni adresowej procesu, ale jest również wykorzystywane do tworzenia obszarów, które nie są związane z plikiem.
Opisywane rozwiązania mogą powodować powstawanie błędów związanych z brakiem lub ochroną strony. Do podstawowych przyczyn powstawania błędów braku strony, czyli odwołania się do strony, która nie znajduje się w ramach pamięci operacyjnej, zaliczyć należy błąd w wyliczeniu adresu i stronicowanie na żądanie. W przypadku błędu ochrony strony, związanymi z próbami pisania lub czytania strony, do której nie ma odpowiednich praw, najczęstszymi przyczynami są próby zapisu obszaru pamięci, do którego dany użytkownik ma tylko prawa odczytu lub kopiowanie przy zapisie.
Istotnym zagadnieniem jest również mechanizm zarządzania spójnymi obszarami wolnej pamięci. Każdy proces użytkownika skutkuje zwolnieniem i otrzymaniem wyłącznie jednej ramki. W określonych sytuacjach jądro systemu wymaga spójnego obszaru większego, niż jedna ramka. Konieczne jest również trzymanie informacji o wolnych spójnych obszarach.
Dostęp bezpłatny
Dostęp do tej pracy jest bezpłatny.
Podobne prace
Taktyka przesłuchiwania dzieci
Rodzaj pracy: Magisterska | Stron: 91