Моделирование файловой системы FAT16

СОДЕРЖАНИЕ 

ВВЕДЕНИЕ

 

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

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

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

      Файловая  система связывает носитель информации с одной стороны и API для доступа к файлам — с другой. Когда прикладная программа обращается к файлу, она не имеет никакого представления о том, каким образом расположена информация в конкретном файле, так же, как и на каком физическом типе носителя (CD, жёстком диске, магнитной ленте или блоке флеш-памяти) он записан. Всё, что знает программа — это имя файла, его размер и атрибуты. Эти данные она получает от драйвера файловой системы. Именно файловая система устанавливает, где и как будет записан файл на физическом носителе (например, жёстком диске).

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

      Целью данного проекта является наглядное  моделирование работы файловой системы FAT16, которая использовалась в MS-DOS 3.31.

      Для реализации данного проекта был  выбран язык C#, как один из лучших объектно-ориентированных языков программирования на данный момент.

      Результатом данной работы должна быть программа, которая сможет использоваться в процессе образования людьми, которым интересны основы системного программного обеспечения.

1 ПОСТАНОВКА ЗАДАЧИ

      1.1 Теоретическое введение

 

      Файловая система FAT представляет собой таблицу размещения файлов, в которой указываются:

      1) непосредственно адреса участков  логического диска, предназначенные для размещения файлов;

      2) свободные области дискового  пространства;

      3) дефектные области диска.

      В этой таблице каждому блоку, предназначенному для хранения данных, соответствует 16-битовое значение. Если блок свободен, то значение будет нулевым. Если же блок принадлежит файлу, то значение равно адресу следующего блока этого файла. Если это последний блок в файле, то значение - OxFFF . Существует также специальный код для обозначения плохого блока, не читаемого из-за дефекта физического носителя. В каталоге хранится номер первого блока и длина файла, измеряемая в байтах. Емкость диска при использовании 12-битовой FAT ограничена 4096 блоками (2 Мбайт), что приемлемо для дискет, но совершенно не годится для жестких дисков и других устройств большой емкости. На таких устройствах DOS использует FAT с 16-битовыми элементами. На еще больших (более 32 Мбайт) дисках DOS выделяет пространство не блоками, а кластерами из нескольких блоков.

      В таблице FAT кластеры, принадлежащие  файлу или каталогу, связываются в цепочки. В 16-разрядной FAT можно иметь до 65536 кластеров. Логическое объединение секторов в кластеры позволяет уменьшить размер таблицы FAT и ускорить доступ к файлу. Однако слишком большой размер кластера приводит к неэффективному использованию области данных, особенно при большом количестве маленьких файлов. Например, при размере кластера в 32 сектора (16 Кб) средняя величина потерь на файл составляет 8 Кб. Поэтому в современных файловых системах размер кластера не превышает 4 Кб.

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

      Таблица FAT является основой данной файловой системы, поэтому она хранится на диске в двух экземплярах. Обновляются копии FAT одновременно, а для работы используется только первый экземпляр. Если он окажется поврежденным, то произойдет обращение ко второму экземпляру. Утилиты проверки и восстановления файловой системы при обнаружении несоответствия первичной и резервной таблицы FAT осуществляет восстановление основной таблицы, используя данные из её копии.

      Система FAT очень проста и имеет одно серьезное  достоинство: врожденную устойчивость к сбоям. В то же время у нее есть и ряд серьезных недостатков. Первый недостаток состоит в том, что при каждой операции над файлами система должна обращаться к FAT. Это приводит к частым перемещениям головок дисковода и в результате к резкому снижению производительности. Действительно, исполнение программы на одной и той же машине под MS DOS и под DOS-эмулятором систем UNIX или OS/2 различается по скорости почти в 1,5 раза. Особенно это заметно при архивировании больших каталогов.

      В файловой системе FAT дисковое пространство логического диска делится на системную область и область данных. Системная область создается и инициализируется при форматировании диска, а в последующем обновляется при работе. Область данных содержит файлы и каталоги, которые образуют на диске иерархическое дерево каталогов, с единственной директорией не входящей в другие - корневым каталогом. Область данных доступна через пользовательский интерфейс операционной системы. Системная область содержит загрузочную запись, зарезервированные сектора, таблицу размещения файлов и корневой каталог. Для каждого файла и каталога в файловой системе хранится справочная информация. Каждый элемент такого справочника занимает 32 байта и содержит: имя файла или каталога, расширение имени файла, атрибуты файла - системный, архивный, только для чтения и др., дату и время создания и последнего изменения файла, номер начального кластера, размер файла. 

      

 

      

 

      Рисунок 1.1 – Структура файловой системы FAT16

      1.2 Постановка задачи

 

      Программа, полученная в результате этого проекта должна в точности моделировать поведение файловой системы FAT16. Результаты работы программы должны выводиться на экран в виде карты диска – последовательных цепочек из заполненных, свободных или поврежденных кластеров.

      Так как пользователь сам должен задавать параметры файловой системы и создаваемых файлов, то в GUI должны присутствовать такие поля для ввода данных как задание размера раздела; задание размера кластера; задание размера файла, а также его имени и расширения. Пользователю так же должна быть предоставлена возможность удаления файлов или внесения поврежденных кластеров в созданный раздел.

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

      При выходе программа должна предупредить пользователя о закрытии.

      Предполагаемая  структура GUI изображена на рисунке 1.2. 

                  

