Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)
Demon's Souls |#9| Heart of surprises

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Различные авторы Весь текст 2311.07 Kb

Программирование и кодирование

Предыдущая страница Следующая страница
1 ... 156 157 158 159 160 161 162  163 164 165 166 167 168 169 ... 198
         (F)FFF            ¦
         (X)XXX            ¦Любое другое значение указывает номер клас-
                           ¦тера в цепи, определяющей порядок  размещения
                           ¦файла
         ДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

              Почему существует два разных формата таблицы FAT?  До  того,
         как  была введена поддержка жестких дисков под управлением опера-
         ционной системы MS-DOS (версия 2.0 операционной  системы MS-DOS),
         разработчики операционной системы MS-DOS старались минимизировать
         размер памяти,  необходимый для размещения таблицы FAT. Поскольку
         максимальный размер кластеров для гибких дисков меньше числа 4085
         (2847 кластеров на 1,44 Мегабайтных 3,5-дюймовых дисках),  диско-
         вое  пространство будет тратиться напрасно,  если будут использо-
         ваться 16-битовые элементы таблицы FAT, а максимальное количество
         кластеров,  которое может быть отображено при 8-битовых элементах
         будет равняться 255,  что не отвечает  требованиям  использования
         памяти.  Поэтому для того,  чтобы декодировать значения элементов
         таблицы FAT,  сначала нужно определить общее количество кластеров
         на диске.
                    Обработка 12-битовых элементов таблицы FAT

              Схема операционной системы MS-DOS размещения чисел,  имеющих
         1,5 байта в длину, в элементах таблицы FAT на гибких дисках может
         показаться странной.  Но надо  знать,  что  операционная  система
         MS-DOS  была  спроектирована  с целью быстрого декодирования этих
         байтов. Способ, которым операционная система MS-DOS хранит инфор-
         мацию  в таблице FAT,  заключается в зашифровке элементов таблицы
         FAT парами,  в которых два 1,5-байтовых элемента объединены в не-
         большую 3-байтовую пару.  Если мы хотим определить номер кластера
         в элементе 2 таблицы FAT, мы также должны посмотреть на элемент 3
         таблицы FAT. Если мы хотим посмотреть на номер кластера в элемен-
         те 3 таблицы FAT,  мы должны вернуться назад и посмотреть на эле-
         мент 2 таблицы FAT.  Элементы 4 и 5 таблицы FAT будут тоже сдвое-
         ны,  как и элементы 6 и 7,  8 и 9 и так далее.  На  рисунке  11-9
         показано, как происходит кодирование номеров двух кластеров в па-
         ру элементов таблицы FAT при просмотре отладчиком  DEBUG  номеров
         так, как они представлены.
              На рисунке 11-10 показано,  как происходит кодирование номе-
         ров двух кластеров из пары элементов таблицы FAT.

                                      - 11-47 -
              Если из номера кластера извлекается только три цифры, почему
         же  вторая по старшинству цифра номера первого кластера перестав-
         ляется на место младшей цифры второго кластера?  Схема перестано-
         вок работает быстрее, когда машина сама декодирует байты и извле-
         кает информацию.  Цифры  появляются  уже  в  переставленном  виде
         только тогда,  когда пользователь читает таблицу FAT через отлад-
         чик DEBUG.
              Для декодирования  информации в 12-битовых элементах таблицы
         FAT на бумаге или внутри программы нужно  пользоваться  представ-
         ленной ниже последовательностью действий:
         1. Умножить номер элемента таблицы FAT или кластера на 1,5 байтов
            (сначала умножайте число на 3, а потом делите результат на 2).
         2. Используйте результат в качестве смещения в таблицу FAT,  ука-
            зывающий на элемент,  отражающий только  что  использовавшийся
            кластер.  Этот элемент содержит номер следующего кластера, за-
            нимаемого тем же файлом.
         3. Загрузите слово (2-байтовое число),  расположенное с этим сме-
            щением, в регистр.
         4. Теперь  в  регистре  находятся четыре шестнадцатиричные цифры.
            Поскольку нам нужно только три цифры для трехзначного элемента
            таблицы  FAT,  следует определить,  является ли номер элемента
            таблицы FAT четным или нечетным числом.
                             Не
                         используется
                         /          \
                  ЪДДДД/ДДДДДДДД¬     \ДДДДДДДДДДДДДД¬
         Первый   ¦  /          ¦     ¦ \            ¦ Второй
         номер    ¦ 0  1  2  3  ¦     ¦  0  4  5  6  ¦ номер
         кластера ¦    ¦  ¦  ¦  ¦     ¦     ¦  ¦  ¦  ¦ кластера
                  АДДДД†ДД†ДД†ДДЩ     АДДДДД†ДД†ДД†ДДЩ
                       АДД†ДД†ДДДДДДДДДДД¬  ¦  ¦  ¦
                          ¦  ¦  ЪДДДДДДДД†ДД†ДД†ДДЩ
                        ЪД†ДД†ДД†ДДДВДДДД†ДД†ДД†Д¬
             Первый     ¦        ¦         ¦Второй
             элемент    ¦ 2  3  6   ¦    1  4  5 ¦элемент
             таблицы FATАДДДДДДДДДДДБДДДДДДДДДДДДЩтаблицы FAT
                                      
                   Трехбайтовая пара элементов таблицы FAT
             Рис. 11-9. Кодирование  номеров  двух  кластеров  в пару
                         12-битовых элементов таблицы FAT

                        ЪДДДДДДДДДД¬     ЪДДДДДДДДДДД¬
             Первый     ¦          ¦     ¦           ¦ Второй
             элемент    ¦ 0  2  3  ¦     ¦  0  0  0  ¦ элемент
             таблицы FAT¦ ¦  ¦  ¦  ¦     ¦  ¦  ¦  ¦  ¦ таблицы FAT
                        АД†ДД†ДД†ДДЩ     АДД†ДД†ДД†ДДЩ
                          ¦  ¦  АДДДДДДДДДДД†ДД†ДД†ДД¬
                       ЪДД†ДД¦ДДДДДДДДДДДДДДЩ  ¦  ¦  ¦
                  ЪДДДД†ДД†ДД†ДД¬        ЪДДДДД†ДД†ДД†ДД¬
         Первый   ¦          ¦        ¦           ¦ Второй
         номер    ¦ 0  0  0  2  ¦        ¦  0  0  0  3  ¦ номер
         кластера ¦  \          ¦        ¦ /            ¦ кластера
                  АДДДД\ДДДДДДДДЩ        /ДДДДДДДДДДДДДДЩ
                         \             /
                         Не используется
                Рис. 11-10. Декодирование пары 12-битовых элементов
                         таблицы FAT в два номера кластера

                                      - 11-48 -

         5. Если номер элемента представлен четным числом, в регистре сле-
            дует сохранять три младшие цифры путем выполнения операции ло-
            гического сложения "И" со смещением 0FFF.  Если номер элемента
            представлен  нечетным  числом,  следует  сохранить три старшие
            цифры путем сдвига регистра вправо  на  четыре  бита  командой
            SHR.
         6. Если результирующие три цифры представляют собой число  от FF8
            до FFF,  это значит,  что вы достигли конца файла. В противном
            случае эти три цифры представляют собой номер следующего клас-
            тера, занятого тем же файлом.


                    Обработка 16-битовых элементов таблицы FAT

              Работа с номерами кластеров и элементами таблицы FAT на дис-
         ках,  которые используют 126-битовые элементы таблицы FAT, значи-
         тельно облегчается по сравнению с работой, в которой используются
         12-битовые элементы таблицы FAT,  потому что все элементы таблицы
         FAT здесь выровнены на границу слова,  то  есть,  каждый  элемент
         таблицы FAT может считываться или записываться,  как целое полное
         слово.  При этом не нужно заботиться о соседних элементах таблицы
         FAT.
              На рисунке 11-9 показано, как происходит кодирование номеров
         двух  кластеров в пару элементов таблицы FAT при просмотре отлад-
         чиком DEBUG номеров так, как они представлены.
              На рисунке 11-10 показано,  как происходит кодирование номе-
         ров двух кластеров из пары элементов таблицы FAT.
              Для декодирования  информации в 12-битовых элементах таблицы
         FAT на бумаге или внутри программы нужно  пользоваться  представ-
         ленной ниже последовательностью действий:
              1. Получить начальный кластер файла из элемента каталога
              2. Умножить используемый номер кластера на 2 (байта;  1 сло-
                 во).
              3. Используйте  результат в качестве смещения в таблицу FAT,
                 указывающий на элемент,  отражающий только что  использо-
                 вавшийся кластер.  Этот элемент содержит номер следующего
                 кластера, занимаемого тем же файлом.
              4. Загрузите слово (2-байтовое число),  расположенное с этим
                 смещением, в регистр
              5. Если результирующие четыре цифры представляют собой число
                 от FFF8 до FFFF, это значит, что вы достигли конца файла.
                 В  противном  случае  эти четыре цифры представляют собой
                 номер следующего кластера, занятого тем же файлом.


                   Преобразование кластеров в логические сектора

              Если вы пишете программу, которая будет обращаться к области
         хранения данных на диске, вы найдете, что такие средства операци-
         онной системы MS-DOS, как прерывание "int 25h" (Абсолютное считы-

                                      - 11-49 -
         вание с диска) и  прерывание  "int  26h"  (Абсолютная  запись  на
         диск), а также программа-отладчик DEBUG, требуют, чтобы вы указы-
         вали номера логических секторов. Несмотря на то, что на иллюстра-
         циях  структур  диска (см.рисунки 11-2 и 11-3) указывается первый
         сектор диска, как сторона 0, дорожка 0, сектор 1, первый сектор в
         действительности равняется логическому сектору 0. Все последующие
         логические сектора представляют собой  последовательные  смещения
         от  0.  Таким образом,  логический сектор 1 будет представляться,
         как сторона 0,  дорожка  0, сектор 2, а логический сектор 2 будет
         представляться,  как сторона 0,  дорожка 0,  сектор 3.  Поскольку
         каждый элемент таблицы FAT, согласно результатам, полученным пос-
         ле выполнения указанных выше пяти действий,  всегда создает номер
         кластера, перечисленные ниже действия покажут вам, как нужно пре-
         образовывать номер кластера в номер логического сектора:
              1. Вычесть 2 из номера кластера.
              2. Умножить полученный результат на количество векторов, ис-
                 пользуемых в кластере, следующим образом:
                 а. Для всех  односторонних  форматов  гибких  дисков  или
                    для двухстороннего 80-трекового, 5,25-дюймового форма-
                    та  диска повышенной плотности записи произвести умно-
                    жение на 1.
                 б. Для всех двухсторонних 40-трековых, 5,25-дюймовых фор-
                    матов дисков повышенной  плотности  записи  произвести
                    умножение на 2.
                 в. Для двухсторонних 8-дюймовых гибких  дисков повышенной
                    плотности записи произвести умножение на 4.
                 г. Для жестких дисков следует использовать одно из  четы-
                    рех вышеприведенных значений или другое число, завися-
                    щее от формата диска.
              3. Добавить  результат  к  номеру логического сектора начала
                 области хранения данных.

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



                           Обзор процедур восстановления

              Если файл, находящийся на диске, был каким-то образом разру-
         шен или поврежден,  существует три основных способа его исправле-
Предыдущая страница Следующая страница
1 ... 156 157 158 159 160 161 162  163 164 165 166 167 168 169 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама