• Nie Znaleziono Wyników

SYSTEMY OPERACYJNE

N/A
N/A
Protected

Academic year: 2021

Share "SYSTEMY OPERACYJNE"

Copied!
35
0
0

Pełen tekst

(1)

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

(2)

ZARZĄDZANIE PAMIĘCIĄ

(3)

PAMIĘĆ GŁÓWNA

(4)

Informacje

Ogólne

(5)

Zarządzanie Pamięcią

• Głównym celem systemu komputerowego jest wykonywanie programów

• Programy te wraz z danymi muszą, przynajmniej

częściowo, znajdować się w pamięci głównej podczas wykonywania

• Nowoczesne systemy komputerowe utrzymują kilka procesów w pamięci podczas wykonywania systemu

• Wybór schematu zarządzania pamięcią dla systemu zależy od wielu czynników

• Większość algorytmów wymaga jakiejś formy wsparcia sprzętowego

(6)

Pamięć Główna

• Pamięć ma kluczowe znaczenie dla funkcjonowania nowoczesnego systemu komputerowego

• Pamięć składa się z dużej tablicy bajtów, każdy z własnym adresem

• CPU pobiera instrukcje z pamięci zgodnie z wartością licznika programu

• Te instrukcje mogą powodować dodatkowe

ładowanie i przechowywanie pod określonymi adresami pamięci

(7)

Sprzęt Podstawowy

• Pamięć główna i rejestry wbudowane w każdy rdzeń procesora są jedyną pamięcią ogólnego

przeznaczenia, do której CPU ma bezpośredni dostęp

• Istnieją instrukcje maszynowe, które przyjmują adresy pamięci jako argumenty, ale żadne nie biorą adresów dyskowych

• Jeśli danych nie ma w pamięci, należy je tam

przenieść, zanim procesor będzie mógł na nich działać

(8)

Rejestry, Pamięć Główna, Pamięć Podręczna

• Rejestry wbudowane w każdy rdzeń procesora są dostępne w jednym cyklu zegara procesora

• Dostęp do pamięci głównej odbywa się poprzez transakcję na szynie pamięci

• Ukończenie dostępu do głównej pamięci może zająć wiele cykli zegara procesora

• Szybka pamięć podręczna jest dodawana między procesorem a pamięcią główną, zwykle w układzie procesora, w celu szybkiego dostępu

• Sprzęt zarządza pamięcią podręczną wbudowaną w procesor bez kontroli systemu operacyjnego

(9)

Ochrona Pamięci

• Aby zapewnić prawidłowe działanie systemu, musimy chronić system operacyjny przed dostępem procesów użytkowników, a także chronić procesy użytkowników przed sobą

• Ochronę tę musi zapewnić sprzęt, ponieważ system operacyjny zwykle nie ingeruje w dostęp procesora do pamięci

• Każdy proces musi mieć osobną przestrzeń pamięci

• Oddzielna przestrzeń pamięci na proces ma podstawowe znaczenie dla załadowania wielu

procesów do pamięci w celu współbieżnego wykonania

(10)

Rejestry Bazy i Limitu

• Aby określić zakres legalnych adresów, do których proces może uzyskać dostęp, można użyć dwóch rejestrów

• Rejestr bazowy zawiera najmniejszy legalny adres pamięci fizycznej; rejestr limitu określa rozmiar zakresu

• Rejestry podstawy i limitu mogą być ładowane tylko przez system operacyjny za pomocą specjalnej

uprzywilejowanej instrukcji

(11)

Rejestry Bazy i Limitu

(12)

Sprzętowa Ochrona Adresu

z Rejestrami Podstawy i

Limitu

• Każda próba dostępu do pamięci systemu

operacyjnego lub pamięci innych użytkowników przez program wykonywany w trybie

użytkownika powoduje pułapkę do systemu operacyjnego, który traktuje tę próbę jako błąd krytyczny

(13)

Memory Protection: Kernel Mode

• System operacyjny działający w trybie jądra otrzymuje nieograniczony dostęp zarówno do pamięci systemu operacyjnego, jak i pamięci użytkownika

• Dostęp ten pozwala systemowi operacyjnemu ładować programy użytkowników do pamięci, zrzucać te programy w przypadku błędów,

uzyskiwać dostęp i modyfikować parametry wywołań systemowych, wykonywać operacje

we/wy do i z pamięci użytkownika oraz zapewniać wiele inne usługi

(14)

Wiązanie Adresu

• Adresy w programie źródłowym są generalnie symboliczne (np. zmienna count)

• Kompilator zazwyczaj wiąże te adresy symboliczne z adresami relokowalnymi (np. „14 bajtów od

początku tego modułu”)

• Linker lub ładowarka z kolei wiąże adresy

relokowalne z adresami bezwzględnymi (np. 74014)

• Każde wiązanie jest mapowaniem z jednej przestrzeni adresowej na drugą

(15)

Wiązanie Adresu (2)

Klasycznie wiązanie instrukcji i danych z adresami pamięci można wykonać na dowolnym etapie:

1. Podczas kompilacji. Jeśli w czasie kompilacji

wiadomo, gdzie proces będzie się znajdować w pamięci, można wygenerować kod bezwzględny.

2. Podczas ładowania. Jeśli w czasie kompilacji nie jest znane, gdzie proces będzie rezydował w pamięci,

kompilator musi wygenerować kod relokowalny.

3. Podczas wykonania. Aby ten schemat działał, musi być dostępny specjalny sprzęt. Większość systemów operacyjnych korzysta z tej metody.

(16)

Moduł Zarządzania

Pamięcią (MMU)

• Mapowanie w czasie wykonania z adresów wirtualnych na fizyczne jest wykonywane przez urządzenie sprzętowe zwane

modułem zarządzania pamięcią (MMU)

(17)

Logiczna a Fizyczna Przestrzeń Adresowa

• Adres generowany przez CPU jest powszechnie określany jako adres logiczny, podczas gdy adres widziany przez

jednostkę pamięci – jako adres fizyczny

• Wiązanie adresów podczas kompilacji lub ładowania generuje identyczne adresy logiczne i fizyczne

• Jednak wiązanie adresów podczas wykonania skutkuje różnymi adresami logicznymi i fizycznymi

• Zbiór wszystkich adresów logicznych generowanych przez program jest logiczną przestrzenią adresową

• Zbiór wszystkich adresów fizycznych odpowiadających tym adresom logicznym jest fizyczną przestrzenią adresową

(18)

Logiczna a Fizyczna Przestrzeń Adresowa (2)

• Program użytkownika nigdy nie uzyskuje dostępu do rzeczywistych adresów fizycznych

• Program użytkownika zajmuje się adresami logicznymi

• Sprzęt do mapowania pamięci konwertuje adresy logiczne na adresy fizyczne

• Ostateczna lokalizacja adresu pamięci nie jest

określana, dopóki nie zostanie wykonane powiązanie

• Koncepcja logicznej przestrzeni adresowej, która jest powiązana z oddzielną fizyczną przestrzenią adresową, ma kluczowe znaczenie dla zarządzania pamięcią

(19)

Dynamiczna relokacja za

pomocą rejestru relokacji

• Rejestr bazowy nazywa się teraz rejestrem relokacji

• Wartość w rejestrze relokacji jest dodawana do każdego adresu wygenerowanego przez proces użytkownika w momencie wysyłania adresu do pamięci

(20)

Ładowanie Dynamiczne

• Cały program i wszystkie dane procesu muszą znajdować się w pamięci fizycznej, aby proces mógł zostać wykonany

• Rozmiar procesu jest ograniczony do rozmiaru pamięci fizycznej

• Aby uzyskać lepsze wykorzystanie przestrzeni pamięci, możemy zastosować ładowanie dynamiczne

• W przypadku ładowania dynamicznego procedura nie jest ładowana, dopóki nie zostanie wywołana. Wszystkie

procedury są przechowywane na dysku w przenośnym formacie

• Ładowanie dynamiczne nie wymaga specjalnego wsparcia ze strony systemu operacyjnego. Użytkownicy mają

obowiązek zaprojektować swoje programy tak, aby skorzystać z takiej metody

(21)

Łączenie Dynamiczne i Biblioteki Współdzielone

• Biblioteka łączona dynamicznie (DLL) to biblioteka, która łączona jest z programem wykonywalnym dopiero w

momencie jego wykonania

• Niektóre systemy operacyjne obsługują tylko łączenie

statyczne, w którym biblioteki są traktowane jak każdy inny moduł obiektowy i są łączone ładowarką w program binarny

• Przy statycznym łączeniu każdy program musi zawierać kopię biblioteki w pliku wykonywalnym. Zwiększa to nie tylko

rozmiar wykonywalnego pliku, ale może również marnować pamięć główną

• Biblioteki DLL mogą być współdzielone przez wiele

procesów, dzięki czemu tylko jedna instancja biblioteki znajduje się w pamięci głównej. Dynamiczne biblioteki są również znane jako biblioteki współdzielone

(22)

Biblioteki Dynamiczne

• Gdy program odwołuje się do procedury znajdującej się w bibliotece dynamicznej, moduł ładujący lokalizuje

bibliotekę

• Następnie dostosowuje adresy odwołujące się do funkcji w bibliotece do lokalizacji w pamięci, w której

przechowywana jest biblioteka DLL

• Biblioteka może zostać zastąpiona nową wersją, a wszystkie programy odwołujące się do biblioteki będą automatycznie korzystać z nowej wersji

• Informacje o wersji są zawarte zarówno w programie, jak i bibliotece

• Do pamięci można załadować więcej niż jedną wersję biblioteki

(23)

Łączenie Dynamiczne a Ładowanie Dynamiczne

• Łączenie dynamiczne jest podobne do ładowania dynamicznego

• W przeciwieństwie do ładowania dynamicznego, łączenie dynamiczne i biblioteki współdzielone zazwyczaj wymagają pomocy ze strony systemu operacyjnego

• Jeśli procesy w pamięci są chronione przed sobą, to system operacyjny jest jedyną jednostką, która

może umożliwić wielu procesom dostęp do tych samych adresów pamięci

(24)

Ciągły Przydział

Pamięci

(25)

Ciągły Przydział Pamięci

• Pamięć główna musi pomieścić zarówno system operacyjny, jak i różne procesy użytkownika

• Potrzebujemy przydzielać pamięć główną w najbardziej efektywny sposób

• Pamięć jest zwykle dzielona na dwie partycje: jedną dla systemu operacyjnego i jedną dla procesów

użytkownika

• W ciągłym przydziale pamięci każdy proces jest zawarty w pojedynczej sekcji pamięci, która

przylega do sekcji zawierającej następny proces

(26)

Ochrona Pamięci

• Gdy planista wybierze proces do wykonania, dyspozytor ładuje rejestry relokacji i limitu prawidłowymi wartościami jako część procesu przełączania kontekstu

• Schemat z rejestrem relokacji zapewnia skuteczny sposób na dynamiczne zmiany rozmiaru

przydzielonej pamięci

(27)

Przydział Pamięci

• Schemat ze zmiennymi rozdziałami – polega na przydzieleniu procesom rozdziałów

pamięci o zmiennej wielkości, gdzie każdy rozdział mieści dokładnie jeden proces

(28)

Schemat ze Zmiennymi Rozdziałami

• Gdy nadejdzie proces, system przeszukuje zbiór w poszukiwaniu dziury, która jest wystarczająco duża

• Jeśli dziura jest zbyt duża, dzieli się na dwie części

• Kiedy proces kończy wykonanie, uwalnia blok pamięci, który jest umieszczany z powrotem w zbiorze dziur

• Jeśli nowa dziura sąsiaduje z innymi dziurami, te

sąsiednie dziury są scalane, tworząc jedną większą dziurę

• Jest to szczególny przypadek problemu dynamicznego przydzielenia pamięci, który dotyczy sposobu spełnienia żądania rozmiaru n z listy wolnych dziur

(29)

Problem Dynamicznego Przydzielenia Pamięci

• Pierwsze dopasowanie. Przydziela się pierwszą dziurę, która jest wystarczająco duża. Wyszukiwanie można

rozpocząć albo na początku zbioru dziur, albo w miejscu, w którym zakończyło się poprzednie wyszukiwanie.

• Najlepsze dopasowanie. Przydziela się najmniejszą

dziurę, która jest wystarczająco duża. Musimy przeszukać całą listę, chyba że lista jest uporządkowana wg rozmiaru.

Ta strategia tworzy najmniejszą pozostałą dziurę.

• Najgorsze dopasowanie. Przydziela się największą dziurę.

Ponownie musimy przeszukać całą listę, chyba że jest ona posortowana wg rozmiaru.

(30)

Fragmentacja

• Strategie pierwszego i najlepszego dopasowania podlegają fragmentacji zewnętrznej

• Fragmentacja zewnętrzna występuje, gdy dostępna jest wystarczająca ilość pamięci do spełnienia

żądania, ale dostępne przestrzenie nie są ciągłe:

pamięć jest podzielona (fragmentowana) na wiele małych dziur

• Analiza statystyczna pierwszego dopasowania

pokazuje, że, nawet przy pewnej optymalizacji, przy przydziale N bloków, kolejne 0,5·N bloków zostaną utracone w wyniku fragmentacji. Ta właściwość jest znana jako reguła 50-procent.

(31)

Fragmentacja Wewnętrzna

• Koszty dla śledzenia bardzo małego otworu będą znacznie większymi niż sam otwór

• Ogólne podejście do uniknięcia tego problemu

polega na rozbiciu pamięci fizycznej na bloki o stałej wielkości i przydzieleniu pamięci w jednostkach na podstawie wielkości bloku

• Pamięć przydzielona do procesu może być nieco większa niż żądana pamięć

• Różnicą między tymi dwiema liczbami jest

fragmentacja wewnętrzna – nieużywana pamięć wewnątrz rozdziału

(32)

Fragmentacja: Rozwiązanie

• Jednym z rozwiązań problemu fragmentacji zewnętrznej jest zagęszczanie

• Zagęszczanie jest możliwe tylko wtedy, gdy relokacja jest dynamiczna i odbywa się w czasie wykonywania

• Schemat zagęszczania może być drogi

• Innym możliwym rozwiązaniem problemu fragmentacji zewnętrznej jest zezwolenie, aby przestrzeń adresowa procesów nie była ciągła

• Jest to strategia stosowana w stronicowaniu,

najczęstszej używanej technice zarządzania pamięcią

(33)

Pamięć Główna.

Streszczenie

(34)

Streszczenie (1)

• Pamięć ma kluczowe znaczenie dla funkcjonowania nowoczesnego systemu komputerowego i składa się z dużej liczby bajtów, z których każdy ma własny adres

• Jednym ze sposobów przydzielenia przestrzeni

adresowej dla każdego procesu jest użycie rejestrów bazowego i limitu. Rejestr bazowy zawiera

najmniejszy legalny adres pamięci fizycznej, a rejestr limitu określa rozmiar zakresu

• Wiązanie adresu symbolicznego do rzeczywistych adresów fizycznych może wystąpić podczas (1) kompilacji, (2) ładowania lub (3) wykonywania

(35)

Streszczenie (2)

• Adres generowany przez CPU jest znany jako adres logiczny, który moduł zarządzania pamięcią (MMU) tłumaczy na fizyczny adres w pamięci

• Jednym z podejść do przydzielania pamięci jest przydzielanie rozdziału ciągłej pamięci o różnych rozmiarach. Te rozdziały można przydzielić w

oparciu o trzy możliwe strategie: (1) pierwsze dopasowanie, (2) najlepsze dopasowanie i (3) najgorsze dopasowanie

Cytaty

Powiązane dokumenty

Przykładowe obliczenia ( pokaż krok po kroku, jak wyliczyć adres sieci, adres rozgłoszeniowy, host minimalny, host maksymalny , suma hostów możliwych do uzyskania) do należy zrobić

• Typowa warstwa systemu operacyjnego składa się ze struktur danych i zestawu funkcji, które mogą być wywoływane przez warstwy wyższego poziomu. • Podejście warstwowe

Funkcję takiego systemu może pełnić implementacja danego języka oparta na interpretacji lub

Funkcja malloc zwraca adres przydzielonego bloku pamięci lub wartość 0 (NULL) w przypadku niepowodzenia. Zwolnienie

• zadania klasy SCHED_FIFO – gotowe do uruchomienia zadanie tej klasy jest szeregowane przez zadaniami SCHED_OTHER i nie otrzymują kwantu czasu (wykonują się do zawieszenia lub

Spopularyzowanie obliczeń czasu rzeczywistego, choć pierwsze tego typu systemy pojawiły się w 1964r.. SYSTEMY CZASU

Serwer DHCP świadczy usługę sieciową polegającą na przydziale adresów IP hostom, których konfiguracja wymaga otrzymania automatycznego adresu.. Hosty takie, w czasie startu

Zbiór wywołań systemowych tworzy interfejs do systemu operacyjnego API (ang. Application Program Interface). System operacyjny komunikuje się ze sprzętem za pomocą