Рисунок 1.2 – Интерфейс разрабатываемого ПО

2 ПРОЕКТИРОВАНИЕ

      2.1 Выбор операционной системы

 

      В качестве операционной системы для  разработки программной системы была выбрана ОС Windows XP. Выбор операционной системы был определен ее функциональными возможностями, а также распространенностью данной ОС.

      2.2 Выбор языка  программирования

 

      В качестве языка программирования был выбран язык «C#». Этот объектно-ориентированный, со статической типизацией. Он является основным языком разработки приложений для платформы Microsoft .NET.

      2.3 Выбор программного обеспечения промежуточного уровня 

 

      .NET Framework является новейшей, разработанной компанией Microsoft, платформой для создания обычных программ и веб-приложений.. Данная платформа включает в себя языковую среду CLR. Основное назначение CLR — выполнение приложений, соблюдение всех программных зависимостей, управление памятью, обеспечение безопасности и изоляции приложений, интеграция с языками программирования и т.п.

      Данная  платформа получила широкое распространение  и может быть использована на всех современных версиях операционных системах Windows (начиная с Windows 2000).

      2.4 Выбор инструментальных средств

 

      В качестве системы разработки была выбрана  IDE Microsoft Visual Studio 2008. Данная система совместима с семейством операционных системам Windows и обладает рядом оптимизаций для программирования именно под эти ОС.

      Данная  среда разработки обладает рядом  преимуществ: IntelliSense, система MSDN, встроенная подсветка ошибок.

      IntelliSense – встроенная технология, позволяющая ускорить процесс набора текста программы путем автоматической генерации списка доступных для вставки в данном месте программы инструкций и ключевых слов.

      Среда разработки интегрируется со справочной системой MSDN, которая содержит обширный набор информации о .NET Framework, языках программирования .NET и многом другом.

3 разработка

      3.1 Выбор архитектуры системы

 

      На  данный момент существует несколько  разновидностей системных архитектур. Одним из примеров является двухуровневая системная архитектура (рисунок 3.1). В основе ее уровней находятся: User Interface, Business Logic. Исходя из анализа поставленной задачи, был выбран именно этот тип системной архитектуры. Это можно объяснить тем, что разрабатываемая программа должна реализовывать определенный алгоритм – Business Logic, взаимодействовать непосредственно с пользователем – User Interface. 

 

Рисунок 3.1 – Двухуровневая системная архитектура

      3.2 Построение диаграмм прецедентов и последовательности

 

      Проведя анализ поставленной задачи, мы выявили следующих активных актеров, работающих с разрабатываемой программой:

    • пользователь;
    • файловая система.

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

 

