44) Przydział pamięci dyskowej: listowy i indeksowy

System plików pełni w systemie operacyjnym rolę pamięci trwałej. Informacje

zapisane w pamięci trwałej nie są gubione między kolejnymi uruchomieniami

systemu. Informacje przechowywane w systemie plików są pogrupowane w pliki i

katalogi.

Metody przydziału miejsca na dysku

Przydział ciągły

Przydział ciągły to najprostsza, ale i najgorsza metoda przydziału miejsca na dysku.

KaŜdy plik zajmuje na dysku spójny obszar złoŜony z kolejnych bloków. Metoda ta

jest zła, gdyŜ wielkość pliku moŜe się zmieniać w czasie. JeŜeli nie będziemy w

stanie wydłuŜyć pliku, a na dysku będzie wolne miejsce, to oznaczać to będzie

konieczność przemieszczenia plików na dysku. Jest to bardzo czasochłonne. Z

drugiej strony informacja o rozmieszczeniu pliku na dysku jest bardzo prosta:

wystarczy pamiętać początek i rozmiar pliku.

Przydział listowy i FAT

Przydział listowy polega na tym, Ŝe bloki tworzące jeden plik są połączone w listę

jednokierunkową. KaŜdy z bloków zawiera numer następnego bloku tworzącego plik.

Dzięki temu bloki pliku mogą być rozmieszczone dowolnie. Plik jest identyfikowany

przez pierwszy swój blok. Wadą takiego rozwiązania jest bardzo wolny dostęp

swobodny do pliku. Zmiana pozycji w pliku moŜe wymagać przejrzenia bloków

tworzących plik od początku pliku.

Pewnym usprawnieniem przydziału listowego jest zebranie wszystkich wskaźników

tworzących listę razem, w jednej tablicy. Tablicę taką nazywamy FAT (ang. file

allocation table). Co prawda nadal dostęp do dowolnego miejsca w pliku moŜe

wymagać liniowej liczby kroków, ale liczba bloków dyskowych, które naleŜy odczytać

jest duŜo mniejsza (zwłaszcza, jeśli plik zajmuje kolejne bloki na dysku). W praktyce,

obszary tablicy FAT dotyczące przetwarzanych właśnie plików są przechowywane w

buforze, co eliminuje operacje dyskowe związane z dostępem swobodnym. Nadal

pozostaje jednak liniowy koszt odnalezienia szukanego elementu na liście.

Przydział indeksowy

Przydział indeksowy polega na zebraniu numerów bloków tworzących plik w jednym

bloku, tzw. bloku indeksowym. Plik na dysku jest reprezentowany przez numer bloku

indeksowego.

Przy zastosowaniu takiej strategii, dostęp do dowolnego miejsca w pliku wymaga co

najwyŜej dwóch operacji dyskowych. Jednak wielkość pliku jest ograniczona.

Przykładowo, jeŜeli bloki dyskowe mają po 4kB, a numer bloku zajmuje 32bity, to

maksymalna wielkość pliku to 1024*4kB = 4MB.

Przydział indeksowo-listowy

Przydział indeksowo listowy to połączenie podejścia listowego i indeksowego.

Numery kolejnych bloków dyskowych zawierających treść pliku są zebrane w bloku

(lub blokach) indeksowych. JeŜeli numery bloków tworzących plik nie mieszczą się w

jednym bloku indeksowym, to ostatni numer w tym bloku wskazuje na kolejny blok

indeksowy itd. Tak więc bloki indeksowe tworzą listę jednokierunkową. Plik jest

identyfikowany przez numer pierwszego bloku indeksowego.

Przykładowo, jeŜeli bloki dyskowe mają po 4kB, a numer bloku zajmuje 32bity, to

jeden blok indeksowy moŜe zawierać do 1023 numerów bloków z treścią pliku i jeden

numer kolejnego bloku indeksowego. JeŜeli mamy plik wielkości 42MB, to będziemy

mieli 11 bloków indeksowych. Dostęp do końcowych fragmentów pliku moŜe

wymagać nawet 12 operacji dyskowych.

Takie podejście w najgorszym przypadku będzie działało tak samo jak FAT. Jeśli

jednak plik nie jest zapisany w kolejnych blokach dyskowych, to numery bloków

tworzących plik będą zebrane razem w blokach indeksowych, a w tablicy FAT ich

numery będą rozsiane.

Przydział indeksowy wielopoziomowy

Wielopoziomowy przydział indeksowy polega na tym, Ŝe bloki indeksowe wraz z

blokami dyskowymi zawierającymi treść pliku tworzą drzewo o określonej wysokości.

Na przykład, przy indeksowaniu dwupoziomowym, główny blok indeksowy

(pierwszego poziomu) zawiera numery bloków indeksowych drugiego poziomu, które

z kolei zawierają numery bloków tworzących treść pliku. JeŜeli bloki dyskowe mają

po 4kB, a numer bloku zajmuje 32 bity, to stosując indeksowanie dwupoziomowe

wielkość plików jest ograniczona przez 4GB, a przy indeksowaniu trójpoziomowym

przez 4TB.

Liczba odwołań do dysku potrzebnych do dostania się do dowolnego miejsca na

dysku jest równa liczbie poziomów indeksowania plus jeden.

45) Cechy tradycyjnego systemu unixowego

• wielodostępny pozwala na logowanie się do systemu kilku uŜytkowników w

tym samym czasie, a kaŜdy uŜytkownik współdziała z systemem poprzez swój

własny terminal

• wielozadaniowy pozwala na wykonywanie kilku zadań w tym samym czasie -

gdy jedno zadanie jest wykonywane, moŜna pracować nad następnym

• główne części: jądro, powłoka, system plików i programy uŜytkowe. Jądro jest programem, który uruchamia inne programy i zarządza urządzeniami,

takimi jak dyski czy drukarki.

Powłoka jest interfejsem uŜytkownika. Odbiera polecenia wydawane przez

uŜytkownika i wysyła je do jądra w celu wykonania. System plików określa

porządek, w jakim pliki są zachowane na urządzeniu takim jak dysk. Pliki są

umieszczone w katalogach. KaŜdy katalog moŜe zawierać dowolną liczbę

podkatalogów, w których przechowywane są pliki. Jądro, powłoka i system plików

stanowią razem podstawową strukturę systemu operacyjnego. Dzięki tym trzem

elementom moŜna uruchamiać programy, zarządzać plikami i współdziałać z

systemem

• przydział pamięci fizycznej (pamięć fizyczna – faktyczny adres komórki w

pamięci) poszczególnym procesom,

• odwzorowanie logicznej przestrzeni adresowej procesu na fizyczną przestrzeń

adresową pamięci (adres logiczny - adres wytworzony przez procesor w

wyniku wykonania rozkazu programu nosi nazwę),

• ochrona zawartości pamięci,

• współdzielenie obszarów pamięci przez róŜne procesy.

• jądra systemów Unix są monolityczne. ChociaŜ moŜna w nich wyróŜnić

funkcjonalne części składowe, to stanowią one jeden program i korzystają ze

wspólnych struktur danych. Takie rozwiązanie zapewnia największą

efektywność systemu. Do podstawowych zadań jądra naleŜy

• zarządzanie procesami,

• zarządzanie pamięcią,

• zarządzanie plikami,

• zarządzanie urządzeniami wejścia-wyjścia.

• obsługa róŜnych typów systemów plików,

• obsługa róŜnych protokołów sieciowych,

• obsługa róŜnych formatów plików wykonywalnych,

• wykorzystanie współdzielonych bibliotek.

46) Wsparcie sprzętowe dla wielozadaniowych

systemów operacyjnych.

Wielozadaniowość to organizacja systemu operacyjnego pozwalająca na

kooperatywne

lub

konkurencyjne

wykonywanie

wielu

zadań.

Systemy

