Systemy plików stosuje się dla różnych



Pobieranie 68.74 Kb.
Data01.05.2016
Rozmiar68.74 Kb.


System plików jest to metoda przechowywania plików, zarządzania plikami, informacjami o tych plikach, tak by dostęp do plików i danych w nich zgromadzonych był łatwy dla użytkownika systemu.

Systemy plików stosuje się dla różnych nośników danych, takich jak dyski, dyskietki, a także w strumieniach danych, sieciach komputerowych, pamięciach. We współczesnych systemach operacyjnych bezpośrednie operowanie na danych w plikach zarezerwowane jest tylko dla systemu operacyjnego, aplikacje mają dostęp tylko do operacji na plikach i mają zabroniony bezpośredni dostęp do nośnika danych.

Z formalnego punktu widzenia system plików to reguły umieszczania na nośniku danych, abstrakcyjnych danych oraz informacji umożliwiających przechowywanie tych danych, łatwy i szybki dostęp do informacji o danych oraz do tych danych, manipulowania nimi a także sposobach usuwania ich.

Większość systemów operacyjnych posiada własny (macierzysty) system plików, rozwijany równolegle z nim (np. FAT w DOS-ie, NTFS w Microsoft Windows NT lub ext/ext2/ext3 i ReiserFS/Reiser4 w Linuksie), ze względu na pewne specyficzne właściwości nadawane plikom (np. atrybut wykonywalności pliku), podobnie jak niektóre nośniki danych (np. ISO 9660 na CD-ROM i UDF na DVD), jednak sam system plików jest niezależny od nich. Same systemy operacyjne (w szczególności Unix i jego pochodne) potrafią obsługiwać wiele systemów plików.


Organizacja danych


Nośniki danych, takie jak dyski twarde, dyskietki posiadają blokową strukturę danych, znaczy to, że dane są w nich przechowywane w postaci bloków, a blok musi być w całości zapisywany i odczytywany (bloki te nazywane są sektorami). W przypadku dysków i dyskietek mają taką samą wielkość (przeważnie 512 bajtów).

Bloki tworzą strukturę liniową:




Blok 0

Blok 1

Blok 2

Blok 3



Blok n

Systemy operacyjne łączą bloki w klastry. Klaster składa się z kilku bloków (w nowszych systemach może to być 8 lub więcej bloków).

Dyskowy system plików część pamięci wykorzystuje na tzw. sektor rozruchowy (boot sector), który nie stanowi zasadniczej części systemu plików i jest używany do rozruchu systemu. Ponadto systemy plików przechowują listy wszystkich klastrów (oraz informacje do których plików one należą) w tzw. tablicach alokacji.

Podstawowe operacje


Jeżeli program chce wykonać jakąś operację na pliku robi to poprzez system plików. W systemie Unix oraz jego pochodnych takie operacje realizowane są za pomocą wywołań systemowych. Wywołania te są przychwytywane przez wirtualny system plików (VFS), odpowiednio przetwarzane i kierowane do zasadniczego systemu plików. Zastosowanie wirtualnego systemu plików powoduje, że program stosuje te same wywołania systemowe niezależnie od systemu plików.