Рисунок 3.2 – Диаграмма вариантов использования 

      Прецедент «Создание раздела» заключается в создании нового раздела FAT16 для работы с ним. При выполнении данного прецедента сразу попадаем в прецедент «Ввод данных с клавиатуры».

      Прецедент «Создание файла» заключается в  создании нового файла в заранее  созданном разделе. При выполнении данного прецедента сразу попадаем в прецедент «Ввод данных с клавиатуры».

      Прецедент «Удаление файла» заключается в  удалении созданного файла по его порядковому номеру. При выполнении данного прецедента сразу попадаем в прецедент «Ввод данных с клавиатуры».

      Прецедент «Добавление BAD кластеров» заключается в добавлении поврежденных кластеров в файловую систему. При выполнении данного прецедента попадаем в прецедент «Визуализация результата».

      Прецедент «Ввод данных с клавиатуры» заключается в вводе соответствующих значений в зависимости от прецедента из которого был осуществлен переход. При выполнении данного прецедента выполняется переход в один из трех прецедентов:

    1. «Расположение нового файла»;
    2. «Удаление выбранного файла»;
    3. «Создание раздела».

      Прецедент «Расположение нового файла» заключается в размещении файловой системой нового файла в разделе. При выполнении данного прецедента сразу попадаем в прецедент «Визуализация результата».

      Прецедент «Удаление выбранного файла» заключается  в удалении файла из текущего раздела. При выполнении данного прецедента сразу попадаем в прецедент «Визуализация результата».

      Прецедент «Создание раздела» заключается  в создании нового раздела для  работы с файлами. При выполнении данного прецедента сразу попадаем в прецедент «Визуализация результата».

      Прецедент «Визуализация результата» отвечает за отображение всех изменений в  файловой системе на карте диска  и в списке файлов.

      3.3 Разработка вариантов использования

 

      Исходя  из анализа построенной диаграммы  прецедентов, а также функций, которые должна выполнять программа, были предусмотрены следующие варианты использования: 

Номер ВИ – 01
Название Создание раздела.
Участники Пользователь
Описание При выполнении данного варианта использования  пользователь вводит данные о размере раздела и размере кластера с помощью клавиатуры.
Предварительные условия Нет.
Выходные  условия Параметры нового раздела переданы файловой системе.
Порядок действий
  1. Пользователь в любом порядке вводит информацию о размере раздела и кластера.
Альтернативный порядок действий Нет.
Приоритет Высокий.
 
Номер ВИ – 02
Название Создание файла.
Участники Пользователь.
Описание При выполнении данного варианта использования  пользователь вводит данные о новом файле (размер, имя, расширение) с помощью клавиатуры.
Предварительные условия Заранее созданный  раздел.
Выходные  условия Параметры нового файла переданы файловой системе.
Порядок действий
  1. Пользователь в любом порядке вводит информацию об имени файла, его размере и расширении.
Альтернативный  порядок действий Нет.
Приоритет Высокий.
 
Номер ВИ – 03
Название Удаление файла.
Участники Пользователь.
Описание При выполнении данного варианта использования  пользователь задает номер удаляемого файла с помощью клавиатуры.
Предварительные условия Создан хотя бы один файл.
Выходные  условия Номер удаляемого файла передан файловой системе.
Порядок действий
  1. Пользователь вводит номер файла.
Альтернативный  порядок действий Нет.
Приоритет Высокий.
 
Номер ВИ – 04
Название Добавление  BAD кластеров.
Участники Пользователь.
Описание При выполнении данного варианта использования  в текущий раздел добавляются поврежденные кластеры, закрытые для записи.
Предварительные условия Создан раздел.
Выходные  условия Файловой системой добавлены BAD кластеры. Визуализация на карте диска.
Порядок действий 1. Пользователь  выбирает пункт меню «Добавить BAD кластеры».
Альтернативный  порядок действий Нет.
Приоритет Средний.
 
Номер ВИ – 05
Название Создание раздела.
Участники Файловая система.
Описание При выполнении данного варианта использования файловая система создает новый раздел.
Предварительные условия Выполнен ввод данных о параметрах раздела.
Выходные  условия Создан раздел. Визуализация на карте диска.
Порядок действий 1. Пользователь  подает запрос на создание раздела.
Альтернативный  порядок действий Нет.
Приоритет Высокий.
 
Номер ВИ – 06
Название Расположение  нового файла.
Участники Файловая система
Описание При выполнении данного варианта использования  файловая система располагает новый файл в текущем разделе.
Предварительные условия Выполнен ввод данных о параметрах файла.
Выходные  условия Создан новый  файл. Визуализация на карте диска и в списке файлов.
Порядок действий
  1. Пользователь подает запрос на создание файла.
Альтернативный  порядок действий Нет.
Приоритет Высокий.
 
Номер ВИ – 07
Название Удаление выбранного файла.
Участники Файловая система
Описание При выполнении данного варианта использования  файловая система удаляет выбранный  файл из текущего раздела.
Предварительные условия Выполнен ввод номера файла.
Выходные  условия Файл удален. Визуализация на карте диска и  в списке файлов 
Порядок действий
  1. Пользователь подает запрос на удаление файла.
