Жанр: Учеба

Программно-аппаратная организация компьютера IBM PC

сторінка №10

Если в кластер
входит больше одного сектора, то объединяются последовательные сектора.
Для двухсторонних дискет кластер состоит из четного и нечетного секторов
одной и той же дорожки. Таким образом, каждая дорожка двухсторонней
дискеты состоит из четырех кластеров на каждой стороне или всего восьми
кластеров. В первый кластер входят сектора 1 и 2, во второй - 3 и 4 и так
далее . (Если будут добавлены диски большей емкости, то можно будет
организовать кластеры большего размера. В четвертой главе уже упоминалось,
как можно динамически включить в BIOS программы обслуживания устройств для
ДОС всех версий, начиная с версии 2.00. Описанная методика позволяет
добавлять дисковые устройства, логическая организация которых будет
совместима с используемыми дискетами. Помимо других характеристик, которые
могут задаваться для новых устройств, можно указать и число секторов в
кластере.)
Выделение места на двухсторонней дискете двухсекторными кластерами
может показаться нерациональным, ведь в ряде случаев файл будет
использовать лишь часть первого из двух секторов. Однако, пространство на
двухсторонних дискетах теряется ничуть не больше чем на одностронних.
Выделение пространства кластерами большими одного сектора позволяет
ограничить увеличение размеров таблицы размещения файлов при использовании
дискет все больших и больших размеров.
Раздел данных дискеты начинается сразу за справочником и занимает все
место до конца дискеты. Первый кластер данных имеет номер 2 (почему это
так, Вы сейчас поймете). На рис.5.5 изображено расположение кластеров на
одно и двухсторонних дискетах.
Как на односторонних, так и на двухсторонних дискетах хранится две
копии ТРФ. Они находятся в секторах 2 и 3 нулевой дорожки нулевой стороны.
Предполагается, что эти копии должны быть идентичны. Хранение двух
экземпляров ТРФ представляет собой простую предосторожность, связанную с
большой важностью информации, содержащейся в таблице. Восстановление
запорченного справочника намного проще восстановления поврежденной ТРФ.
Полезность хранения двух копий ТРФ зависит от многих факторов, таких
как степень возможного повреждения дискеты, степень совершенства программ
или квалификация пользователей, выполняющих процедуры восстановления
информации. Версии ДОС, предшествовавшие версии 2.00, не включали
специальных средств восстановления информации на дисках.
Как мне кажется, для ТРФ выделено два сектора не столько для того
чтобы хранить две копии, сколько для обеспечения возможности увеличения
этой таблицы в будущем. Она, конечно, не может увеличиваться до
бесконечности, но два сектора позволяют увеличить ее объем вдвое.
Теперь можно подробно рассмотреть кодировку ТРФ. Простой подсчет
показывает, что на дискете помещается больше 300 кластеров. Элемент ТРФ
должен позволять хранить номер другого элемента ТРФ, а максимальный номер,
который может храниться в одном байте - 255, следовательно, длина элемента
ТРФ должна быть больше байта. С другой стороны, в 512-байтном секторе
нельзя поместить больше 300 элементов ТРФ длиной по два байта. Для решения
этой проблемы была разработана довольно сложная схема оформления элементов
ТРФ в виде трех шестнадцатиричных цифр, т.е. длиной в полтора байта (12
разрядов).
Схема хранения чисел в виде полуторабайтных кодов выглядит довольно
странно, хотя на машинном языке это реализуется очень просто.
Таблица при хранении сворачивается следующим образом:
последовательные элементы ТРФ разбиваются на пары, обьединяющие два 1,5
байтовых значения, в последовательность из трех байтов для каждой пары
/Здесь используется архитектурная особенность микропроцессоров фирмы
"Интел", связанная с последовательностью хранения отдельных байтов в
машинном слове (Прим.пер.)/. Для получения значения, хранящегося в
элементе ТРФ с номером Х, нужно выполнить следующие действия: сначала
необходимо умножить Х на 1.5 (для этого выполняется умножение на 3 с
последующим делением на 2), затем полученное число используется в качестве
смещения в ТРФ.
Двухбайтное число, хранящееся по указанному адресу загружается в
регистр. Теперь в регистре находится четыре шестнадцатиричных цифры, а
необходимы только три из них. Если номер элемента ТРФ нечетный, то нужно
отбросить последнюю цифру, а если он четный - то первую. Если описание Вам
не совсем понятно,взгляните на рис. 5.6, который изображает процессы
упаковки и распаковки пар элементов ТРФ, выполняемые вручную.
Рис.5.7 показывает связь между ТРФ в том виде, в каком она хранится
на диске, и ТРФ в виде таблицы. ДОС переписывает ТРФ в память, но хранит
ее в исходном, упакованном формате. Таблица ТРФ, показанная на рис.5.7,
представляет собой логическую структуру ТРФ.
Чтобы увидеть ТРФ в исходном виде, воспользуйтесь программами DEBUG
или DISKLOOK для считывания ТРФ с дискеты. О программе DEBUG мы подробнее
расскажем в главе 6, а пока приведем те команды, которые нужно ввести для
считывания ТРФ:

