Dyski, systemy plików
Ogólne informacje o dyskach
Formatowanie niskopoziomowe
Każdy dysk jest poddawany przez producenta tzw. formatowaniu niskopoziomowemu. Są wtedy tworzone ścieżki, sektory i cylindry.
Ścieżki są koncentrycznymi okręgami numerowanymi od 0 (ścieżka 0 jest przy zewnętrznej krawędzi talerza dysku, kolejne numery ścieżek przebiegają od zewnętrz do środka dysku).
Cylinder to zbiór ścieżek znajdujących się w jednakowej odległości od środka dysku i utworzonych na różnych talerzach.
Ścieżki składają się z sektorów, których rozmiar jest stały i wynosi 512 B.
Struktura typowego dysku twardego jest następująca:
Ścieżka
Sektor geometryczny
Sektor
Klaster
Podział dysku na partycje
Użytkownik może podzielić dysk na części zwane partycjami (np. programem fdisk lub cfdisk w linuksie). Informacje o podziale na partycje zapisane są w tzw. tablicy partycji na początku dysku. Twardy dysk może zawierać najwyżej 4 partycje (4 wpisy w tablicy partycji). Mogą to być partycje główne i partycja rozszerzona. Jedna z partycji głównych musi być oznaczona jako aktywna (bootowalna) i z niej jest ładowany system operacyjny lub program ładujący tzw. bootloader mający wyższy priorytet. W systemie Windows chcąc podzielić dysk na więcej części, w partycji rozszerzonej trzeba utworzyć tzw. dyski logiczne.
Formatowanie wysokopoziomowe
Po podziale użytkownik musi sformatować każdą partycję. W systemie Windows jest wtedy zakładany dla partycji system plików. Wtedy też następuje podział na logiczne bloki - klastry tzw. jednostki alokacji. Mogą one się składać z kilku sektorów (ich wielkości są wielokrotnościami rozmiarów sektorów). W wielu systemach plików można wtedy określić wielkość klastrów (wybrać z podanego zakresu). Dla systemu NTFS wielkość klastrów można wybrać z zakresu: 512 B - 64 kB. Klastry są najmniejszymi jednostkami przydziału pamięci dla plików. Stanowią odpowiednik adresowalnej komórki pamięci głównej.
Podczas formatowania na początku partycji umieszczane są pewne struktury danych opisujące zawartość partycji i rozmieszczenie plików. W przypadku DOS/Windows jest to np. FAT czy MFT, w przypadku systemów linuksowych: bardziej złożone struktury danych np. blok główny (superblock), opisujący strukturę obszaru partycji oraz lista i-węzłów (i-node list) opisująca poszczególne pliki.
Jak system operacyjny pośredniczy w operacjach dyskowych?
Jednym z ważnych zadań systemu operacyjnego jest obsługa zapisu i odczytu danych w pamięciach dyskowych i związana z tym obsługa plików. Procesy nie mają bezpośredniego dostępu do urządzeń np. dysków i gdy chcą zapisać czy odczytać dane z dysku muszą skorzystać z pośrednictwa systemu operacyjnego. System operacyjny oferuje tzw. wywołania systemowe takie jak: otwieranie pliku, zamykanie pliku, czytanie, pisanie w pliku, tworzenie i usuwanie katalogów.
System operacyjny chcąc zapisać czy odczytać dane z dysku musi operować jakimiś współrzędnymi dyskowymi odnośnie miejsca zapisu czy odczytu. W pamięci głównej mamy adresowane komórki. Odpowiednikiem takich komórek na dysku są klastry (zgrupowania sektorów) inaczej zwane jednostkami alokacji. Odpowiednikami adresów komórek są numery klastrów (adresy klastrów). Tak więc system operacyjny podczas operacji dyskowych korzysta z numerów klastrów.
Jak system operacyjny ułatwia użytkownikowi proces zapisu i odczytu danych na dyskach?
Katalogi i pliki
Dla użytkownika komputera posługiwanie się numerami klastrów przy zapisie i odczycie danych byłoby kłopotliwe. Dlatego system operacyjny tworzy dla naszej wygody pewną abstrakcję: pliki i katalogi.
W rzeczywistości mamy do czynienia z zapisanymi klastrami. Pliki to zbiory zapisanych klastrów często porozrzucanych po całym dysku
System operacyjny ułatwia użytkownikom korzystanie z plików oferując mu kolejną abstrakcję: katalogi. Katalogi z punktu widzenia użytkownika porządkują pliki. Ale na dysku nie ma takiej struktury jak katalog - są tylko zapisane klastry. Katalog jest tak naprawdę plikiem (konkretnie zbiorem klastrów) z wpisami o plikach lub innych katalogach.
Drzewo katalogów
Dla użytkownika pliki umieszczone są w katalogach, katalogi mogą być w innych katalogach. Wszystko to tworzy nową logiczną (abstrakcyjną - nieistniejącą rzeczywiście) strukturę tzw. drzewo katalogowe.
Drzewo katalogowe składa się z pewnej ilości katalogów (directory). Na samym szczycie istnieje jeden wyróżniony katalog - katalog główny - korzeń - Root. Jest on katalogiem nadrzędnym dla wszystkich innych katalogów. Wszystkie katalogi znajdujące się w nim to podkatalogi katalogu głównego. Mówimy, że katalogi tworzą strukturę logiczną drzewa:
I poziom - katalog główny
II poziom - podkatalogi katalogu głównego
III poziom - podkatalogi podkatalogu katalogu głównego itd.
Katalog
Katalog jest strukturą logiczną, może zawierać pliki albo inne katalogi. W rzeczywistości katalog jest zbiorem wpisów o plikach i katalogach przechowywanych w postaci pliku. Wpisy o katalogach i plikach to np. nazwa, położenie na dysku, czas utworzenia, prawa dostępu.
Plik
Plik to zbiór danych zapisanych na dysku o określonej nazwie. Pamiętamy, że plik fizycznie nie istnieje, istnieje tylko zbiór zapisanych klastrów. Informacje o pliku przechowywane są w katalogu. Szczególnie jest tam przechowywana informacja o adresie pierwszego klastra z plikiem, w kolejnych fragmentach pliku jest przechowywana informacja o położeniu kolejnych kawałków pliku. W ten sposób pliki nie muszą być zapisywane w kolejnych klastrach, ale mogą być porozrzucane po całym dysku. W ten sposób kolejne kawałki pliku pamiętają informacje o położeniu następnych kawałków. Takie „porozrzucanie pliku” po dysku sprzyja oszczędności miejsca, ale z drugiej strony może wpływać na wolniejszy dostęp do pliku.
Podsumujmy: system operacyjny widzi pliki, jako zbiory zapisanych klastrów, zaś użytkownicy i procesy, jako ciągłe zbiory danych użytecznych. Z drugiej strony taka klastrowa, „pokawałkowana” struktura pliku powoduje, że dostęp do plików jest sekwencyjny tzn. odczytując dane z pliku czytamy je po kolei od początku do końca, tak jakby były zapisane na długiej taśmie.
Przypomnijmy obsługę plików w pisanych przez nas programach:
Proces musi otworzyć plik; system operacyjny tworzy wtedy w pamięci specjalne struktury danych odpowiadające plikowi
Podczas operacji na pliku (zapisu/odczytu) przesuwamy się od początku do końca pliku
Proces musi zamknąć plik
Otóż wymienione czynności są wykonywane przez system operacyjny przez tzw. wywołania systemowe.
Uwaga: usunięcie pliku jest operacją przeprowadzoną na katalogu- zostaje usunięty tylko wpis z katalogu, natomiast przechowywane w pliku dane zostają do momentu zastąpienia ich innymi danymi.
Identyfikacja pliku
Podanie nazwy pliku nie identyfikuje go jednoznacznie. Jest tak tylko w obrębie danego katalogu, nie zaś w obrębie całego drzewa katalogowego.
Pełna identyfikacja pliku to podanie ścieżki dostępu i nazwy:
W systemie WINDOWS: C:\Documents and Settings\Kazik\Moje Dokumenty\podanie.doc
W systemie Unix/Linux: /Home/Kazik/podanie.doc
System plików
System plików to system (standard) szczegółowo określający zasady zapisu danych na dysku. System plików określa m.in. sposób przechowywania informacji o plikach (tablice rozmieszczenia plików..), rodzaje przechowywanych informacji o plikach (nazwa, położenie, prawa dostępu), wielkość maksymalnego pliku, wielkość klastrów, maksymalne długości nazw plików.
Przykładowe systemy plików:
FAT
System plików stosowany w DOS, Windows
Nazwa pochodzi od tablicy FAT, w której są zapisywane informacje o położeniu plików i katalogów
W systemie FAT dla plików i katalogów zapisywane są: nazwa, data modyfikacji , rozmiar, położenie pierwszego klastra, atrybuty pliku; nie ma uwzględnionych praw dostępu; pozycje katalogowe (wpisy o plikach i katalogach) mają rozmiar 32 B i zawierają powyższe informacje
Nazwy pików mają co najwyżej 8 znaków+3 znaki rozszerzenia i mogą zawierać tylko znaki alfabetu łacińskiego, cyfry, znak podkreślenia i myślnik; wielkie i małe litery nie są rozróżniane
Nazwy FAT12, FAT16, FAT32 związane są z 12, 16 i 32-bitowymi adresami klastrów
FAT32
Pojawił się w systemie Windows 95 OSR2
32-bitowe adresy klastrów, zwiększyło to rozmiar obsługiwanych dysków do 2 TB
Maksymalny rozmiar pliku - 2 GB
„długie nazwy plików”; również znaki spoza alfabetu łacińskiego, też znaki alfabetów narodowych
NTFS
New Technology File System
Wykorzystywany w Windows NT, 2000,XP,2003Serwer, Vista; może być wykorzystywany w systemie Linux
64-bitowe adresy klastrów; wielkość klastra nie jest z góry ustalona, może być określona przez użytkownika przy formatowaniu dysku w zakresie 512 B-64 kB
Podczas formatowania partycji tworzona jest tablica MFT (Master File Table) zawierająca informacje o rozmieszczeniu plików i katalogów na dysku w postaci rekordów o wielkości 1 kB
Pierwszych 17 rekordów zawiera informacje związane z samym systemem plików, pozostałe zawierają informacje o plikach i katalogach
Stosuje standard kodowania znaków Unicode; długość nazw plików do 255 znaków
Umożliwia kontrolę dostępu do plików i katalogów przez prawa dostępu - zapewnia to wysoki poziom bezpieczeństwa
Wykorzystuje żurnal (dziennik) do rejestrowania zmian metadanych (danych o plikach i katalogach)
Ext2/ext3
Extended File System
Dla Linuxa
Ext3 wykorzystuje dziennik
ReiserFS
System z żurnalingiem
Konkurencja dla ext3
Większa wydajność przy operowaniu małymi plikami
Dla zainteresowanych:
Journaling(kronikowanie)
Jest to funkcja systemów plików polegająca na prowadzeniu dziennika (journal), w którym zapisywane są operacje zlecone systemowi plików, ale jeszcze niezakończone (transakcje)
System plików musi przechowywać oprócz danych zapisywanych w plikach, także dane o samej strukturze plików i strukturze systemu plików (tzw. metadane). Stąd biorą się problemy ze spójnością podczas awarii systemu, gdy nastąpi ona między operacjami na metadanych i operacjami na danych (w trakcie jednej operacji np. zapisu).
Transakcje zapewniają zapis takiej jednej operacji dyskowej (zapisu, tworzenia lub usuwania pliku (katalogu)) do dziennika. Jest ona zapisywana w całości i tylko, jeśli wszystkie jej kroki przejdą pomyślnie może zostać uznana za wykonaną.
W momencie uruchomienia systemu po awarii wszystkie operacje w całości zapamiętane w dzienniku są wykonywane, a te, które nie są zapisane w całości są wymazywane z dziennika i ignorowane.
W przypadku systemów plików bez dziennika, aby przywrócić porządek po nagłej awarii, trzeba uruchamiać specjalny program poprawiający błędne wpisy. W systemie Windows 98 był automatycznie uruchamiany program scandisk.
Przykładowe błędy to:
- wycieki wolnego miejsca (po przerwanej alokacji nowych bloków lub przy usuwaniu pliku został on już skasowany, ale jego bloki nie są jeszcze zaznaczone jako usunięte)
- plik1 ma wpisy pośrednie mogące pokazywać na bloki, których system już nie zdążył zająć przed awarią, następnie plik2 je zajmuje, a my teraz zwalniamy plik1 i plik2 traci dane!
System plików z kroniką po restarcie zwykle przywraca spójność dysku w czasie rzędu kilku, kilkunastu sekund.
Restart systemu po awarii w systemach z kronikowaniem nie zależy od wielkości partycji, co jest szczególnie istotne w przypadku wielkich dysków.
Rozróżniamy dwa podstawowe typy kronikowania:
- tylko metadanych (zapewnia spójność metadanych, ale może nie pamiętać ostatnio wpisanych danych tuż przed awarią)
- metadanych i danych (odtworzy wszystko, co zostało w całości wprowadzone do dziennika)