System plików – 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; także: wolumin.
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 nośnika pamięci 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 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 Windows NT, APFS w macOS lub ext/ext2/ext3/ext4 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 i UDF na CD-ROM/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
[edytuj | edytuj kod]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. W przypadku dysków wielkość pojedynczego bloku danych jest wielokrotnością rozmiaru pojedynczego sektora (najczęściej 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)[potrzebny przypis].
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.
Przykład alokacji w linuksowym systemie plików ext2:
Blok rozr. | grupa bloków 0 | grupa bloków 1 | grupa bloków 2 | grupa bloków 3 | … | grupa bloków n |
Struktura grupy bloków (n – liczba bloków):
... | grupa bloków 1 | Superblok (1) | Deskryptory grupy (n) | Mapa bitowa bloków z danymi (1) | Mapa bitowa i-węzłów (1) | Tablica i-węzłów (n) | Bloki z danymi (n) | grupa bloków 3 | ... |
Podstawowe operacje
[edytuj | edytuj kod]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ą przechwytywane 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żą:
- otwieranie pliku (open)
- zamykanie pliku (close)
- tworzenie pliku (create)
- usuwanie pliku (unlink)
- tworzenie katalogu (mkdir)
- usuwanie katalogu (rmdir)
- czytanie z pliku (read)
- pisanie do pliku (write)
Hierarchia systemu plików
[edytuj | edytuj kod]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 podstawie unikalnej nazwy, ale również ścieżki dostępu:
Windows 2000/XP: Unix / Linux:
[C:] [/] +- boot.ini +- [boot] | +- [etc] +- [Documents and Settings] +- [home] | +- [pimpek] | +- [pimpek] | +- [moje dokumenty] | +- [filmy] | +- [filmy] | | +- twierdza.avi | | +- twierdza.avi | | | | | +- [dokumenty] | +- [teksty] | +- Dokument1.txt | +- Dokument1.txt | +- Dokument2.txt | +- Dokument2.txt | | +- [usr] | +- [var] +- [Program Files]
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 „/”), pełna ścieżka do pliku twierdza.avi (przykład powyżej) wygląda następująco:
/home/pimpek/filmy/twierdza.avi
W przypadku systemów Windows oraz DOS katalog jest reprezentowany przez lewy ukośnik (ang. backslash „\”), a pełna ścieżka do pliku twierdza.avi w tym systemie wygląda następująco:
C:\Documents and Settings\pimpek\moje dokumenty\filmy\twierdza.avi
Patrz też: ścieżka dostępu, katalog główny.
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
[edytuj | edytuj kod]- 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 – ext4; Windows NT, XP, Vista, Seven – NTFS; Windows 95,98,ME – FAT, FAT32 itd.).
- 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, HFS+ lub ext3).
- 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 Andrewsa), SMB oraz NCP (Novella).
- Specjalne systemy plików (Wirtualne systemy plików) – nie umożliwiają zarządzania danymi, np. system /proc (w Linuksie) dostarcza interfejs, 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.
Popularne systemy plików
[edytuj | edytuj kod]Poniższa lista jest podzielona ze względu na oryginalny system, dla którego były zaprojektowane. W chwili obecnej wiele systemów plików można obsługiwać w więcej niż jednym systemie operacyjnym (np. FAT, ISO 9660, NTFS, ext2, ZFS, SMB, NFS, JFS, XFS, UFS,...)
Unix/Linux
[edytuj | edytuj kod]- SYSV (system plików z Unix-V, firmy AT&T)
- Berkeley Fast File System (FFS) Poprzednik UFS
- UFS (uniksowy system plików pod Solarisa i BSD)
- minix (system prof. Andrew S. Tanenbauma)
- ext (pochodna miniksa)
- ext2 (second extended file system, ulepszony ext)
- ext3 (bazujący na ext2, z księgowaniem oraz szybszymi operacjami na katalogach)
- ext4 (bazujący na ext3, z lepszą alokacją miejsca na dysku, zwiększonymi limitami, czy możliwością defragmentacji online)
- btrfs (nowoczesny system plików z księgowaniem, migawkami, klonowaniem, zarządzaniem wolumenami wzorowany na ZFS)
- ReiserFS (Linuksowy system plików z księgowaniem z firmy Namesys)
- Reiser4 (system plików trzymający wszystkie dane w zmodyfikowanych B-drzewach)
- JFS (system plików IBM-a)
- XFS (system plików SGI)
- ADFS (Acorn StrongARM)
- Xia (pochodna miniksa)
- cramfs
- filecore FS (pod BSD)
- GNOME Storage (linuksowy system oparty na bazie danych)
- LogFS, UBIFS, NILFS – systemy plików dla pamięci flash
Sieciowe systemy plików (protokoły)
[edytuj | edytuj kod]- NFS (sieciowy system plików firmy Sun)
- AndrewFS (AFS) (sieciowy system plików pod Uniksa)
- xFS (sieciowy system plików)
- SMB (LAN Manager, smbfs, cifs – sieciowy system plików pod Windowsa)
- NCP (sieciowy system plików Novella)
- WebDAV (oparty na HTTP)
Sun Solaris
[edytuj | edytuj kod]- UFS – Unix File System – podstawowy system plików Solarisa
- ZFS system plików opracowany przez firmę Sun dla systemu Solaris (dostępny również w systemie FreeBSD)
- VxFS komercyjny system plików opracowany przez firmę Veritas Software, dostępny również pod Linux
DOS
[edytuj | edytuj kod]Windows
[edytuj | edytuj kod]- FAT32
- exFAT (Extended File Allocation Table)
- NTFS (system plików z księgowaniem pod Windows NT i nowsze)
- WinFS (system plików oparty na bazie danych i systemie plików NTFS)
- ReFS
Amiga
[edytuj | edytuj kod]- OFS (Amiga Old File System)
- Amiga Fast File System (FFS)
- Professional File System (PFS)
- Smart File System (SFS)
Apple/Macintosh
[edytuj | edytuj kod]- Apple DOS
- Apple SOS
- Apple ProDOS
- MFS (Macintosh File System)
- HFS (Hierarchical File System)
- HFS+
- HFSX
- APFS
OS/2
[edytuj | edytuj kod]- HPFS (High Performance File System) (dostępny również w systemach Windows NT do wersji 3.51)
- JFS (Journaled File System)
BeOS
[edytuj | edytuj kod]CD-ROM/DVD
[edytuj | edytuj kod]Inne
[edytuj | edytuj kod]- AtheOS File System (AFS) (system plików systemu operacyjnego AtheOS, pochodna Be File System)
Zobacz też
[edytuj | edytuj kod]- księgowanie
- proc
- FHS – standard rozmieszczenia plików i katalogów w GNU/Linuksie
- adres bezwzględny
Linki zewnętrzne
[edytuj | edytuj kod]- Porównanie uniksowych systemów plików – praca w ramach Systemów Operacyjnych na Uniwersytecie Warszawskim
- Filesystems HOWTO – dokument z roku 2000 opisujący różne systemy plików (raczej z uniksowego punktu widzenia) (ang.)