Альтернативный  порядок действий Нет.
Приоритет Высокий.

      3.4 Разработка графического интерфейса

 

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

      Ввод  входных данных выполняется с  помощью дополнительных диалоговых окон.

      Главное меню должно включать такие пункты как «Операции с файловой системой», «Операции с файлами» и «Выход из программы». В пункте «Операции с файловой системой» должны присутствовать такие подпункты: «Создать», «Закрыть текущую», «Добавить BAD кластеры» и «Подсветить кластер». В пункте «Операции с файлами» должны присутствовать такие подпункты «Создать», «Удалить выбранный». В области для визуализации результатов работы файловой системы должна изображаться карта текущего раздела.

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

 

Рисунок 3.3 – Уточненный графический интерфейс пользователя

      3.5 Разработка архитектуры приложения

 

      Исходя  из анализа поставленной задачи, а  так же предметной области разрабатываемого проекта, были выделены такие основные сущности как FileSystem (файловая система), GUI (интерфейс пользователя). Т.к. информация о разделе, файлах и номере файла задается через диалоговые окна, то GUI можно разбить на 4 сущности: Delete (удаление файла), FileParameters (задание параметров файла), Parameters (задание параметров раздела), Mainform (визуализация и обработка команд). Следуя принципам ООП, эти сущности можно принять за шаблоны создаваемых классов.

      Класс FileSystem отвечает за хранение всех параметров файловой системы и содержит следующие поля:

    1. BinaryMap – массив описывающий состояние кластеров;
    2. ClusterSize – размер кластера;
    3. ClustOnFile – массив содержащий количество кластеров необходимое для каждого файла;
    4. Cnt – счетчик;
    5. Date – массив дат создания файлов;
    6. DecimalMap – массив со ссылками на следующие кластеры. Фактически описывает расположение файлов на диске;
    7. StartCluster – массив начальных кластеров файлов;
    8. EndCluster – массив конечных кластеров файлов;
    9. FileName – массив имен файлов;
    10. FileSize – массив размеров файлов в байтах;
    11. FreeSpace – оставшееся свободное место;
    12. IsDeleted – массив описывающий удален файл или нет;
    13. Map – карта диска. Представлена изображением в формате “.*bmp”;
    14. NumberOfCluster – количество кластеров в разделе;
    15. NumberOfFiles – количество файлов в разделе;
    16. PartitionSize – размер раздела в байтах;
    17. Pointer – указатель на следующий свободный кластер;
    18. ToDelete – переменная для передачи данных о номере удаляемого файла.

      Класс Mainform отвечает за визуализацию и обработку команд и содержит следующие методы:

  1. FSCreate_Click – метод создающий новый раздел;
  2. FSClose_Click – метод закрывающий текущий раздел;
  3. Ld – метод инициализирующий основные массивы и переменные;
  4. FileCreate_Click – метод создающий новый файл;
  5. FileDelete_Click – метод удаляющий выбранный файл;
  6. Highlighter_Click – подсветка кластера;
  7. BADFill_Click – добавление поврежденных кластеров;
  8. ExitButton_Click – выход из программы.

      Класс Parameters имеет отношение ассоциации с классом Mainform, а так же содержит следующий метод:

    1. OK_Click – метод для передачи параметров о разделе.

      Класс FileParameters  имеет отношение ассоциации с классом Mainform, а так же содержит следующий метод:

    1. NewFile_Click – метод для передачи данных о новом файле.

      Класс Delete имеет отношение ассоциации с классом Mainform, а так содержит следующий метод:

  1. OK_Click – метод для передачи номера удаляемого файла.

      Класс Cluster имеет отношение ассоциации с классом Mainform, а так содержит следующий метод:

    1. OK_Click – метод для передачи номера удаляемого файла.

      Диаграмма классов, с помощью которой можно  визуализировать все описанные  выше классы, методы и поля, изображена на рисунке 3.4. 

 

Рисунок 3.4 – Диаграмма классов разрабатываемой программы

      3.6 Разработка алгоритмов работы  программы

 

      Исходя  из анализа поставленной задачи, а также разработанной диаграммы классов, была выделена группа методов, работа которых является особо важной: метод FileCreate_Click класса Mainform и метод FileDelete_Click класса Mainform. Для этих методов были разработаны обобщенные алгоритмы работы.

 

      3.6.1 Метод FileCreate_Click класса Mainform

 

      Метод FileCreate_Click класса Mainform, выполняет размещение нового файла в разделе. Указатель pointer, в начале алгоритма уже указывает на свободный кластер. Алгоритм работы описанного метода изображен на рисунке 3.5. 

Моделирование файловой системы FAT16