L0011
DOL200

При работе с программой Disklook, нажмите функциональную клавишу F7
для выбора сектора, введите номер дорожки 0, номер сектора 2, после чего
нажмите клавишу F6 для отображения всей таблицы.
Листинг программы 5.1 показывает определение на языке Паскаль той
структуры, в которой ТРФ хранится на диске. Листинг 5.3 включает несколько
программ для чтения, расшифровки и обслуживания ТРФ.
Вспомним, что нумерация кластеров начинается с 2. Это означает, что
первые два элемента ТРФ (с номерами 0 и 1) не используются для хранения
информации о размещении данных. Они зарезервированы для хранения очень
важной информации - сведений о формате дискеты. Код формата хранится в
первом байте ТРФ. Соответствие кодов различным форматам приведено в
следующей таблице:

ФОРМАТ КОД ФОРМАТА
_________________________

D - 8 FF
S - 8 FE
D - 9 FD
S - 9 FC
QD - 9 F9
QD - 15 F9
_________________________

Управляющие программы определяют формат дискеты путем чтения первого
байта ТРФ. Программа, находящаяся в загрузочной записи, обращается к ТРФ
еще и для того, чтобы определить где находятся два системных файла,
IBMBIO.COM и IBMDOS.COM. С этим связаны различия в загрузочных программах
ДОС версии 1.00 и версии 1.10.
Простые арифметические вычисления показывают, что на односторонней
дискете находится 313 односекторных кластеров (со 2 по 314), а на
двухсторонней дискете - 315 двухсекторных кластеров. Для односторонней
дискеты такое число получается вычитанием из общего числа в 320 секторов 1
сектора загрузочной записи, 2 секторов ТРФ и 4 секторов справочника. Для
двухсторонних дискет, из общего числа 640 секторов вычитается 1 сектор
загрузочной записи, 2 сектора ТРФ и 7 секторов справочника, что дает 630
секторов или 315 двухсекторных кластеров. В одном 512-байтовом секторе
можно разместить 340 элементов ТРФ, так что в конце секторов ТРФ остается
немного свободного места.
В листинге программы 5.3 приведены процедуры на языке Паскаль,
работающие с ТРФ. Эти процедуры могут быть использованы в больших
программах. Их изучение поможет вам лучше разобраться в структуре ТРФ и в
ее использовании.
Но это еще не все, что касается ТРФ. В этой таблице используются
определенные коды специального назначения. Как мы уже видели,
неиспользуемый кластер в ТРФ отмечается нулевым значением соответствующего
элемента. Любое значение элемента таблицы в диапазоне от 2 до 314 (для
односторонних дискет) или до 316 (для двухсторонних) является допустимым
указателем на очередной элемент в цепочке, описывающей размещение файла.
Восемь наибольших значений, которые могут храниться в элементе ТРФ,
шестнадцатиричные числа от FF8 до FFF или десятичные от 4088 до 4095,
используются для обозначения конца цепочки описания. Хотя необходим всего
один код конца файла, резервируется восемь кодов на случай, если возникнет
необходимость в каком-либо расширении. Восемь шестнадцатиричных кодов от
FF0 до FF7 или десятичных от 4080 до 4087 оставлены для обозначения особых
типов зарезервированных кластеров, например, кластеров с дефектными
секторами.
На поверхности дискеты могут встречаться участки с дефектами
магнитного покрытия, которые нельзя эффективно использовать для хранения
данных. Такие области выявляются во время форматирования дискеты и
исключаются из числа областей, которые будут использоваться в дальнейшем.
В первой версии ДОС 1.00, эти дефектные сектора оформлялись в виде
скрытого файла с именем "badtrack.". Начиная с версии ДОС 1.10
используется более изящный метод.
Значение элемента ТРФ 4087 (или шестнадцатиричное FF7) используется
для обозначения неиспользуемого кластера. Одно из достоинств такого метода
пометки дефектных кластеров заключается в том, что не используется лишний
элемент справочника. Программа DiskLook может быть использована для
определения точного положения дефектных секторов на дискете, чего нельзя
сделать стандартными средствами ДОС.
Любые другие значения элементов ТРФ, от 314 (или 316) до 4080,
являются недопустимыми.

