Systemy operacyjne

Transkrypt

Systemy operacyjne
Systemy operacyjne
Studia podyplomowe 2015-2016
Wydział Informatyki PB
dr inż. Marcin Czajkowski
materiały przygotowane przez dr inż. Wojciecha Kwedlo
Struktury pamięci masowej
Struktura dysku
●
●
Dane przechowywane są na powierzchniach
–
Maksimum dwie powierzchnie na talerzu.
–
Conajmniej jeden talerz
Dane znajdują
ścieżkach.
–
–
●
●
Głowice
się
na
sektor
koncentrycznych
talerz
ścieżka
Ścieżki podzielone są na sektory
Odpowiednie
ścieżki
na
powierzchniach tworzą cylinder
wszystkich
cylinder
Dane są zapisywane i odczytywane przez powierzchnie
głowice.
–
Głowice przesuwane są przez napęd krokowy
–
Wszystkie
głowice
jednocześnie
przesuwane
są
Dysk z wymiennym lub niewymiennym
nośnikiem
Napęd
krokowy
Przykład
IBM 360KB floppy
WD 18GB HD
Cylinders
40
10601
Tracks per cylinder
2
12
Sectors per track
9
281 (średnio !!!)
Sectors per disk
720
35742000
Bytes per sector
512
512
Capacity
360 KB
18.3 GB
Seek time (minimum)
6 ms
0.8 ms
Seek time (average)
77 ms
6.9 ms
Rotation time
200 ms
8.33 ms
Spinup time
250 ms
20 sec
Sector transfer time
22 ms
17 sec
Adresowanie dysku
●
Dysk może mieć miliony sektorów. Jak je zaadresować.
●
Metoda 1: Cylinder/Głowica/Sektor.
–
●
Liczba sektorów na ścieżce może się zmieniać.
Metoda 2: Numerowanie sekwencyjne
–
Dysk odwzorowuje globalny numer sektora z zakresu [0-max] na numer
cylindra,ścieżki oraz sektora w cylindrze.
–
Odwzorowanie może się zmieniać !!!
●
Przemieszczanie błędnych sektorów
●
Optymalizacja wydajności.
●
Nowoczesne dyski wykorzystują metodę 2.
●
Dzięki temu szczegóły geometrii są ukryte przed systemem operacyjnym
–
Ale zawsze opłaca się w jednym żądaniu odczytywać grupę kolejnych sektorów
Układ sektorów na dysku
●
Wewnętrzne ścieżki są krótsze niż zewnętrzne.
●
Dwa rozwiązania:
●
●
●
●
●
–
(a) dłuższe bity
–
(b) więcej sektorów na ścieżkach zewnętrznych
Stacja dysków
rozwiązanie (a)
Nowoczesne dyski
(b).
elastycznych
wykorzystuje
wykorzystują rozwiązanie
Dysk podzielony jest na kilka stref (8-20).
W każdej ze stref na jedną ścieżkę przypada stała
liczba sektorów
W rozwiązaniu (b) odczyt sektorów ze ścieżek
zewnętrznych następuje szybciej.
“Zapasowe” sektory
●
●
●
Ścieżka może zawierać dodatkowe sektory.
Gdy dany sektor zaczyna sprawiać problemy (dużo błędów poprawianych przez
ECC), przenoszony jest do sektora dodatkowego.
Pogarsza to wydajność.
–
●
Aby temu zapobiec, można na nowo posortować sektory na ścieżce, ale zajmuje to
dużo czasu
Mechanizm ten jest często ukryty przed systemem operacyjnym
Napędy optyczne - CD-ROM, DVD-ROM, ...
●
W napędach optycznych nie mamy koncentrycznych ścieżek, a spiralę.
●
Sektor ma 2KB
Struktura sektora dyskowego
Preambuła
Dane
●
Preambuła – zawiera numer sektora, i cylindra
●
Dane (długość 256, 512 lub 1024 bajty)
●
ECC
ECC (ang. error correcting code) – nadmiarowe informacje pozwalające na
wykrycie (prawie) wszystkich błędów i poprawienie niektórych z nich
Czas wykonania operacji
●
Czas operacji=Czas dostępu + Czas transferu
●
Czas dostępu, zależy od dwóch składników.
–
Czas wyszukiwania (ang. seek time) czas niezbędny na ustawienie się głowicy
dysku nad właściwym cylindrem.
–
Oczekiwanie aż głowica znajdzie się nad odpowiednim sektorem.
●
Zależy od prędkości obrotowej dysku, średnio ½ czasu wykonania obrotu przez talerz.
●
System operacyjny może próbować optymalizować czas wyszukiwania.
●
Czas transferu też zależy od prędkości obrotowej dysku.
●
Przykład
●
–
Czas wyszukiwania = 7ms; Czas oczekiwania 4ms => Czas dostępu 11ms
–
Czas transferu 22us (trzy rzędy wielkości mniej !!!)
Wniosek: staraj się przesyłać wiele kolejnych sektorów w jednym żądaniu.
Planowanie żądań do dysku
●
Cel: Minimalizuj czas spędzany na przesuwaniu głowicy i oczekiwaniu.
–
Na oczekiwanie mamy niewielki wpływ.
●
Umieszczaj bloki składające się na dany plik w “pobliżu siebie”.
●
Używaj algorytmów planowania do ustalania kolejności obsługi żądań.
●
Istnieje wiele algorytmów planowania.
●
Przykład:
–
Głowica nad blokiem 53.
–
Zakładamy kolejność żądań: 98, 183, 37, 122, 14, 124, 65, 67
–
Zakładamy, że kontroler przetwarza jedno żądanie - w nowych dyskach nie jest to
do końca prawdą.
Algorytm FCFS (ang. First come, First served)
●
Obsługuj żądania w kolejności zgłoszenia.
Algorytm SSTF (ang. Shortest Seek Time First)
●
Wybierz żądanie o najkrótszym czasie oczekiwania.
●
Możliwość zagłodzenia
Algorytm SCAN
●
●
●
Zwany również algorytmem windy (ang. Elevator).
Ramię dysku porusza się od jednego końca dysku do drugiego, obsługując po
drodze żądania.
Po dojściu do końca dysku kierunek poruszania się ramienia ulega zmianie.
Algorytm SCAN: Przykład
Algorytm C-SCAN
●
Ulepszona wersja algorytmu SCAN. Gdy głowica dotrze do końca dysku,
natychmiast jest przesuwana z powrotem na początek, bez obsługiwania
kolejnych żądań.
Algorytm C-LOOK
●
Ramię przesuwa się, nie do końca a tylko tak daleko aby obsłużyć ostatnie
żądanie.
Jaki algorytm wybrać
●
●
●
SSTF łatwy do zaimplementowania i ma dobrą wydajność, gdy obciążenie dysku jest
niewielkie.
Algorytmy typu SCAN mają lepszą wydajność przy dużym obciążeniu dysku
–
Brak możliwości zagłodzenia
–
Wersje LOOK unikają niepotrzebnego przesuwania głowicy
Przejście od jednego końca dysku do drugiego jest stosunkowo mało kosztowne.
–
●
●
Dlatego C-LOOK jest lepszy niż C-LOOK, bo zapewnia małą wariancję czasu dostępu.
Konkluzja:
–
SSTF dla słabo obciążonych systemów
–
C-LOOK dla bardzo obciążonych systemów .
Ponadto: Wraz ze wzrostem wyrafinowania elektroniki dysku (duże pamięci cache,
integracja z pamięciami FLAS) pojawia się tendencja do implementacji części lub
całości algorytmów szeregowania przez kontroler.
–
Przykład: Natywne kolejkowanie komend (NCQ - ang. native command queueing) w
standardzie Serial ATA.
Jak zbudować lepszy dysk
●
Wydajność procesorów wzrasta wykładniczo.
●
W przypadku dysków nie jest to prawdą.
–
●
Niezawodność dysków nie jest wysoka.
–
●
●
Czas dostępu jest ograniczony przez mechanikę dysku
Nic dziwnego, dysk ma miliony sektorów.
Rozwiązanie: wykorzystaj kilka dysków
–
Dane przesyłane równolegle z wielu dysków
–
Dane zapamiętane w paskach (ang. Stripe).
–
Bit parzystości na dodatkowym dysku.
Technika nosi nazwę RAID (ang. redudant array of independent drives).
Macierze RAID
●
●
●
Redudant Array of Inexpensive Discs Nadmiarowa Macierz Tanich Dysków
(Patterson i wsp., 1988) - ma działać lepiej niż SLED (Single Large Expensive Disc)
Idea: Zbiór (macierz) dysków dzięki specjalnemu kontrolerowi widoczny dla reszty
systemu jako jeden “virtualny” dysk.
Virtualny dysk dzielony jest na paski (ang. strips), które są rozpraszane na dyskach
tworzących macierz.
–
●
●
●
Pasek ma rozmiar k-sektorów.
Redundancja pozwala na zmniejszenie ryzyka awarii.
Ponieważ dyski w macierzy pracują równolegle, żądania mogą być realizowane
szybciej.
Komercyjnie dostępne poziomy 0,1, 0+1, 4,5
RAID Level 0
●
●
●
●
Nie jest to prawdziwa macierz RAID - nie ma redundancji. Paski są rozpraszane
równomiernie po wszystkich dyskach - pojemność dysku się nie marnuje.
Dwa żądania mają szanse dotyczyć dwóch niezależnych dysków i być obsłużone
równolegle - krótszy czas oczekiwania na żądanie.
Duże żądanie może dotyczyć kilku kolejny pasków (np. strip2,strip3, strip4) wtedy czas
oczekiwania jest taki sam, ale czas transmisji się znacznie skraca - dyski pracują
równolegle.
Awaryjność wzrasta (i to znacznie - patrz wykład ze statystyki)
RAID Level 1
●
●
●
●
Jeden dysk jest kopią drugiego - odtworzenie stanu macierzy po awarii jest
szybkie.
Mamy zapewnioną redundancję, ale kosztem dwukrotnego zmniejszenia
pojemności.
Dla żądań odczytu największa możliwa wydajność ze wszystkich konfiguracji
RAID (dwa żądania zawsze mogą być obsłużone równolegle).
Żądania zapisu nie są przyspieszane.
RAID Level 4
●
●
●
●
Jeden z dysków przechowuje bity parzystości - w razie awarii któregoś z dysków
brakujące dane można odtworzyć na podstawie bitów parzystości i zawartości pozostałych
dysków. Odbudowa po awarii macierzy jest czasochłonna.
Bardziej efektywne wykorzystanie pojemności dysków.
Każdy Zapis wymaga ponownego obliczenia bitów parzystości, dzięki czemu dysk
przechowujący te bity staje się wąskim gardłem przy zapisach.
Ponadto zapis może wymagać przeprowadzenia odczytów z innych dysków w celu
obliczenia parzystości - potencjalnie dwa odczyty i dwa zapisy jeżeli dane zajmują część
paska - dwukrotne spowolnienie
RAID Level 5
●
Podobnie, jak RAID Level 4, ale paski z parzystością są równomiernie
rozproszone po wszystkich dyskach macierzy, co usuwa wąskie gardło przy
zapisach.
RAID 0+1 oraz RAID 1+0
●
●
●
RAID 0+1: dwie macierze RAID 0 (z przeplotem) tworzą macierz RAID 1.
Minimum 4 dyski. Lepsza wydajność niż RAID 5, ale pojemność macierzy 50%.
RAID 1+0 (RAID 10). dwie macierze RAID 1 (mirror) tworzą macierz RAID 0 (z
przeplotem). Minimum 4 dyski. Pewne zalety w porównaniu z RAID 0+1: np.
może przetrwać awarię dwóch dysków.
Schematy RAID 0+1 oraz 1+0 często implementowane programowo (np.
większość “kontrolerów RAID” zintegrowanych z płytami głównymi).
Napędy taśmowe
●
Napęd taśmowy wykorzystuje nośnik wymienny.
●
Jeżeli chodzi o koszt jednego bitu, napęd taśma jest znacznie tańsza od dysku.
●
Prędkość transmisji danych jest porównywalna z dyskiem.
●
Czas dostępu jest bardzo duży, rzędy minut
–
●
Wymagane jest przewinięcie taśmy.
Z powyższych powodów napędy taśmowe wykorzystuje się przede wszystkim
do archiwizacji danych zapisanych na dysku i tworzenia kopii zapasowych.
–
W przypadku awarii dysku, kopia zapasowa pozwala na odtworzenie danych
Dostęp danych w dyskowych
●
●
●
System operacyjny umożliwia programom użytkownika, dostęp do dysku na
dwa sposoby.
Sposób 1: Dostęp za pomocą systemu plików.
–
Organizacja systemu plików (np. drzewo katalogów)
–
Prawa dostępu do plików.
–
Operacje otwarcia pliku, odczytu, zapisu i zamknięcia.
–
Alokacja sektorów dysku dla pliku
Sposób 2: Dostęp surowy (ang. raw):
–
Dysk traktowany jest jako tablica sektorów.
–
Dostęp surowy często wymaga specjalnych przywilejów.
–
Pominięcie warstwy systemu plików pozwala na zwiększenie wydajności.
Przykład 1: Baza danych Oracle.
Przykład 2: Program fsck w systemach Unix (naprawiający system plików)
Awaryjność
●
Napędy z nośnikami wymiennymi są bardziej narażone na awarie.
●
Nośniki optyczne są mniej awaryjne niż nośniki magnetyczne.
–
●
●
Mniej wrażliwe na zakłócenia wewnętrzne
W napędzie z nośnikami niewymiennym głowica nie kontaktuje się z
nośnikiem
–
Talerz znajdują się w hermetycznie zamkniętej obudowie.
–
Głowica porusza się na poduszce powietrznej.
–
Kontakt głowicy z nośnikiem (np. w wyniku wstrząsu, upadku) bardzo często
prowadzi do awarii.
–
Awaria napędu oznacza utratę danych.
W napędzie z nośnikiem wymiennym, po awarii napędu bardzo często nie
występuje utrata danych.
Systemy plików
Interfejs i implementacja
Systemy plików
●
Przechowują olbrzymie ilości informacji
–
●
●
Gigabajty => Terabajty => Petabajty
Przechowywana informacja nie jest tracona po zakończeniu procesu.
–
Czas życia od sekund do lat.
–
Potrzebny jest sposób odnajdywania informacji
Wiele procesów musi być w stanie wykorzystywać tę samą informację
współbieżnie.
Nazwy plików
●
Konieczność odnalezienia pliku, po tym jak został utworzony.
●
Każdy plik ma co najmniej jędną nazwę.
●
Nazwa może być:
–
Łatwa dla zrozumienia dla człowieka: np. “Notatka.txt”, “program3.cpp”.
–
Odczytywana bezpośrednio przez maszynę: np. 65231
●
Duże i małe litery mogą być rozróżniane lub nie
●
Nazwa może zawierać informacje o przeznaczeniu pliku.
–
Wygodne z punktu widzenia użytkownika.
–
Wykorzystywane przez programy użytkowe
–
Przykład (Nazwa z rozszerzeniem)
●
abc.jpg
Obraz w formacie jpeg
●
p1.c
Program w języku C
●
f.txt
Ogólny plik tekstowy
Struktura pliku
●
Brak struktury: plik jest ciągiem bajtów.
●
Plik rekordów
–
●
●
Rekordy o stałej lub zmiennej długości.
Plik o skomplikowanej strukturze
–
Tekst sformatowany
–
Program wykonywalny.
Każdą strukturę pliku można zasymulować za pomocą ciągu bajtów i
wykorzystując znaki kontrolne.
–
Dlatego często system operacyjny traktuje plik jako ciąg bajtów.
–
Struktura pliku jest ustalana na poziomie programu użytkownika (ale nie zawsze przykład. pliki wykonywalne .exe)
Atrybuty pliku
●
Nazwa pliku
●
Rozmiar
●
Właściciel
●
Prawa dostępu
●
Czasy (utworzenia/ostatniego dostępu/ostatniej modyfikacji).
●
Hasło
●
Inne informacje, z reguły niedostępne dla programu użytkownika
–
Na przykład informacja o położeniu pliku na dysku
Operacje na plikach
●
Utworzenie (ang. create)
●
Usunięcie (ang. delete)
●
Otwarcie (ang. open) – przygotowanie pliku do dostępu.
●
Zamknięcie (ang. close) – wskazanie, że dostęp do pliku nie będzie dalej potrzebny.
●
Odczyt (ang. read) (do bufora w pamięci procesu)
●
Zapis (ang. write) (z bufora w pamięci procesu)
●
Przesunięcie wskaźnika bieżącej pozycji (ang. seek).
–
Operacje read oraz write wykonują odczyt oraz zapis z miejsca wskazywanego przez wskaźnik
bieżącej pozycji; wartość wskaźnika jest zwiększana o liczbę odczytanych lub zapisanych
bajtów.
–
Operacja seek pozwala na dostęp swobodny do pliku (ang. random access), jeżeli nie jest
zaimplementowana mówimy o dostępie sekwencyjnym.
●
Dołączenie (ang. append) – zapis na końcu pliku
●
Odczyt/Zmiana atrybutów (w tym nazwy)
Pliki odwzorowane w pamięci
(ang. memory mapped files)
●
●
abc
Dane
Dane
●
Kod
Przed
odwzorowaniem
Kod
Po
odwzorowaniu
Po otwarciu pliku wykonywana jest
operacja mmap.
Plik staje się częścią
adresowej procesu.
przestrzeni
–
Wygodna abstrakcja
–
Unikamy podwójnego kopiowania danych
–
Implementacja na ogół wykorzystuje
mechanizm pamięci wirtualnej
Problemy:
–
Plik współdzielony przez kilka procesów.
–
Próba dostępu “za końcem” pliku.
Katalogi
●
Proste nadawanie nazw nie wystarcza w przypadku tysięcy plików na dysku.
–
●
●
●
●
Problem: wiele plików o identycznej nazwie, np. różne wersje tego samego programu
Ludzie mają tendencję do grupowania informacji związanych ze sobą.
Systemy plików umożliwiają to przy pomocy katalogów (ang. directory), zwanych
także folderami.
Grupowanie pozwala na.
–
Łatwiejsze znalezienie plików.
–
Określenie, które pliki są ze sobą związane.
Operacje na katalogach:
–
Głównie odczyt i przeszukiwanie katalogu.
–
Także tworzenie nowych dowiązań.
Katalog o strukturze jednopoziomowej i dwupoziomowej
`
●
Jeden katalog dla wszystkich użytkowników.
●
Problemy: (a) Nie pozwala na grupowania (b) Konflikty nazw plików.
●
Katalog główny + Odrębny katalog dla każdego z użytkowników
–
Nadal nie pozwala na grupowania plików
Katalog o strukturze drzewa
●
●
●
●
Umożliwia grupowanie.
Katalog
aktualny
current directory).
Lokalizacja pliku
przez ścieżkę.
/bin/hex albo ./p/list (jeżeli /programs jest katalogiem głównym)
(ang.
podana
–
Scieżka
początek
drzewa.
bezwlględna:
w
korzeniu
–
Ścieżka względna: początek
w katalogu aktualnym.
Katalog o strukturze grafu acyklicznego
●
Brak cykli w grafie chroni przed ścieżkami
o nieskończonej długości.
●
Plik może mieć dwie różne nazwy (aliasy)
●
Problem wiszących wskaźników
–
Gdy usuniemy list
●
Jak zapewnić acykliczność grafu ?
●
W Uniksie hard links i symbolic links.
●
–
twarde dowiązania to kolejna nazwa tego
samego pliku.
–
symboliczne dowiązania to specjalny plik
wskazujący na inny.
Tylko super-użytkownik może utworzyć
twarde dowiązanie do katalogu.
Interfejs systemu plików a jego implementacja
●
Użytkownik, programista aplikacji jest zainteresowany interfejsem do systemu plików
udostępnianym przez system operacyjny.
–
●
Operacje na plikach i katalogach.
Projektanta systemu interesuje, jak te operacje mogą zostać zaimplementowane.
–
Jak przechowywać informację o blokach dyskowych zajętych przez plik.
–
Jak szybko odnaleźć i-ty blok danego pliku (operacja seek)
–
Jak przechowywać informacje o wolnych blokach (blokach nie zajętych przez żaden z plików,
ale które mogą być przydzielone w przyszłości)
–
Gdzie przechowywać informacje o atrybutach pliku
–
Gdzie przechowywać informacje o strukturze (np. drzewiastej) systemu plików..
Podział dysku na partycje
Cały dysk
Tablica partycji
Główny
blok rozruchowy
Partycja 1
Blok
Super
rozruchowy blok
●
●
●
Partycja 2
Partycja 3
Partycja 4
Pliki, katalogi, alokacji bloków, lista wolnych bloków
Bloki rozruchowe (boot blocks) zawierają kod ładujący system operacyjny do
pamięci.
Każda partycja zawiera odrębny system plików (mogą to być systemy różnych
typów). Tablica partycji zawiera informacje o podziale dysku na partycje
(początek i koniec)
Super blok zawiera informacje ogólne o systemie (np. całkowita liczba bloków
danych, całkowita liczba plików)
Ciągła alokacja bloków danych
●
Plik A
Plik B
Plik C
Plik D
Plik E
Plik F
Plik A
Wolne
Plik C
Wolne
Plik E
Plik F
Każdy plik zajmuje nieprzerwany ciąg bloków.
–
Bardzo szybki odczyt.
–
Bardzo proste zarządzanie informacją o blokach danego pliku – wystarczy tylko
pamiętać numer pierwszego bloku oraz liczbę bloku.
–
Bardzo szybka operacja seek.
Wady ciągłej alokacji
●
●
●
Może powstać fragmentacja (podobnie jak w przypadku pamięci RAM) – a
kompakcja w pamięci dyskowej jest bardzo wolna.
Musimy z góry znać maksymalny rozmiar pliku przy jego tworzeniu –
problemy przy zwiększaniu rozmiaru pliku.
Powyższe wady sprawiają że ciągła alokacja jest stosowana w systemach
plików tylko do odczytu – np. ISO9600 dla pamięci CD-ROM.
–
W tym przypadku kompletny system plików, wraz ze wszystkimi plikami jest
tworzony przy wypalaniu (wytłaczaniu) płytki.
–
Raz utworzony system plików nie będzie już modyfikowany (w płytkach
wielosesyjnych każda sesja to odrębny system plików).
–
Nie ma potrzeby zarządzania wolnymi blokami, uwzględnienia możliwości
zwiększenia rozmiaru plików etc.
Alokacja listowa
●
●
●
●
●
Ostatnie (dwa, cztery) bajty bloku danych są
zarezerwowane na numer następnego bloku.
W katalogu przechowywany jest numer
pierwszego bloku + numer ostatniego (aby
umożliwić rozrost pliku).
-1 oznacza ostatni blok pliku.
Zaleta: Plikowi możemy przydzielić
dowolny blok danych na dysku.
Wada: Nie nadaje się do dostępu
swobodnego, ponieważ aby wykonać
operację seek musimy przeczytać wiele
bloków na liście.
Tablica alokacji plików – FAT
(ang. File Allocation Table)
Plik
Numer
bloku
a.txt
b.txt
Pierwszy
blok
4
6
0
w
1
w
2
10
3
11
4
7
5
6
w
7
2
8
w
a.txt: 4,7,2,10,12
9
w
b.txt: 6,3,11,14
Ostatni
blok
12
14
●
●
●
12
14
12
-1
13
w
14
-1
15
w
Specjalne znaczniki na blok wolny (w) i ostatni
blok pliku (-1).
–
3
10
11
Odmiana alokacji listowej, w której numery
następnych bloków przechowywane są
w
odrębnej tablicy (FAT).
●
●
Blok wolny
●
Rozwiązany problem zarządzania wolnymi
blokami danych.
Tablica może znajdować się (w części lub w
całości) w pamięci RAM, co zwiększa
wydajność, zwłaszcza operacji seek.
Problem zapewnienia spójności pomiędzy kopią
tablicy w pamięci RAM, a oryginałem w
pamięci dyskowej.
Uszkodzenie tablicy FAT może prowadzić do
utraty całego systemu plików.
Potencjalnie bardzo duży rozmiar tablicy np.
80MB dla dysku 20GB
Alokacja indeksowa
●
●
●
●
Oddzielny blok indeksowy poświęcony na
numery bloków z danymi.
Dobra wydajność.
Zakładając 1KB bloki i 32-bitowe numery
w bloku indeksowym zmieści się 256
numerów. Co zrobić gdy rozmiar pliku jest
większy od 256 KB ?
Rozwiązanie: Indeksowanie pośrednie
Indeksowanie pośrednie
Numer w katalogu
●
●
●
Pośredni blok
indeksowy
Bloki
indeksowe
●
Bloki
danych
Katalog zawiera numer bloku
pośredniego, który z kolei
zawiera
numery
bloków
indeksowych.
Plik może mieć maksymalną
długość 256*256 KB=64MB.
Potrzebujemy indeksowania
podwójnie pośredniego (maks
16GB)
lub
potrójnie
pośredniego.
Problem utraty miejsca na
bloki indeksowe
Zarządzanie wolnym blokami
●
W systemie plików, w miarę jak pliki są tworzone i usuwane musimy
przydzielać i zwalniać bloki danych (i być może indeksowe).
●
W systemach FAT wystarczy wykorzystać specjalny znacznik w tablicy
●
System musi być w stanie szybko odnaleźć wolny blok.
●
Najprostszy sposób: mapy bitowe
0 1
2
1 0 1 0 0 1
●
n-1
…
1
Liczba bitów w mapie jest równa liczbie dynamicznie alokowanych bloków
–
Pozycja 0 oznacza blok wolny
–
Pozycja 1 oznacza blok wykorzystywany.
●
Znowu powstaje problem zachowania spójności struktur w pamięci i na dysku
●
Inne rozwiązanie: Lista wolnych obszarów
Przechowywanie atrybutów pliku
●
●
●
games
atrybuty
games
mail
atrybuty
mail
news
atrybuty
news
work
atrybuty
work
Struktura
danych
przechowująca
atrybuty
Atrybuty przechowują dane zarówno widoczne dla użytkownika (długość,prawa
dostępu, daty) jak i niewidoczne np. numer(y) bloków.
Rozwiązanie z systemu MS-DOS wszystkie atrybuty przechowywane są w katalogu.
Rozwiązanie z systemu UNIX atrybuty przechowywane są w odrębnej strukturze
zwanej i-węzłem (ang. i-node) Każdy plik oraz katalog ma swój i-węzeł. Pewna część
bloków na dysku jest poświęcona na tablicę i-węzłów. Pozycja katalogu zawiera
jedynie numer i-węzła.
Pozycja katalogu w systemie MS-DOS
Bajtów
8
3
1
10
2
2
Nazwa pliku
Rozszerzenie
●
●
●
●
●
2
4
Rozmiar
Atrybuty Zarezerwowane Czas Data
Numer
pierwszego
bloku
MSDOS wykorzystuje tablicę FAT. Numer bloku w tablicy może mieć 12
(FAT12) 16 (FAT16) albo 32 (FAT32 Windows95SE) bity.
Pozycja katalogu ma stały rozmiar (32bajty) i przechowuje wszystkie atrybuty
pliku.
Katalog jest szczególnym typem pliku.
W kolejnych wersjach wykorzystano zarezerwowane bajty (np. dodatkowe 16bitów numeru pierwszego bloku w systemie FAT32)
Sektor startowy przechowuje informacje o liczbie kopii i położeniu tablic FAT
oraz o położeniu głównego katalogu.
Klasyczny system plików Uniksa
Blok
startowy
Super
blok
Mapa bitowa
i-węzłów
Tablica
i-węzłów
Mapa bitowa
bloków
Bloki danych i indeksowe
●
Uniks wykorzystuje alokację indeksową (szczegóły za chwilę).
●
Katalog traktowany jest jako szczególny plik.
●
Wszelkie atrybuty pliku przechowywane są w i-węźle. I-węzły przechowywane są
w tablicy na dysku.
–
Potrzebujemy odrębnej mapy bitowej do zarządzania wolnym miejscem w tablicy iwęzłów. (pliki są tworzone i usuwane).
–
Całkowita liczba plików i katalogów w systemie nie może być większa od rozmiaru
tablicy i-węzłów.
Postać i-węzła w Uniksie
●
●
●
Dla małych plików (np. Do 14
bloków
numery
są
przechowywane bezpośrednio w
i-węźle).
Dla większych wykorzystuje się
blok
indeksowy
(single
indirect).
Dla
jeszcze
większych
indeksowanie
podwójnie
i
potrójnie pośrednie.
Katalogi w Uniksie
Root directory
1
.
..
4
bin
7
dev
1
I-node 6
is for /usr
Mode
size
times
Block 132
is /usr
directory
6
1
19
dick
30
erik
lib
51
9
etc
6
usr
8
tmp
14
Looking up
usr yields
i-node 6
132
I-node 6
says that
/usr is in
block 132
I-node 26
is for
/usr/ast
Mode
size
times
Block 406
is /usr/ast
directory
26
6
64
grants
92
books
jim
60
mbox
26
ast
81
minix
45
bal
17
src
/usr/ast
is i-node
26
406
I-node 26
says that
/usr/ast is in
block 406
●
Tłumaczenie nazwy ścieżki /usr/ast/mbox na numer i-węzła
●
Pozycja katalogu zawiera wyłącznie numer i-węzła
/usr/ast/mbox
is i-node
60
Systemy plików z kroniką (ang. log)
●
●
●
●
●
Cel - minimalizacja prawdopodobieństwa katastrofalnej awarii systemu plików, skrócenie
czasu naprawy systemu po utracie zasilania. Uwaga: systemy z kronikowaniem nie zastąpią
UPSa !!!
Specjalny obszar zwany kroniką (ang. journal).
Zmiana w systemie plików przebiega w sposób następujący: (a) zapisz (commit) bloki
dyskowe które zmieniasz do kroniki - zapisywane są bloki składające się na transakcję (b)
jeżeli pierwszy commit powiódł się wykonaj właściwy commit do systemu plików (c) jeżeli
drugi zapis się powiódł to możesz (niekoniecznie od razu) usuń bloki z kroniki (kronika działa
jak trochę podobnie jak kolejka FIFO.
–
Jeżeli awaria nastąpiła przed zakończeniem (a) to nic się nie dzieje - nastąpi utrata danych, ale
system plików pozostanie w stanie spójnym.
–
Jeżeli awaria nastąpi pomiędzy (a) - (b), to przy naprawie systemu plików wykonaj ponowny
commit transakcji z kroniki.
Różne możliwości funkcjonowania kroniki: (a) kronikowane są bloki z danymi jak i metadanymi (np. tablica i-węzłów, bitmapy i-węzłów i bloków, bloki indeksowe), (b) wyłącznie
bloki z metadanymi, po awarii zasilania system plików zachowa spójność ale jest duża szansa
na utratę danych plików zapisywanych w momencie awarii.
Uwaga: gwarancja pozostawienie systemu plików w stanie spójnym nie oznacza gwarancji że
dane przechowywane w pliku będą spójne z punktu widzenia aplikacji.
Strategie optymalizacji wydajności
●
Generalnie powinniśmy dążyć do tego aby kolejne bloki danych tego samego
pliku zostały umieszczone w kolejnych blokach na dysku.
●
Programy typu Defrag – mogą być bardzo czasochłonne.
●
Inne strategie
–
Prealokacja bloków: jeżeli przy zapisie do pliku potrzebujesz jednego nowego
bloku, to przydziel od razu k (typowo k=8,16) bloków zajmujących ciągły obszar
dysku, w nadziei, że za chwilę będą potrzebne nowe bloki. Jeżeli dodatkowe bloki
nie zostaną wykorzystane, to są zwalniane przy zamykaniu pliku.
–
Wykorzystaj pamięć podręczną
–
Zwiększ rozmiar bloku
1000
100
Wykorzystanie miejsca
800
80
600
60
400
40
200
20
Prędkość
transmisji
0
0
0
●
●
●
Wykorzystanie przydzielonych
bloków (procenty)
Prędkość transmisji (KB/sek.)
Wybór rozmiaru bloku (Tannenbaum, 2004)
128
256
512
1K
2K
Rozmiar bloku
4K
8K
16K
0
Pamięć masowa jest podzielona na 512-bajtowe sektory (2048 bajtów w CD-ROMie). Blok
dyskowy jest wielokrotnością sektora. Typowe rozmiaru bloku to 1,2,4,8 sektortów.
Większy rozmiar bloku => większa prędkość transmisji (mniejsza fragmentacja, czyli mniej
ruchów głowicą).
Większy rozmiar bloku => mniej efektywne wykorzystanie miejsca na dysku. Przeciętnie z
każdym plikiem wiąże się utrata miejsca równa połowie długości bloku
Pamięć podręczna (ang. cache ) dysku
●
●
Idea: Przeznaczyć część pamięci RAM na przechowywanie najczęściej
używanych bloków w celu poprawienia wydajności systemu.
Musimy dostarczyć mechanizm (np. tablice mieszające) pozwalający szybko
sprawdzić czy blok o numerze i jest w pamięci podręcznej.
–
●
●
Jeżeli bloku nie ma to jest on wczytywany z dysku i dodawany do pamięci
podręcznej.
Musimy określić algorytm wyboru bloku usuwanego z pamięci podręcznej (np.
LRU).
Musimy określić strategię obsługi zapisów:
–
Write-through – zapisywany blok trafia jednocześnie do pamięci podręcznej i na
dysk.
–
Blok jest zapisywany z opóźnieniem – większa wydajność, ale większe
niebezpieczeństwo uszkodzenia systemu. Większość systemów wprowadza
maksymalne opóźnienie np. 20 s dla bloków danych zwykłych plików (nie
katalogów) i 2 sekundy dla pozostałych bloków
Przykład implementacji pamięci podręcznej
Tablica
mieszająca
Front (LRU)
Rear (MRU)
lista łańcuchowa
●
●
●
●
Lista LRU
Tablica mieszająca: pozwala na szybkie sprawdzenie, czy blok jest w pamięci. Każdy
element odpowiada jednej wartości funkcji mieszającej.
Każdy blok jest elementem dwóch list: dwukierunkowej listy LRU, oraz listy łańcuchowej
na której przechowywane są bloki o identycznej wartości funkcji mieszającej.
W przypadku trafienia (ang. cache hit) blok pobrany z pamięci jest przesuwany na koniec
listy LRU .
Nowy blok jest wczytywany w miejsce bloku na pierwszej pozycje listy i przesuwany na
koniec.

Podobne dokumenty