Общие понятия о файловой системе

Тема в разделе "WASM.BEGINNERS", создана пользователем s3dworld, 20 дек 2010.

  1. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Всем доброго дня!

    Хочу превратить виртуальный образ флоппи дискеты на 1.44 МБ не в одну большую программу, а разделить всё по файлам - то есть использовать файловую систему.

    На текущий момент я дуб дубом в вопросах, связанных с файловыми системами. Знаю только что существуют системы FAT, FAT16, FAT32, NTFS, ETC3, ETC4 ну и ещё какие-то слышал, но названия не помню. Вот и хочу спросить у Вас, стоит ли мне для лучшего понимания дела попытаться изобрести какую-то свою файловую систему, или же лучше воспользоваться существующей? Если воспользоваться существующей, то почему и какой? Если создавать свою, то всё равно же лучше ознакомиться с существующими?

    Ну и собственно некоторые тонкости. Программа BIOS попытается найти загрузчик. И вот она нашла 512 байт, куда передаёт управление. Нам из них будет доступно только 510 байт. Эти 510 байт могут много что сделать, но в основном их используют чтобы вывести какую-то информацию и чтобы загрузить последующие сектора. Вот мне и интересно, работать с файловой системой нужно начинать до перехода в защищённый режим или после?

    Вот у меня будет 1.44 МБ минус 512 байт первого сектора. Теперь мне нужно будет обучать процессор работе с файловой системой, чтобы найти файл где лежит переход в защищённый режим и так далее, или же мне нужно сначала подготовить процессор и потом уже обучать к работе в защищённом режиме.

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

    Так как же делается: сначала учим работе с файловой системой или сначала много-много секторов тратим на переход в защищённый и потом уже только учим файловой системой? Ну или если проще, что первым: файловая система, или ядро ОС?
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Думаю, стоит почитать Таненбаума "Современные операционные системы". Начать, вероятно, стоит с изучения FAT. Предельно простая файловая система, но даст представление о том, как это все работает. Если крато, то дела обстоят примерно так: загрузчик MBR загружает и передает управлением загрузчику файловой системы (первый сектор раздела). Загрузчик файловой системы продолжает загрузку ОС. В случае Windows, он находит и загружает NTLDR -- загрузчик ядра и драйверов. Все это происходит в реальном режиме. NTLDR ищет на диске и загружает ядро и драйверы, которые должны загружаться вместе с ядром, после чего передает управление ядру. Получается, что ядро, получив управление, уже имеет драйвер диска и может работать с винчестером в защищенном режиме. В Linux немного по-другому: ядро операционной системы содержит в себе драйвер файловой системы.
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Ну на самом деле нет отдельных FAT и FAT16.
    Есть файловая система FAT с разрядностью кластера 12, 16 или 32 бит: FAT12/FAT16/FAT32
     
  4. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Спасибо!

    Я для начала решил пойти простым путём. Напишу операционную систему, похожую на MS-DOS. Только будет она у меня работать в защищённом режиме. Не будет никакой защиты, так как система будет однозадачная. Следовательно отпадает надобность в страничной организации памяти (буду делать через сегменты с одним уровнем привилегий - нулевым). Текущая запущенная программа будет иметь полный контроль над компьютером. Работать такая операционная система изначально будет в текстовом режиме 80x25 символов. Однако никто не мешает программе перевести видеоадаптер в графический режим (собственно как в MS-DOS). Основная вещь - это операционная система будет работать только с floppy-дискеты. Именно на неё я размещу свою файловую систему, которая будет очень простой (я её уже придумал). Она не будет содержать каталогов (то есть одноуровневая). Заранее пространство будет поделено, можно будет создать ограниченное количество файлов и для каждого файла ограниченный максимальный размер. В общем нужно идти от простого к сложному. Реализую такой вариант. Сделаю прерывания, которые будут позволять создавать, удалять, открывать, закрывать файлы, считывать и записывать данные. В общем в этом деле я уже продумал прерывания. Думаю не плохая будет задачка для развития.

    Хотелось бы у Вас спросить, как без функций BIOS работать с floppy-носителем? Ну там через регистры или порты? Через какие? А то я работал только через функции BIOS. Конечно никто не мешает всё содержимое дискеты загрузить в память, но мне и сохранять нужно будет туда данные из защищённого режима.
     
  5. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Пожалуй, ОС писать тебе ещё рановато; извини за менторский тон. :derisive:

    Про флоппи-контроллер (a.k.a. FDC) можно прочитать много где, к примеру на OsDev.Org. В защищённом режиме с дискеты проще читать (и писать тоже) в режиме PIO, хотя заморочки с DMA научат многому, ну и прерывания заодно подтянешь.

    В проектировании сложных систем дизайн-документ один из самых важных. Он есть?
     
  6. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    "Сделаю прерывания, которые будут позволять создавать, удалять, открывать, закрывать файлы, считывать и записывать данные. В общем в этом деле я уже продумал прерывания."
    "Сделать" ты их сможешь или перепиской BIOS (что понятное дело невозможно), или напишешь функции(!)
    , не прерывания (хотя твои функции будут основаны на прерываниях BIOS'a). Так что то напишешь не может быть прерыванием.
     
  7. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    baldr
    Собственно она у меня не очень уж и сложная, поэтому дизайн-документа нет. Будет что-то подобное MS-DOS, только с наименьшим функционалом команд.

    Igor1024
    Почему не прерывания?! Я составлю таблицу прерываний, 0 - деление на ноль, и так далее. Ну и пользовательские прерывания (часть из них) отведу под обслуживание операционной системы. Зачем мне BIOS переписывать? И не понял этого:
    Это почему же?
     
  8. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Прерывание вообще написать нельзя, можно написать обработчик прерывания.
     
  9. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Я всего лишь сделаю так, чтобы процессор перешёл в защищённый режим. У меня будет три дескриптора (0 - нулевой, 1 - код, 2 - данные/стек). Составлю таблицу прерываний. Но для начала определю карты оперативной памяти. Определю диапазоны свободной памяти (всё-таки сегменты нужно будет указывать куда они будут ссылаться). Так же часть свободной памяти выделю под обработчики прерываний.

    Собираюсь использовать текстовый режим 80x25 символов, но можно было бы и текстовый режим с большим разрешением символов.

    Одно из пользовательских прерываний я отдам под управлением действием процессора. У этого прерывания будут функции:

    - завершить текущую программу (Exit);
    - перезагрузить компьютер (Reset);
    - выключить компьютер (Power).

    Ещё одно пользовательское прерывания будет предназначено для вывода информации на экран монитора. Оно будет иметь функции:

    - очистка экрана в заданный цвет (ClearScreen);
    - установка текущей позиции курсора (SetCursorPosition);
    - вывод символа в текущую позицию курсора с заданным атрибутом (DrawChar);
    - вывод текста в текущую позицию курсора с заданным атрибутом (DrawText);
    - прокрутку страницы вниз с уничтожением верхних строк (NewLine).

    Будет ещё прерывание, которое позволит узнать объём оперативной памяти, доступной для программы.

    Ещё одно прерывание, будет работать с файлами. Оно будет предоставлять функции:

    - получение свободного места в байтах (GetFreeSize);
    - получение списка файлов (GetFilesCount);
    - получение имени файла по индексу (GetFileName);
    - получение размера файла по индексу (GetFileSize);
    - создание файла по имени и получение идентификатора открытого файла (CreateFile);
    - открытие файла по имени и получение идентификатора открытого файла (OpenFile);
    - чтение указанного количества байт из файла по идентификатору файла (ReadFile);
    - запись указанного количества байт в файл по идентификатору файла (WriteFile);
    - установка указателя в файле на начало файла (SetFilePointToBegin);
    - установка указателя в файле на любой индекс (SetFilePoint);
    - установка указателя в файле на конец файла (SetFilePointToEnd);
    - закрытие файла по идентификатору (CloseFile);
    - удаление файла по имени (DeleteFile);
    - переименование файла по имени (RenameFile);
    - копирование файла по имени (CopyFile).

    Не будет никаких папок. В отличии от Windows, чтобы получить размер файла, не обязательно файл открывать. Я из 1.44 МБ дискеты выделю определённое место под файловую систему. И это место будет жёстко ограничивать количество и размер файлов.

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

    Операционная система будет различать строчные и заглавные буквы (то есть Notepad и notepad будет не одно и тоже). Будет несколько команд.

    Вывод списка файлов. Думаю придётся сделать как в MS-DOS, когда выводимый текст дойдёт до конца конца экрана, а место, откуда мы начали выводить дойдёт до начала экрана, тогда выведется сообщение нажать любую кнопку для продолжения вывода.

    Открытие файла fileName в текстовом редакторе notepad.app.

    Запуск файла fileName на выполнение как программу.

    Ну и команды для перезагрузки, выключения и не которые команды для работы с файлами (узнать размер, скопировать, удалить и переименовать).

    Вот такая вот идея. Делать буду не один, ещё с одним парнем. Не все вопросы ещё обдумал, особенно что касается ввода с клавиатуры и с работой флоппи-накопителя. Мышка и прочее мне для данной задачи не нужны.
     
  10. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    s3dworld

    Так как же делается: сначала учим работе с файловой системой или сначала[...]

    Или сначала. Сначало пейшите микроядро (с прерываниями и исключениями), поскольку серьезная часть этих прерываний сделана для выявления багов в коде. На первое время Int 0Dh (double fault) будет наверное самым частым. Вывод байтиков вызвавших исключение и все такое - это часть такого обработчега.

    Далее можно начать пописывать кансоль управления. DOS - это всего-лишь дисковая подсистема (на 90%).

    Вы правильно делаете что пытаетесь формулировать абстрактные требования к подсистемам. Не нужно концентрироваться вначале на деталях общения с fdd через порты и DMA, лучше вообще сразу начать с USB (флоппи есть не везде!).

    Если напишите что-то типа грузящегося с USB простейшего интерфесо который может гулять по ntfs/fat32/etc? через примитивный диалог в тексте то щитайте что напейсале что-то что будут скатчевать и пользовать.

    Good luck.
     
  11. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    PSR1257
    USB пока для меня будет сложно. Я же хочу постепенно идти. Я свою систему и назвал BOS (Basic Operation System), что она будет простой не только с точки зрения пользователя (хотя тут ещё большой вопрос - думаю хрен кто кроме меня поймёт), но и лёгкой в разработке. Со временем можно будет перейти на следующий этап развития. Но пока хотя бы научиться работать с Floppy-дисководом и с клавиатурой в защищённом режиме. Такие книги как:

    - Программирование аппаратных средств в Windows
    - Программирование на аппаратном уровне

    Будут в самый раз для ознакомления работы не через BIOS или есть где это описано лучше?
     
  12. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    В них встречаются ошибки и неточности, так что всё нужно проверять и перепроверять. Помнится, с клавиатурой там какие-то проблемы были (в своё время на осдевовской вике писал по поводу контроллера ПС/2, вот и наткнулся).
     
  13. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    s3dworld

    Я рекомендую посмотреть пару глав в Финогенове где он дает базовые примеры работы в защищенном. Имхо не нужно глубокое знание портов и контроллеров, а просто чтобы работало. Обработчик клавиатуры это от силы 10 команд ввода-вывода. С дискетой будет сложнее, почему бы не звать для начала BIOS? (вызов 16-ти битного кода из PM уже не тривиальная задача).

    Впрочем сейчас вам рановато все планировать до мелочей. Напишите кое-что - вам будет видно есть ли желание продолжать и насколько глубоко.
     
  14. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    Я имел в виду что функции будут обрабатывать прерывания, вы всё будете базировать на прерываниях BIOS'a. Честно говоря у Вас какие-то наполеоновские планы: то взломом интересуетесь, то свою ось Вам загорелось написать. Вы бы выбрали что-то одно и развивали свою идею.
     
  15. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Про клавиатуру поверхностно прочитал. Постараюсь в интернете найти справочник по свежее. Видимо к USB придётся мне в скором времени приступить. Так как у многих мышки и клавиатуры подключены к USB-портам. А так как описано в книге, то я могу только управлять устройствами, подключенным к PS/2 порту. Следовательно на эмуляторе Bochs у меня будет всё работать нормально, но если запустить систему на реальном железе с клавиатурой в USB, то пользователь ничего не сможет сделать.

    Значит теперь мне нужен план по клавиатуре. Это через порт проверить доступна ли клавиатура. Вот есть у меня рисунок:

    [​IMG]

    Это как же мне проверить вставлен ли в разъём устройство клавиатуры, какие-то из этих битов помогут мне в этом? Рах уж пока не хочу вникать в сложности USB, то хочу проверять есть ли клавиатура в PS/2 чтобы продолжать работу или же выводить сообщение об отсутствие поддерживаемой клавиатуры.

    Наверное пора перенести эти вопросы в тему Несколько вопросов начинающего (http://wasm.ru/forum/viewtopic.php?id=38860).