В организации ТРФ могут возникать определенные дефекты. Два наиболее
заметных дефекта - это "беспризорные" кластеры и перекрещивающиеся файлы.
Если элемент ТРФ содержит значение, указывающее, что элемент используется
(значение не равно нулю) и, в то же время, этот элемент не входит ни в
одну из цепочек определения размещения файлов, то такой элемент ТРФ
становится как бы "беспризорным". Во втором случае, может случиться так,
что две или больше различные цепочки, определяющие размещение файлов,
приводят к одному и тому же кластеру. Такие файлы называются
перекрещивающимися. Стандартная программа ДОС СНКDSK обнаруживает оба типа
нарушений в структуре ТРФ и возвращает "беспризорные" кластеры в общий пул
свободных и доступных для использования кластеров.
"Беспризорные" кластеры чаще всего возникают, когда программы
начинают создавать файл (так что для него выделяются кластеры), но не
закрывают его, вследствие чего не завершается создание элемента
справочника для данного файла. Такое часто происходило с первой версией
компилятора языка Паскаль в ДОС при обнаружении ошибки в исходной
программе. Регулярное использование программы СНКDSК позволит избавляться
от "беспризорных" кластеров, независимо от причин их появления. Нужно
включать вызов СНКDSK в файл пакетной обработки с любой программой, в
результате работы которой могут возникать "беспризорные" кластеры.
Если "беспризорные" кластеры встречаются достаточно часто, то
перекрещивающиеся файлы возникают очень редко. Мне довелось их наблюдать
только тогда, когда я специально их создавал. Если такая ситуация все же
Вам встретится, нужно скопировать каждый из файлов на другую дискету для
последующего восстановления (если оно потребуется). После этого, копии
всех файлов будут содержать информацию из общих секторов, хотя она может
принадлежать только одному из них.
Нажав клавишу F9 при работе с программой Disklook Вы можете
просмотреть карту диска с отмеченным на ней положением "беспризорных"
кластеров и общих кластеров пересекающихся файлов.
При работе ДОС в памяти хранится копия ТРФ для каждого используемого
дисковода. Когда в таблице производится какое-либо изменение, она
записывается в обе копии на дискете. При новом обращении к дискете ДОС
считывает ТРФ чтобы установить формат дискеты.
Теперь, познакомившись со структурами справочников и таблиц
размещения файлов, можно рассмотреть форматы файлов данных. Сначала
рассмотрим два наиболее распространенных формата: текстовые файлы ( в
кодах ASCII) и формат файлов с фиксированной длиной записи. Затем мы
рассмотрим два формата хранения программ: ".COM" файлы и ".EXE" файлы.

5.8. Размещение файлов

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

Итак, схема распределения пространства на дискете в ДОС довольно
хороша, она равномерно использует все пространство и не требует нашего
вмешательства. Однако, все эти преимущества достигаются ценою
"размазывания" файлов по дискете. Из-за этого может увеличиться время
доступа к файлу, поскольку магнитная головка чтения/записи должна
перемещаться по всей дискете для поиска нужных дорожек. Поскольку
обращения к дискете являются наиболее медленными операциями и основными
ограничивающими факторами производительности IBM/PC, такое размещение
файлов может породить проблемы, хотя обычно этого не случается.
По этой причине, необходимо уделять внимание потенциальной проблеме
фрагментации пространства, занимаемого файлами на дискете. Обычно эти
проблемы Вас волновать не будут, но иногда они могут приобрести
чрезвычайное значение. В тех случаях, когда фрагментация файлов покажется
Вам нежелательной, скопируйте файл на новую дискету. Это же полезно
делать, если Вам покажется, что дисковод слишком долго выполняет поиск
дорожек при чтении файла.
При копировании файлов на новую дискету можно заодно улучшить их
последовательность, разместив в начале часто использующиеся файлы или
переставив их в таком порядке, в каком Вам хотелось бы их видеть в
распечатке справочника. В некоторых случаях упорядочение данных может
оказаться особенно полезным: файлы на дискете, хранящей корреспонденцию,
лучше размещать в хронологическом порядке, для дискеты с множеством
вспомогательных файлов предпочтительнее всего алфавитный порядок,
ускоряющий просмотр. Полезно бывает, также, упорядочивать файлы по
расширениям, которые обычно обозначают тип файла или способ его
использования. Такое упорядочивание можно производить либо вручную, либо с
помощью какой-либо сервисной программы (такого рода программы имеются в
составе пакета "Norton Utilities" (служебные программы Нортона)).

5.9.Формат текстового файла

Наиболее часто использующийся и один из самых важных форматов для
файлов данных, размещаемых на дискетах,- это текстовый файл в коде ASCII.
Такие файлы содержат обычную алфавитную информацию, тексты или отчеты,
состоящие из алфавитных символов.
Текстовые файлы являются, вероятно, наибольшим приближением к
универсальному формату для всех персональных компьютеров. Такой формат
поддерживается практически всеми персональными компьютерами и имеет
множество различных применений.
Большинство текстовых редакторов, включая и текстовые процессоры,
используют текстовый формат. Редактор, поставляемый в составе ДОС, ЕDLIN,
создает и использует текстовые файлы.
Текстовый формат используется для хранения исходного текста программ
(исходной, нетранслировавшейся версии). Практически все языковые
процессоры (такие как интерпретатор языка БЕЙСИК, компилятор языка Паскаль
или Ассемблер) ожидают ввода входного файла в текстовом формате в коде
ASCII.
Интерпретатор языка БЕЙСИК для IBM/PC работает с тремя форматами
файлов программ на языке БЕЙСИК одним из которых является стандартный
текстовый формат в коде ASCII. Для записи программы на языке БЕЙСИК в
текстовый файл в коде ASCII нужно использовать ключ "А" в операторе SAVE:

10 SAVE "PROGRAM.BAS",А

Файлы пакетной обработки, одно из самых мощных и полезных
вспомогательных средств ДОС, также хранятся в текстовом формате.
Чтобы понять структуру файлов, необходимо сначала понять саму
кодировку, принятую в Американском стандартном коде для обмена информацией
(ASCII). Код ASCII в основном состоит из кодов символов. Всем символам
присваиваются определенные комбинации битов, например, код для заглавной
буквы "А" будет выражаться шестнадцатиричным числом 41.
Существует 128 различных кодов в системе ASCII, поскольку в ней
используются семибитовые коды. Большинство компьютеров, включая IBM/PC,
используют восьмибитовую кодировку символов, так что коды ASCII составляют
лишь половину из ансамбля 256 возможных кодов. Для большинства
компьютеров, и для IBM/PC, коды ASCII занимают первые 128 кодов, от CHR$
(0) до СНR$ (127).
Вообще говоря, имеется три различных категории кодов ASCII и две из
них будут нас интересовать. Прежде всего, имеются коды ASCII,
соответствующие буквам, знакам препинания, цифрам и т.п. Это первая из
категории кодов ASCII и, конечно, они будут использоваться во всех наших
работах, выполняемых с помощью персонального компьютера.
Следующую категорию я бы назвал символами форматирования.
Использование этих символов следует уже из их названий, например, "возврат
на шаг", "возврат каретки" и "перевод строки". Форматирующие символы
разрабатывались специально для управления устройством печати. Эта
категория нам также понадобится и мы еще к ней вернемся.

Третью категорию символов ASCII можно назвать символами связи. Они
имеют такие имена как "начало-текста" или "конец-передачи" и используются
главным образом в качестве управляющих сигналов при использовании кода
ASCII для передачи информации по линиям связи. Эти символы позволяют
управлять процессами установления связи и передачи данных. Полное
разъяснение назначения этих символов тесно связано с изложением принципов
осуществления взаимодействия по линиям связи, что не входит в сферу
изложения данной книги. Поскольку эта категория символов не используется
среди данных или в структуре файлов, она больше не будет нас интересовать.
Подведем некоторые итоги: одна из трех категорий кодов ASCII
используется для кодировки данных, таких как буквы, цифры и знаки
пунктуации. Вторая используется для форматирования, т.е., для указания
того, где заканчивается одна строка и начинается другая; эти коды
используются не только для управления форматом печати, но и для
структурирования файлов. И, наконец, третья категория для управления
передачей данных и никак не связаны с форматом текстовых файлов.
Обычные символы текста в коде ASCII имеют значения от CHR$(32) до
CHR$(126). Символы ASCII двух специальных категорий - форматирующие и
символы связи,- имеют коды от CHR$(0) до CHR$(31). Все эти коды должны
использоваться для различных управляющих функций и они обычно используются
отдельно от кодов данных. Если Ваша программа попытается непосредственно
использовать эти коды, могут происходить странные вещи. Некоторые ситуации
описываются в приложении 4.
Ниже приведены три простые программы на языке Бейсик, которые
демонстрируют ряд экспериментов со специальными кодами ASCII от 0 до 31:

10 REM вывод на экран дисплея
20 FOR I=0 TO 31
30 PRINT CHR$(I)
40 NEXT I

10 REM вывод на печать
20 FOR I=0 TO 31
30 LPRINT CHR$(I)
40 NEXT I

10 REM манипулирование режимом экрана
20 DEF SEG=&HB800 ' цветная графика
30 DEF SEG=&HB000 ' монохромный
40 FOR I=0 NJ 31
50 POKE 1*2,I
60 NEXT I

Теперь рассмотрим текстовые файлы в коде ASCII. Это файлы, содержащие
текст, который состоит из обычных символов, например, букв алфавита.
Символы текстового файла организуются в строки, подобно тому как они
записываются на бумаге.
Границы строк отмечаются форматирующими символами кода ASCII: возврат
каретки, CHR$(13), и перевод строки, CHR$(10). Можно было бы использовать
любой символ для обозначения конца строки, но используются именно эти два
символа, поскольку они управляют процессом перехода к новой строке на
печатающем устройстве.
Одна из причин использования двух символов, обозначающих конец
строки, состоит в обеспечении возможности наложения строк. Наиболее часто
такая возможность используется для выполнения подчеркивания. При этом на
печать в конце строки выдается только возврат каретки, а затем
накладывающиеся символы. Поскольку перевод строки не выполнялся, новые
символы печатаются поверх уже напечатанных. Такую операцию можно
произвести с печатающим устройством, но нельзя с дисплеем.
Таким образом, физические команды, необходимые печатающему устройству
для завершения строки, используются также в качестве логических меток
конца строки в файле. Такой прием позволяет копировать текстовые файлы
непосредственно на печатающее устройство, причем текст будет
распечатываться правильно. Вы можете сами проверить это, использовав
команду COPY для пересылки файла непосредственно на устройство печати или
на экран дисплея следующими командами:

COPY имя файла LPT1
COPY имя файла CON

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

Формат текстового файла определяется не только разделением на строки.
Все файлы в коде ASCII имеют один общий элемент - маркер конца файла,
значение которого CHR$(26). Этот маркер однозначно указывает конец файла.
Обнаружение положения кода CHR$(26) позволяет точно установить размер
файла, отличающийся от размера, указанного в справочнике.
С клавиатуры этот специальный символ с кодом CHR$(26) можно ввести,
нажав клавишу "Z" и удерживая в нажатом состоянии клавишу "CONTROL"
(управление). Если в любом тексте, связанном с персональными компьютерами,
Вам встретится сочетание "CONTROL-Z", то имеется в виду функция конца
файла, или значение CHR$(26) .
Кроме описанных трех универсальных кодов, возврата каретки, перевода
строки и конца файла, имеются и другие форматирующие коды ASCII, которые
используются с различной интенсивностью. Символ табуляции (CHR$(9))
используется для замены нескольких пробелов, следующих один за другим.
Поскольку не существует общепринятого количества позиций табуляции, этот
символ используется не так широко, как можно было бы ожидать.
Символ перевода страницы (CHR$(12)) обозначает переход к началу новой
страницы. Большинство устройств печати отрабатывает этот код
соответствующим образом и некоторые программы редактирования используют
его для разделения текста на страницы. Использование этого символа также
далеко от универсальности. Его стоит применять только для управления
устройством печати.
Программы редактирования и, особенно, текстовые процессоры требуют
большего числа символов форматирования и они определяют собственные коды
для своих целей, таких как отметка границ параграфов, подчеркивания и тому
подобного. Поскольку универсальных кодов для таких функций не

Список сторінок

Поділитися у соцмережах

☏ Замовлення реклами: +3805044-68-872

© Асоціація електронних бібліотек України

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