wielozadaniowe posiadają wbudowane mechanizmy kontrolujące aktywne zadania -

mogą przypisywać im poziomy waŜności i uzaleŜniać od nich wielkość mocy

procesora, jaka poświęcana jest poszczególnym zadaniom. Wielozadaniowość nie

byłaby wręcz niemoŜliwa do realizacji gdyby nie wbudowane mechanizmy wsparcia

sprzętowego.

Jedynym dodatkowym urządzeniem koniecznym do uruchomienia wielozadaniowego

systemu operacyjnego jest licznik zliczający interwały czasowe. KaŜdy nawet

najprostszy system operacyjny musi być taktowany, aby mógł odliczać czas

pozostały do zakończenia jednego a rozpoczęcia innego zadania. Moduły te są

wbudowane w kaŜdy nowoczesny procesor.

Jednak w celu uzyskania systemu komputerowego o duŜym stopniu niezawodności

nowoczesne procesory posiadają inne cechy wspierające implementacje i działanie

systemów operacyjnych. Są to:

a) tryby pracy:

o

uprzywilejowany (kernel/supervisor mode),

o

chroniony (protected mode), w chronionym trybie pracy niektóre

potencjalnie niebezpieczne instrukcje procesora są niedostępne, a

próba wywołania ich spowoduje wystąpienie przerwania

(obsługiwanego dalej przez system). Nawiązując do budowy systemu

operacyjnego, wszelka aktywność zadań (aplikacji) uŜytkownika oraz

powłoki odbywa się w chronionym trybie pracy (protected mode). Jądro

systemu operacyjnego pracuje w trybie uprzywilejowanym (kernel

mode).

b) jednostki zarządzania i ochrony pamięci

Działanie tych mechanizmów opiera się na wsparciu sprzętowym

dostarczanym przez kontrolery pamięci wbudowane w procesor (lub

chipset).

Ogólna zasada polega na wydzielaniu poszczególnym procesom

obszarów pamięci do wyłącznego uŜytku. Oznacza to, Ŝe tylko dany

proces moŜe pisać lub czytać tylko do/z danego obszaru. Próba zapisu

odczytu z nieprzydzielonego procesowi obszaru kończy się

wywołaniem przerwania przerywającego wykonywanie zadania.

Technicznie ochrona realizowana jest poprzez podział obszaru pamięci

na segmenty i strony. Zadanie uŜytkownika, które jest aktywowane w

danej chwili przywraca swój kontekst poprzez ustawienie odpowiednich

rejestrów CPU jak i równieŜ rejestrów kontrolnych jednostki

zarządzania pamięcią.

Dzięki ochronie pamięci awaria jednego zadania i próba błędnego

nadpisana przestrzeni adresowej innych zadań jest niemoŜliwa. W ten

sposób są równieŜ chronione dane potrzebne systemowi operacyjnemu

do działania, przez co moŜna zatrzymać uszkodzone zadanie.

Aktywność systemu operacyjnego jak i elementów typu sterowniki

sprzętowe odbywa się w trybie kernel w którym ochrona pamięci nie

działa lub jest mocno ograniczona (zaleŜnie od rodzaju CPU). Wobec

tego jest moŜliwe awaryjne zatrzymanie systemu na skutek błędnego

działania kodu systemu operacyjnego lub sterowników sprzętowych.

c) kontrolery przerwań, gdy licznik taktujący system operacyjny wyliczy Ŝądany

interwał czasowy informacja o tym zdarzeniu przekazywana jest do procesora przy

pomocy przerwania. Podobnie informacje na temat innych zdarzeń przekazywane są

do procesora a w ten sposób do systemu operacyjnego przy pomocy mechanizmu

przerwań.

d) specjalistyczne akceleratory sprzętowe słuŜące do przyśpieszania pewnych

typowych czynności wykonywanych przez systemy operacyjne. Ta funkcjonalność

jest rzadko spotykana i zazwyczaj spotyka się ją we wbudowanych systemach RTOS