Операционная система MS-DOS — страница 5

  • Просмотров 6274
  • Скачиваний 439
  • Размер файла 27
    Кб

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

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

чисел. Для определения номера следующего кластера надо просто извлечь 16-битовое значение из FAT - таблицы, использовав в качестве индекса номер предыдущего кластера. Для 12-битовой FAT - таблицы процедура значительно сложнее. Необходимо выполнить следующие действия: ·      умножить номер начального кластера на 3; ·      разделить результат на 2; ·      прочитать 16-битовое слово из FAT - таблицы,

используя в качестве смещения значение, полученное после деления на 2; ·      если номер начального кластера четный, на выбранное из FAT слово нужно наложить маску 0FFFh, оставив младшие 12 бит; если же номер начального кластера нечетный, выбранное из FAT значение необходимо сдвинуть вправо на 4 бита, оставив старшие 12 бит; ·      полученный результат - это номер следующего кластера в цепочке. Используя описанную

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

один загрузочный сектор и fat_cnt*fat_size секторов FAT - таблицы. Размер корневого каталога можно определить исходя из значения поля root_size. При форматировании дика в это поле записывается максимальное количество файлов и каталогов, которые могут быть в корневом каталоге. Для каждого элемента в каталоге отводится 32 байта, поэтому корневой каталог имеет длину 32*root_size байт. Корневой каталог занимает непрерывную область фиксированного