Чи "файлова система" бачить "запам'ятовуючий пристрій як (дуже великий) байтовий масив?


12

Хочу знати, як записує та читає файлова система із пристрою зберігання даних.

Я думаю, що це працює так:

Файлова система не має доступу до пристрою зберігання безпосередньо, але, скоріше, запам'ятовуючий пристрій подається (драйвером пристрою запам'ятовуючого пристрою) до файлової системи у вигляді (дуже великого) байтового масиву.

Наприклад, якщо файлова система хоче отримати доступ до жорсткого диска, вона просто отримає доступ до масиву байтів, що представляє жорсткий диск.

Таким чином файлова система може працювати з будь-яким типом пристрою зберігання даних (традиційний жорсткий диск, SSD, флешка та ін.), І змінюється лише драйвер пристрою для накопичувача.

Це зображення показує те, що я щойно пояснив:

введіть тут опис зображення

Чи правильно я розумію?

Відповіді:


15

У Linux (і Unixes епохи 1980-х років) пристрій збереження даних (досить часто розділ диска на якомусь жорсткому диску або на якомусь SSD ) є блоковим пристроєм (див. Це ), тому є [під-] послідовністю блоків (що є основна одиниця фізичного вводу-виводу. Фізичний розмір блоку залежить від апаратного забезпечення (старі диски IDE мали розмір блоку 512 байт, нові великі диски SATA мають розмір блоку в 4 Кбайт, читайте вікі-сторінку розширеного формату ) та коли ви створюєте файлову систему (наприклад mkfs, див. Mke2fs (8)) Ви можете вказати логічний розмір блоку, який є кратним (часто це невелика потужність у два, включаючи 1) цього фізичного розміру блоку. Читайте також про логічне блокування адрес .

У минулому (подумайте про робочі станції Sun3 1990-х років) диск був виготовлений із циліндрів з головами, організованими по секторах (читайте вікі-сторінку CHS ), із сектором, що містить блок. Сьогодні вони все ще залишаються, але є штучним артефактом, наданим контролером жорсткого диска (схема на самому диску). У деяких ОС ОС драйвер блокового пристрою перепланував і упорядкував запити вводу-виводу, щоб мінімізувати рух головки диска та затримку обертання .

Таким чином файлова система може працювати з будь-яким типом пристрою зберігання даних (традиційний жорсткий диск, SSD, флешка та ін.), І змінюється лише драйвер пристрою для накопичувача.

Так, але зло полягає в деталях (наприклад, читайте про TRIM і Write Amplification , характерні для SSD). І деталі важливі, тому реальна реалізація менш проста, ніж ваша фігура. Детальніше про файлові системи (і подумайте про кластеризовані та віддалені файлові системи, включаючи SMB & NFS ; читайте також про Logical Volume Manager ).

Прочитайте Операційні системи: Три простих частини (і її частина, що зберігається ).

Зауважте, що блокові пристрої відсутній у FreeBSD (фактично надаючи загальну абстракцію для персонажів та блокових пристроїв). Я підозрюю, що навіть у Windows ОС знає про розділи, розмір блоку тощо (але слід перевірити).


Windows також обробляє розділи на дисках, і кожен розділ може використовувати іншу файлову систему (можливо FAT-32 на одному та NTFS на іншому). Файлова система може отримати доступ до розділів на рівні блоків, або блоки можуть бути об'єднані в "кластери". На будь-якому даному розділі розмір кластера буде фіксований.
Саймон Б

Я начебто це знав, бо MSDOS здебільшого так і робив.
Базиль Старинкевич

Власне, FreeBSD все ще використовує те, що ви називаєте "блокувати пристрої". Немає способу отримати доступ до жорсткого диска, крім великого масиву блоків. Їх просто називають персонажами / сирими пристроями у FreeBSD. Вони все ще отримують доступ до пристрою як великий масив блоків. Єдине, чого бракує у FreeBSD - це кешування на рівні пристрою, яке не потрібно, оскільки файлова система вже забезпечує кешування.
juhist

3

Все, що говорить Басіль Старинкевич, є правильним. Додам ще трохи. Дійсно дисководи були «блоковими» накопичувачами, але блокові пристрої (та багато інших пристроїв) були представлені у двох формах: «сирої» та «вареної». Сирі пристрої можна було вирішувати лише шматками, які були кратними їх розміру. Таким чином, необроблений дисковий пристрій можна було прочитати або записати лише один або кілька блоків одночасно, а не лише байт чи два. Приготовані пристрої додали шар, який би дозволяв такі менші операції, а також різні інші функції.

Файлові системи працювали з необробленими пристроями, і тому вони розглядали їх не як великий масив байтів, а скоріше великий масив блоків, як пояснив BS.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.