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