Do najbardziej podstawowych wywołań systemowych należą:



  • Tworzenie pliku : system musi znaleźć miejsce na ten plik oraz wpisać plik do katalogu, nowo utworzony plik jest pusty, przy tworzeniu użytkownik podaje atrybuty pliku lub system ustawia je na domyślne;

  • Usuwanie pliku : system usuwa wpis pliku do katalogu oraz zaznacza obszar na dysku zajmowany dotychczas przez ten plik jako wolny, istnieje też wersja tej funkcji, która „czyści" miejsce po pliku a nie tylko zaznacza obszar jako wolny, jest jednak dużo mniej praktyczna do codziennych zastosowań« (czas działania);

  • Otwieranie pliku : w celu wykonania niektórych operacji na pliku system wymaga jego otwarcia, niektóre systemy robią to domyślnie przy pierwszym odwołaniu do pliku, inne wymagają od programisty jawnego zażądania otwarcia pliku (wywołania funkcji open); po otwarciu informacja o pliku jest przekazywana do tablicy aktualnie otwartych plików, procesy z niego korzystające dostają gotowy wskaźnik z tej tablicy, co zapobiega ciągłemu przeszukiwaniu katalogów;

  • Zamykanie pliku : funkcja, która usuwa informacje o pliku z tablicy otwartych plików;

  • Pisanie do pliku : zapisywanie nowych informacji do pliku, odbywa się ono w miejscu na które pokazuje wskaźnik pisania do pliku niezależnie od tego czy nie spowoduje to utraty wcześniej zapisanych danych;

  • Czytanie pliku : również rozpoczyna się od miejsca, na które pokazuje wskaźnik w pliku, przesyłanie informacji z pliku do pamięci dopisywanie do pliku (append) : czyli pisanie na końcu pliku, ta funkcja przydaje się na przykład gdy chcemy, żeby użytkownicy mogli dopisywać informacje do pliku ale żeby nie mogli ich kasować;

  • Skracanie pliku (truncate) : usunięcie części lub wszystkich informacji z pliku bez usuwania jego atrybutów;

  • Przeszukiwanie (seek) : przesunięcie wskaźnika w pliku na jakąś pozycję¦ (miejsca od którego system pisze i czyta plik);

  • Ustawienie atrybutów pliku : czyli ustalenie możliwych atrybutów w pliku;

  • Zmiana nazwy : Zmienia nazwę istniejącego pliku;

Nie wszystkie te operacje występują we wszystkich systemach plików. Wymienione powyżej są jednak standardowe.

Hierarchia systemu plików


Prymitywne systemy plikowe posiadały jedną listę plików wchodzących w skład systemu plików. W miarę postępu systemy plików zostały unowocześnione i współczesne systemy plików oprócz głównej listy (katalogu głównego) zawierają także podlisty (podkatalogi) które również mogą zawierać dalsze podlisty (podkatalogi). W ten sposób rozwinęło się pojęcie katalogów nadrzędnych oraz katalogów podrzędnych.

Katalog, w którym znajduje się plik jest nadrzędny (bezpośrednio) względem tego pliku. Katalog jest podrzędny (bezpośrednio) względem innego katalogu w którym się znajduje.

W ten sposób powstało pojęcie drzewiastej hierarchii systemu plików, w której każdy katalog może zawierać podkatalogi, które mogą zawierać dalsze podkatalogi. Powstaje w ten sposób struktura, która wygląda jak "odwrócone drzewo".

Systemy, które mają taką strukturę nazywają się hierarchicznymi systemami plików. W takich systemach plik identyfikowany jest nie tylko na postawie unikalnej nazwy ale również ścieżki dostępu. Format podanej ścieżki zależy od systemu operacyjnego. W większości systemów (Unix, Linux, Mac OS) katalog jest reprezentowany przez ukośnik (ang. slash "/").

