Подтвердить что ты не робот

Как реализовать очень простую файловую систему?

Мне интересно, как ОС читает/записывает на жесткий диск.
Я хотел бы как упражнение реализовать простую файловую систему без каталогов, которые могут читать и записывать файлы.
С чего начать? Будет ли C/С++ делать трюк или мне нужно идти с более низким уровнем подхода?
Слишком много для одного человека?

4b9b3361

Ответ 1

Взгляните на FUSE: http://fuse.sourceforge.net/

Это позволит вам написать файловую систему без фактического написания драйвера устройства. Оттуда я бы начал с одного файла. В основном создайте файл, который (например) длиной 100 МБ, а затем запишите свои подпрограммы для чтения и записи из этого файла.

После того, как вы довольны результатами, вы можете посмотреть на запись драйвера устройства и заставить ваш драйвер работать с физическим диском.

Самое приятное, что вы можете использовать почти любой язык с FUSE, а не только C/С++.

Ответ 2

Мне было довольно легко понять простую файловую систему при использовании файловой системы fat на микроконтроллере avr.

http://elm-chan.org/fsw/ff/00index_e.html

Посмотрите на код, который вы выясните, как работает жир.

Ответ 3

Для изучения идей файловой системы действительно не нужно использовать диск, который я думаю. Просто создайте массив из 512 байтовых байтовых массивов. Только представьте себе, что ваш жесткий диск начинает немного экспериментировать. Также вы можете взглянуть на некоторые из стандартных учебников по ОС, например http://codex.cs.yale.edu/avi/os-book/OS8/os8c/index.html

Ответ 4

Ответ на ваш первый вопрос заключается в том, что помимо Fuse, как сказал вам кто-то другой, вы также можете использовать Dokan, который делает то же самое для Windows, и отсюда просто вопрос о чтении и записи в физический раздел (http://msdn.microsoft.com/en-us/library/aa363858%28v=vs.85%29.aspx (читайте, в частности, раздел "Физические диски и тома" )).

Конечно, в Linux или Unix помимо использования чего-то вроде Fuse, который вам нужно только выдать, вызов для чтения или записи требуемого устройства в /dev/xxx (если вы root), и в этих терминах Unices больше в зависимости от вашей точки зрения.

Попробуйте реализовать простую файловую систему, такую ​​как Fat, или что-то более экзотерическое, как файловая система tar, или даже некоторая простая файловая система на основе понятий Unix, таких как UFS или Minux, или просто то, что только регистрирует сделанные вызовы и их аргументы в файл журнала (и это поможет вам понять, вызовы, которые возникают в драйвере файловой системы во время обычного использования вашего компьютера).

Теперь ваш второй вопрос (это гораздо проще ответить), да, C/С++ будет делать трюк, поскольку они являются языковой версией разработки системы, а также много кода вашего примера будет в C/С++, поэтому вы, по крайней мере, прочитаете C/С++ в своем развитии.

Теперь для вашего третьего вопроса, да, это выполнимо одним человеком, например, файловая система ext (широко известная в мире Linux ее преемниками как ext2 или ext3) была сделана одним разработчиком Теодором Цо, поэтому дон Думаю, что эти вещи не выполнимы одним человеком.

В заключительных заметках помните, что реальная файловая система взаимодействует с множеством других подсистем в обычном ядре, например, если у вас есть ноутбук и спящий режим, файловая система должна очистить все изменения, внесенные в открытые файлы, если у вас есть файл подкачки на этом разделе или даже если файл подкачки имеет свою собственную файловую систему, что повлияет на вашу файловую систему, особенно размеры блоков, поскольку они будут иметь тенденцию быть равными или обладают степенью размера блока страницы, поскольку легко разместить блок из файловой системы в памяти, который по совпадению равен размеру страницы (потому что это только одна передача).

А также безопасность, так как вы хотите управлять пользователями и файлами, которые они читают/пишут, и это обычно означает, что перед открытием файла вам нужно знать, что пользователь зашел в систему, и какие разрешения у него есть для этот файл. И, очевидно, без файловой системы пользователи не могут запускать какую-либо программу или взаимодействовать с машиной. Современные уровни файловой системы также взаимодействуют с сетевой подсистемой из-за того, что существуют сетевые и распределенные файловые системы.

Итак, если вы хотите пойти и узнать о работе с файловыми системами ядра, это некоторые из вещей, о которых вам придется беспокоиться (помимо знания интерфейса VFS)

PS: Если вы хотите, чтобы разрешения Unix работали в Windows, вы можете использовать что-то вроде того, что MS использует для NFS на серверных версиях окон (http://support.microsoft.com/kb/262965)

Ответ 5

Просто дополнение к тому, что сказал Coyote21. Вы можете прочитать этот тезис http://www.minix3.org/theses/gerofi-minix-vfs.pdf

В этом тезисе вы можете узнать немного больше о VFS, и там описаны некоторые подробности. В приложении Б. есть очень полезные вещи. Существует реализация файловой системы (не реальной файловой системы, а одной в памяти).