Czy system plików „widzi” urządzenie pamięci jako (bardzo dużą) tablicę bajtów?

12

Chcę wiedzieć, w jaki sposób system plików zapisuje i odczytuje dane z urządzenia pamięci masowej.

Myślę, że tak to działa:

System plików nie ma bezpośredniego dostępu do urządzenia pamięci, ale urządzenie pamięci jest prezentowane (przez sterownik urządzenia pamięci) w systemie plików jako (bardzo duża) tablica bajtów.

Na przykład, jeśli system plików chce uzyskać dostęp do dysku twardego, po prostu uzyska dostęp do tablicy bajtów reprezentującej dysk twardy.

W ten sposób system plików może współpracować z dowolnym rodzajem urządzenia pamięci masowej (tradycyjny dysk twardy, dysk SSD, dysk flash USB itp.) I zmieniany jest tylko sterownik urządzenia pamięci masowej.

Ten obraz pokazuje, co właśnie wyjaśniłem:

wprowadź opis zdjęcia tutaj

Czy mam rację w moim rozumieniu?

joseph_m
źródło

Odpowiedzi:

15

W systemie Linux (i 1980 era Uniksach), urządzenia pamięci masowej (dość często na partycji dysku na jakimś twardym , albo na jakimś SSD ) to blok urządzenie (patrz to ), więc jest [sub] Kolejność bloków (co jest podstawowa jednostka fizycznych we / wy). Fizyczny rozmiar bloku zależy od sprzętu (stare dyski IDE miały rozmiar 512 bajtów, nowe duże dyski SATA mają rozmiar 4 KB, przeczytaj stronę zaawansowanego formatu ) i kiedy tworzysz system plików (np. mkfsPatrz mke2fs (8)) możesz określić logiczny rozmiar bloku, który jest wielokrotnością (często małą potęgą dwóch, w tym 1) tego rozmiaru bloku fizycznego. Przeczytaj także o logicznym adresowaniu bloków .

W przeszłości (pomyśl o stacjach roboczych Sun3 z lat 90.) dysk był wykonany z cylindrów z głowicami zorganizowanymi w sektory (czytaj stronę CHS ), z sektorem zawierającym blok. Dziś nadal pozostają, ale są sztucznym artefaktem zapewnianym przez kontroler dysku twardego (obwód na samym dysku). W niektórych systemach operacyjnych sterownik urządzenia blokowego ponownie zaplanował i zmienił kolejność żądań We / Wy, aby zminimalizować ruch głowicy dysku i opóźnienie obrotowe .

W ten sposób system plików może współpracować z dowolnym rodzajem urządzenia pamięci masowej (tradycyjny dysk twardy, dysk SSD, dysk flash USB itp.) I zmieniany jest tylko sterownik urządzenia pamięci masowej.

Tak, ale zło tkwi w szczegółach (np. Przeczytaj o TRIM i Write Amplification , specyficznych dla dysków SSD). A szczegóły są ważne, więc faktyczna implementacja jest mniej prosta niż twoja postać. Przeczytaj więcej o systemach plików (i pomyśl o klastrowych i zdalnych systemach plików, w tym SMB i NFS ; przeczytaj także o Logical Volume Manager ).

Czytaj Systemy operacyjne: trzy łatwe elementy (i jego część poświęcająca trwałość ).

Zauważ, że urządzenia blokowe zniknęły w FreeBSD (faktycznie zapewniając wspólną abstrakcję dla urządzeń znakowych i blokowych). Podejrzewam, że nawet w systemie Windows system operacyjny wie o partycjach, rozmiarze bloku itp. (Ale powinieneś to sprawdzić).

Basile Starynkevitch
źródło
Windows obsługuje także partycje na dyskach, a każda partycja może korzystać z innego systemu plików (być może FAT-32 na jednym i NTFS na innym). System plików może uzyskiwać dostęp do partycji na poziomie bloku lub bloki można łączyć w „klastry”. Na dowolnej partycji rozmiar klastra zostanie ustalony.
Simon B
W pewnym sensie wiedziałem o tym, ponieważ głównie MSDOS.
Basile Starynkevitch
W rzeczywistości FreeBSD nadal używa tak zwanych „urządzeń blokowych”. Nie ma innego sposobu na uzyskanie dostępu do dysku twardego niż duży zestaw bloków. W FreeBSD są one nazywane urządzeniami znakowymi / raw. Nadal mają dostęp do urządzenia w postaci dużej liczby bloków. Jedyne, czego brakuje we FreeBSD, to buforowanie na poziomie urządzenia, które nie jest potrzebne, ponieważ system plików już zapewnia buforowanie.
juhist
3

Wszystko, co mówi Basile Starynkevitch, jest poprawne. Dodam jeszcze trochę. Rzeczywiście dyski były dyskami „blokowymi”, ale urządzenia blokowe (i wiele innych urządzeń) były prezentowane w dwóch postaciach: „surowe” i „ugotowane”. Surowe urządzenia można było adresować tylko w porcjach, które były wielokrotnościami ich natywnej wielkości. Tak więc surowe urządzenie dyskowe może być odczytywane lub zapisywane tylko jeden lub wiele bloków jednocześnie, a nie tylko bajt lub dwa. Gotowane urządzenia dodały warstwę, która umożliwiałaby takie mniejsze operacje, a także różne inne funkcje.

Systemy plików działały z urządzeniami typu raw i dlatego nie widziały ich jako dużej tablicy bajtów, ale raczej jako dużej tablicy bloków, jak wyjaśnił BS.

Topher
źródło