W przypadku systemów Windows oraz DOS katalog jest reprezentowany przez lewy ukośnik (ang. backslash "\").

Dla systemu GNU/Linux powstały dwa formalne standardy określające układ katalogów w głównym systemie plików: FSSTND i FHS.


Rodzaje systemów plików


  • Dyskowy system plików - "normalny" system plików pozwalający na zarządzanie danymi na stacjonarnych nośnikach danych, takich jak twarde dyski. Każdy system posiada swój własny system plików (np. Linux - ext2, Windows NT - NTFS itd.).

  • Sieciowy system plików - w zasadzie jest to protokół umożliwiający przesyłanie poleceń do serwera przez sieć oraz wykonywanie operacji na odległość. Informacje są z powrotem przekazywane z serwera do klienta. Dzięki takiemu rozwiązaniu użytkownik nie widzi żadnej różnicy między pracą na sieciowym systemie plików a pracą na lokalnym systemie plików. Najbardziej znane to NFS, Coda, AFS (System plików Andrew'sa), SMB oraz NCP (Novell'a).

  • Specjalne systemy plików (Wirtualne systemy plików) - nie umożliwiają zarządzania danymi, np. system /proc (w Linuksie) dostarcza interfejsu, który umożliwia dostęp do niektórych struktur jądra.

  • Systemy oparte na bazie danych - systemy plików, w których pliki są identyfikowane na podstawie swojej charakterystyki (np. autora, typu czy tematu, którego dotyczą) - jak w bazach danych.

  • Systemy dziennikujące (lub księgujące, ang. journaling) - systemy z mechanizmem księgującym, zwiększającym bezpieczeństwo danych i umożliwiającym szybkie przywrócenie sprawności systemu po awarii. Mechanizm taki posiadają nowsze systemy plików (np. NTFS lub ext3).

Popularne systemy plików

    • Unix/Linux


  • minix (system prof. Andrew S. Tanenbauma)

  • ext (pochodna miniksa)

  • ext2 (second extended file system, ulepszony ext)

  • ext3 (bazujący na ext2, z księgowaniem)

  • ext4 (dodany będzie support dla partycji do 1024PB)

  • FFS Poprzednik UFS

  • ReiserFS (Linuksowy system plików z księgowaniem autorstwa Hansa Reisera)

  • Reiser4

  • JFS (system plików IBM'a)

  • UFS (uniksowy system plików pod Solarisa i BSD)

  • XFS

  • xFS (sieciowy system plików)

  • NFS (sieciowy system plików firmy Sun)

  • SYSV (system plików z Unix-V, firmy AT&T)

  • ADFS (Acorn StrongARM)

  • GNOME Storage (linuksowy system oparty na bazie danych)

  • Xia (pochodna miniksa)

  • AndrewFS (AFS) (sieciowy system plików pod Uniksa)

  • smbfs (LAN Manager)

  • ncpfs (sieciowy system plików Novella)

  • cramfs

  • filecore FS (pod BSD)
    • DOS


  • FAT (FAT12) (Tablica alokacji plików, dyskietkowy)

  • FAT16

  • FAT32
    • Windows


  • VFAT (Virtual FAT)

  • NTFS (system plików z księgowaniem pod Windows NT i nowsze)

  • WinFS (system plików oparty na bazie danych)
    • Amiga


  • Apple DOS

  • Apple SOS

  • Apple ProDOS

  • MFS (Macintosh File System)

  • HFS (Hierarchical File System)

  • HFS+

  • HFSX
    • OS/2


  • HPFS (High Performance File System)

  • JFS (Journaled File System)
    • BeOS


  • BeFS (Be file system)

  • OpenBFS
    • CD-ROM/DVD


  • ISO9660

    • Rockridge (rozszerzenie ISO9660 dla Unix)

    • Joliet (rozszerzenie standardu ISO9660 firmy Microsoft)

  • UDF (Universal Disk Format)

System plików Ext2 na dysku składa się z wielu grup bloków dyskowych, przy czym pojedynczy blok uważamy za podstawową fizyczną jednostkę objętościową danych. Wielkość bloku dyskowego jest stała w ramach całego systemu plików. Stałe ograniczające rozmiar bloku dyskowego znajdują się w pliku nagłówkowym.

Fizycznie bloki na dysku położone są w grupach. W systemie EXT2 wyróżnia się także logiczne grupy bloków, które nie zupełnie pokrywają się z fizycznymi grupami.

Grupa bloków na poziomie logicznym:


  • deskryptor grupy (32 bajty)

  • blok z mapą zajętości bloków danych (1 blok dyskowy)

  • blok z mapą zajętości i-węzłów ( 1 blok dyskowy)

  • bloki z tablicą i-węzłów

  • bloki danych

Natomiast każda grupa fizyczna zawiera informacje o jednej grupie logicznej, a ponadto pewne informacje o całym systemie plików.

Blok Identyfikacyjny

Bloki Deskryptorów Systemu plików

Blok z Bitmapą Zajętości bloków danej Grupy

Blok z Bitmapą Zajętości i-węzłów danej Grupy

Tablica

I-węzłów


Bloki Danych

Grupa fizyczna zawiera blok z mapą zajętości bloków danych, blok z mapą zajętości tablicy i-węzłów, bloki z tablicą i-węzłów, bloki danych - określonej grupy logicznej oraz redundantną kopię bloku identyfikacyjnego (ang. super block, którego strukturę ext2-super_block) i bloki z deskryptorami wszystkich grup logicznych systemu plików. Przy czym kolejność występowania tych bloków jest taka jak na powyższym rysunku.

Podczas inicjalizowania systemu, do pamięci wczytywane są bloki z deskryptorami grup logicznych z pierwszej grupy fizycznych bloków dyskowych, gdy nie występują sytuacje wyjątkowe system nie korzysta z bloków z deskryptorami i z bloku identyfikacyjnego z pozostałych grup fizycznych. Deskryptor grupy opisuje struktura ext2_grup_desc, która zajmuje 32 bajty, co oznacza, że gdy blok dyskowy ma pojemność 1024 bajty to jeden blok zawiera 32 deskryptory grup logicznych.

Po analizie funkcji przydzielającej nowy blok dyskowy ext2_new_block ( z pliku fs/ext2/balloc.c ) i podobnej funkcji dla i-węzłów ext2_new_inode ( z pliku fs/ext2/ialloc.c ) bitmapy zajętości to po prostu tablice bitów, przy czym jedna bitmapa zajmuje dokładnie jeden blok. Konsekwencją tego jest wyliczenie maksymalnego rozmiaru grupy. Mianowicie jeśli bloki są rozmiaru 1 KB tzn. 8096 bitów, to pojedynczą mapą możemy opisać 8096 bloków - tyle ile bitów, więc w takiej grupie logicznej możemy 8 MB na bloki z danymi. Jeżeli natomiast bloki dyskowe są rozmiaru 4 KB to na bloki z danymi mamy wówczas szesnaście razy więcej miejsca czyli 128MB.

Podzielenie systemu plików na grupy bloków ma na celu zwiększenie bezpieczeństwa oraz optymalizację zapisu danych na dysku. Zwiększenie bezpieczeństwa jest uzyskane poprzez utrzymywanie redundantnych informacji o systemie plików (blok informacyjny oraz deskryptory grup) w każdej fizycznej grupie bloków. Optymalizacja zapisu danych jest uzyskiwana poprzez algorytmy przydziału nowych i-węzłów i bloków dyskowych. Podczas przydziału i-węzeła plikowi, który jest katalogiem wyszukiwana jest grupa z największą liczbą wolnych i-węzłów. Jeżeli nie jest to katalog to zaczyna się szukać wolnego i-węzła od grupy w której znajduję się i-węzeł katalogu tego pliku. Dzięki czemu zwiększa się prawdopodobieństwo, że i-węzły plików z danego katalogu leżą w tej samej grupie a przez to, również i prawdopodobieństwo położenia bloków danych plików z danego katalogu w jednej grupie bloków.

Wyszukiwanie wolnego bloku dyskowego zaczyna się od grupy w której znajduję się i-węzeł pliku, przez co z dużym prawdopodobieństwem bloki danych jednego pliku położone są w obrębie jednej grupy bloków dyskowych. Algorytmy przydziału i-węzłów i bloków danych powodują więc ich równomierne rozłożenie w grupach oraz w miarę możliwości spójne położenie bloków danych plików.



FAT

Najprostszym systemem plików jest, używany przez DOS i Windows, system oparty na tablicy alokacji plików FAT (File Allocation Table). System ten, pierwotnie stworzony na potrzeby zapisu na dyskietkach, dzięki swojej prostocie trafił do obsługi dysków sztywnych w systemach Microsoftu. System FAT początkowo traktował jako jednostkę alokacji danych pojedynczy sektor, w wyniku czego przy 16-bitowej architekturze systemu operacyjnego umożliwiał obsługę dysków o pojemnościach nie przekraczających 32 MB (65536 sektorów). Obsługę większych pojemności umożliwiło dopiero użycie większych jednostek alokacji, nazywanych klastrami (ang. cluster – pęczek, grono). Przy obsłudze woluminów większych od 32 MB wielkość klastra jest zależna od wielkości woluminu i w przypadku np. dysku o pojemności 1 GB klaster liczy sobie 16 kB, a dysk 2,5 – gigabajtowy wymaga już klastrów o pojemności 64 kB. Każdy zapisany plik to trochę zmarnowanej przestrzeni, średnio połowa pojemności klastra, bo przecież długość plików jest wielkością przypadkową.

W przypadku, gdy dysk służy do przechowywania bazy danych, złożonej z kilku plików po kilkaset megabajtów, nie ma to żadnego znaczenia, ale w przypadku kilku tysięcy plików o różnych długościach, jakie znajdują się na dysku typowego użytkownika, może to być kilkanaście megabajtów straconego miejsca. A w dodatku system odczytuje całe klastry – w przypadku potrzeby wczytania liczącego sobie 300 bajtów pliku, np. *.ini, system żąda od dysku odczytu całego klastra. Oprócz straty miejsca jest to również strata czasu.

Dzięki rozmaitym rozszerzeniom i protezom (jak np. VFAT) system FAT dotrwał do chwili, kiedy programiści Microsoftu zdołali stworzyć 32 – bitową tablicę alokacji. Zmiana nie tyle jakościowa, co ilościowa  dopiero dysk pojemności większej od 2 GB wymaga stosowania jednostek alokacji większych od sektora.

O wadach systemu FAT, zwłaszcza w jego microsoftowych realizacjach, można by długo pisać. Oprócz wspomnianych już kłopotów, wywołanych przez zbyt małą liczbę dostępnych jednostek alokacji, poważną wadą systemu FAT jest silna fragmentacja plików pomiędzy wiele klastrów o bardzo różnym fizycznym położeniu na dysku. Pociąga to za sobą konieczność okresowej defragmentacji przy użyciu specjalnych narzędzi programowych, a także powoduje stosunkowo duże prawdopodobieństwo powstawania błędów zapisu, polegających na przypisaniu jednego klastra dwóm plikom (tzw. crosslink), co kończy się utratą danych z jednego lub obu „skrzyżowanych” plików.

Typowym błędem, pojawiającym się w systemie FAT, jest również pozostawianie tzw. zgubionych klastrów, tj. jednostek alokacji nie zawierających informacji, ale opisanych jako zajęte. O tym, jak duże jest prawdopodobieństwo tego rodzaju błędów, świadczy fakt wyposażenia DOS-u od samego początku w narzędzie do ich wykrywania i likwidacji (polecenie CHKDSK).

NTFS

Podstawową jednostką systemu NTFS jest wolumin. Wolumin jest tworzony przez program administrowania dyskiem systemu NT; u jego podstaw leży logiczny podział dysku. Wolumin może zajmować część dysku lub cały dysk, może też rozciągać się na kilka dysków. System NTFS nie ma do czynienia z poszczególnymi sektorami dysku. Zamiast nich używa klastrów. System NTFS używa w charakterze adresów dyskowych logicznych numerów klastrów (LCN). Przypisuje je poprzez ponumerowanie klastrów od początku dysku do jego końca. Za pomocą tego schematu system może wyliczyć fizyczną odległość na dysku (w bajtach), mnożąc numer LCN przez wielkość klastra.



Plik w systemie NTFS nie jest zwyczajnym strumieniem bajtów, lecz jest obiektem strukturalnym złożonym z atrybutów. Każdy atrybut jest niezależnym strumieniem bajtów, który podlega tworzeniu , usuwaniu, itp.. Niektóre atrybuty są standardowe dla wszystkich plików, wliczając w to nazwę pliku, czas jego utworzenia, itp. Większość tradycyjnych plików danych ma beznazwowy atrybut danych, mieszczący wszystkie dane pliku. Każdy plik w systemie NTFS jest opisany przez jeden lub więcej rekordów przechowywanych w specjalnym pliku o nazwie główna tablica plików (master file table - MFT). Rozmiar rekordu jest określony podczas tworzenia systemu plików i waha się w granicach od 1 do 4 KB.

Małe atrybuty przechowuje się w samym rekordzie MFT i nazywa rezydentnymi. Wielkie atrybuty, takie jak nienazwana masa danych - określone mianem nierezydentnych - są przechowywane w jednym lub większej liczbie ciągłych rozszerzeń na dysku, do których wskaźniki przechowuje się w rekordzie MFT. W przypadku małych plików w rekordzie MFT może się zmieścić nawet atrybut danych. Jeżeli plik ma wiele atrybutów lub jeśli jest on mocno pofragmentowany i wymaga zapamiętania wielu wskaźników pokazujących wszystkie jej części, to jeden rekord w tablicy MFT może okazać się za mały. W tym przypadku plik jest opisany przez rekord o nazwie: podstawowy rekord pliku (base file record), który zawiera wskaźniki do rekordów nadmiarowych, przechowujących pozostałe wskaźniki i atrybuty.

Każdy plik w woluminie systemu NTFS ma niepowtarzalny identyfikator zwany odsyłaczem do pliku. Odsyłacz do pliku jest wielkością 64-bitową, składającą się z 48-bitowego numeru pliku i 16-bitowego numeru kolejnego. Numer pliku jest numerem rekordu w strukturze MFT opisującej plik. Numer kolejny jest zwiększany za każdym razem, gdy następuje powtórne użycie w tablicy MFT. Zwiększenie to umożliwia systemowi NTFS wykonywanie wewnętrznej kontroli spójności - na przykład wyłapywanie nieaktualnych odwołań do usuniętego pliku po użyciu wpisu MFT na nowy plik.

Każdy katalog stosuje strukturę danych zwaną B+-drzewem, w którym zapamiętuje indeks swoich nazw plików. Każdy wpis w katalogu zawiera nazwę pliku i odsyłacz do niego oraz kopię znacznika czasu uaktualnienia i rozmiaru pliku - pobranej z atrybutów pliku rezydujących w tablicy MFT. Kopie tych informacji są przechowywane w katalogu, co przyspiesza wyprowadzanie jego zawartości - nazwy wszystkich plików , i ich rozmiary i czasy uaktualnień są obecne w samym katalogu, więc nie potrzeba ich zbierać na podstawie wpisów w tablicy MFT każdego z plików. Wszystkie metadane woluminu systemu NTFS są przechowywane w plikach. Pierwszym z takich plików jest tablica MFT. Drugi plik, używany do działań naprawczych w przypadku uszkodzenia tablicy MFT, zawiera kopię pierwszych szesnastu pozycji tablicy MFT. Oprócz tego istnieje jeszcze kilka innych specjalnych plików



Literatura:

  1. http://pl.wikipedia.org/wiki/System_plik%C3%B3w

  2. J. Kobus, Systemy operacyjne – wprowadzenie, http://www.fizyka.umk.pl/~jkob/so-transp.pdf

  3. http://www.dyski.wirt.pl/fat1.htm

  4. A Hlebowicz, K. Ostrowski, P. Kawczyński, M. Zarzycki, Opis systemu plików EXT2 na dysku, http://students.mimuw.edu.pl/SO/LabLinux/PLIKI/PODTEMAT_1/opisEXT2.htmlx60



©absta.pl 2016
wyślij wiadomość

    Strona główna