Автор работы: Пользователь скрыл имя, 05 Апреля 2011 в 18:19, курсовая работа
В данной курсовой работе необходимо разработать программу для поиска в свободных кластерах символьных последовательностей из заданного набора.
Как обычный, так и расширенный блок параметров BIOS содержат байт-описатель среды media. Этот байт может служить для идентификации носителя данных и может содержать величины, характеризующие носитель данных по количеству сторон диска и количеству секторов на дорожке. Байт-описатель среды media может содержать значения, представленные в табл. 4.
Таблица 4
Возможные значения байта-описателя среды носителя данных
Значение | Количество сторон | Количество секторов | Диаметр, дюймы | Емкость, Кбайт |
1 | 2 | 3 | 4 | 5 |
F0h | 2 | 18 | 3,5 | 1440 |
- " - | 2 | 36 | 3,5 | 2880 |
- " - | 2 | 15 | 5,25 | 1200 |
F8h | - | - | Жесткий диск любой емкости | |
F9h | 2 | 9 | 3,5 | 720 |
- " - | 2 | 15 | 5,25 | 1200 |
FAh | 1 | 8 | 5,25 | 320 |
FBh | 2 | 8 | 3,5 | 640 |
1 | 2 | 3 | 4 | 5 |
FCh | 1 | 9 | 5,25 | 180 |
FDh | 2 | 9 | 5,25 | 360 |
FEh | 1 | 8 | 5,25; 8 | 160 |
FFh | 2 | 8 | 5,25; 8 | 320 |
Следует отметить, что MS-DOS предоставляет программе возможность работы с так называемыми логическими номерами секторов. Это номера секторов внутри логического диска.
Вообще говоря, для адресации сектора при помощи функций BIOS необходимо указывать номер дорожки, номер головки и номер сектора на дорожке. MS-DOS организует "сквозную" нумерацию секторов, при которой каждому сектору логического диска присваивается свой номер. Порядок нумерации выбран таким, что при последовательном увеличении номера сектора вначале увеличивается номер головки, затем номер дорожки. Это сделано для сокращения перемещений блока головок при обращении к последовательным логическим номерам секторов.
Например, у нас есть дискета с девятью секторами на дорожке. Сектор с логическим номером, равным 1, расположен на нулевой дорожке. Это самый первый сектор на дорожке, он имеет номер 1. Следующий сектор на нулевой дорожке имеет логический номер 2, последний сектор на нулевой дорожке имеет логический номер 9. Сектор с логическим номером 10 расположен уже на дорожке номер 1. Это тоже самый первый сектор на дорожке. И так далее, по мере увеличения логического номера сектора изменяются номера дорожек.
Для работы с логическим диском (или дискетой) на уровне логических номеров секторов MS-DOS предоставляет программам два прерывания - INT 25h (чтение сектора по его логическому номеру) и INT 26h (запись сектора по его логическому номеру). Вызов этих прерываний имеет различный формат для разных версий MS-DOS. Для тех версий, которые не поддерживают размер логических дисков более 32 Мбайт (MS-DOS 3.10, 3.20, 3.30) используется следующий формат команд:
INT 25h - чтение сектора по его логическому номеру:
На входе:
На выходе:
INT 26h - запись сектора по его логическому номеру:
На входе:
На выходе:
Для более поздних версий MS-DOS и для COMPAQ DOS версии 3.31 используется другой способ указания номера логического сектора.
Так как шестнадцати разрядов недостаточно для адресации диска размером более 32 Мбайт, то при работе с расширенным разделом диска, занимающим более 32 Мбайт, регистры используются по-другому.
Регистр CX содержит FFFFh - признак того, что программа работает с логическим диском, имеющим размер более 32 Мбайт.
Регистры DS:BX содержат адрес следующей структуры:
Так как для указания начального номера логического сектора в этом управляющем блоке отводится 4 байта, то снимается указанное ранее ограничение на размер логического диска.
Сделаем очень важное замечание, касающееся только что рассмотренных прерываний MS-DOS. Эти прерывания оставляют в стеке одно слово - старое значение регистра флагов. Поэтому после вызова прерывания должна следовать, например, такая команда:
pop ax
Содержимое загрузочного сектора может быть использовано для определения общего количества секторов на логическом диске, для работы с таблицей размещения файлов FAT , о которой мы будем говорить ниже, для определения других характеристик логического диска.
Операционная система ОС ЕС для ЭВМ ряда ЕС позволяла задать начальное количество цилиндров диска для размещения набора данных и размер области диска, которая может быть использована для этого набора дополнительно. Если при записи в файл все распределенное для файла место на диске окажется исчерпанным, программа завершится аварийно, даже если на диске еще есть свободные цилиндры.
Операционная система MS-DOS использует дисковое пространство другим способом.
При создании файла для него не задается начальное распределение памяти в дорожках или секторах. По мере того как файл увеличивается в размерах, операционная система распределяет этому файлу секторы из числа свободных, не используемых другими файлами. При этом файл не обязательно располагается в смежных областях диска, он может быть разбросан по разным дорожкам и секторам.
Очевидно, что в этом случае операционная система должна вести учет используемых секторов диска. Для каждого файла она должна хранить где-то информацию о распределении файлам секторов диска. В операционной системе MS-DOS для хранения этой информации используется таблица размещения файлов.
Весь диск разбивается операционной системой на участки одинакового размера, называемые кластерами. Кластер может содержать несколько секторов. Для каждого кластера в таблице FAT есть своя индивидуальная ячейка, в которой хранится информация об использовании данного кластера. Другими словами, таблица размещения файлов - это массив, содержащий информацию о кластерах. Размер этого массива определяется общим количеством кластеров на логическом диске.
Файловая система FAT поддерживает всего два типа файлов: обычный файл и каталог. Файловая система распределяет память только из области данных, причем использует в качестве минимальной единицы дискового пространства кластер.
Таблица FAT (как основная копия, так и резервная) состоит из массива индексных указателей, количество которых равно количеству кластеров области данных. Между кластерами и индексными указателями имеется взаимно однозначное соответствие — нулевой указатель соответствует нулевому кластеру и т. д.
Таблица FAT является общей для всех файлов раздела. В исходном состоянии (после форматирования) все кластеры раздела свободны и все индексные указатели (кроме тех, которые соответствуют резервным и дефектным блокам) принимают значение «кластер свободен». При размещении файла ОС просматривает FAT, начиная с начала, и ищет первый свободный индексный указатель. После его обнаружения в поле записи каталога «номер первого кластера» фиксируется номер этого указателя. В кластер с этим номером записываются данные файла, он становится первым кластером файла. Если файл умещается в одном кластере, то в указатель, соответствующий данному кластеру, заносится специальное значение «последний кластер файла». Если же размер файла больше одного кластера, то ОС продолжает просмотр FAT и ищет следующий указатель на свободный кластер. После его обнаружения в предыдущий указатель заносится номер этого кластера, который теперь становится следующим кластером файла. Процесс повторяется до тех нор, пока не будут размещены все данные файла. Таким образом, создается связный список всех кластеров файла.
В
начальный период после форматирования
файлы будут размещаться в
последовательных кластерах области
данных, однако после определенного
количества удалений файлов кластеры
одного файла окажутся в произвольных
местах области данных, чередуясь с кластерами
других файлов (рис. 5.).
Рис. 5. Пример распределения кластеров для файлов autoexec.bat и config.sys
На рис. 5. показаны фрагменты корневого каталога диска С: и элементы FAT для файлов autoexec.bat и config.sys .
Из рисунка видно, что для файла autoexec.bat отведено три кластера, а для файла config.sys - два кластера. Реально эти файлы не используют столько кластеров, так как их размер обычно невелик.
В каталоге кроме всего прочего указаны номера первых кластеров, распределенных этим файлам (соответственно 11 и 12). В своей одиннадцатой ячейке таблица FAT содержит число 17 - номер второго кластера, распределенного файлу autoexec.bat. Ячейка с номером 17 содержит число 18. Это номер третьего кластера, принадлежащего файлу autoexec.bat. Последняя ячейка, которая соответствует последнему кластеру, распределенному этому файлу, содержит специальное значение - FFFF.
Таким образом, файл autoexec.bat занимает три несмежных кластера с номерами 11, 17 и 18. Что же касается файла config.sys , то в нашем примере для него отведено два смежных кластера с номерами 12 и 13.
Размер таблицы FAT и разрядность используемых в ней индексных указателей определяется количеством кластеров в области данных. Для уменьшения потерь из-за фрагментации желательно кластеры делать небольшими, а для сокращения объема адресной информации и повышения скорости обмена наоборот — чем больше, тем лучше. При форматировании диска под файловую систему FAT обычно выбирается компромиссное решение, и размеры кластеров выбираются из диапазона от 1 до 128 секторов, или от 512 байт до 64 Кбайт.
Очевидно, что разрядность индексного указателя должна быть такой, чтобы в нем можно было задать максимальный номер кластера для диска определенного объема. Существует несколько разновидностей FAT, отличающихся разрядностью индексных указателей, которая и используется в качестве условного обозначения: FAT12, FAT16 и FAT32. В файловой системе FAT12 используются 12-разрядные указатели, что позволяет поддерживать до 4096 кластеров в области данных диска1, в FAT16 — 16-разрядные указатели для 65 536 кластеров и в FAT32 — 32-разрядные для более чем 4 миллиардов кластеров.