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

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


    Прохождения игр    
Stoneshard |#9| A Million Liches
Stoneshard |#8| Happy return
Stoneshard |#7| Oblivion
Stoneshard |#6| Rotten Willow Tavern

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


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

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

Предыдущая страница Следующая страница
1 ... 22 23 24 25 26 27 28  29 30 31 32 33 34 35 ... 47
языков программирования является верхним  уровнем  и  строится  на  основе
функций ДОС и служебных процедур системы BIOS.
     Может существовать еще один, более  высокий  уровень,  обеспечиваемый
системой управления базами данных того или иного типа.
     Операции ввода/вывода с дискетой на  уровне  языков  программирования
обычно   удовлетворяют   все   потребности   по  манипулированию  данными,
хранящимися  на  дискете.  В  тех   случаях,   когда   этого   оказывается
недостаточно,  не хватает как раз не "атомарных" функций низкого уровня, а
процедур  более  высокого   уровня,   предоставляемых   только   системами
управления  базами  данных.  Однако,  иногда требуется доступ к дискете на
более низком уровне,  например,  для прямого чтения  или  записи  секторов
дискеты. Для выполнения таких операций необходимо обращаться к двум другим
уровням ввода/вывода с дискетой - к уровням ДОС И BIOS.
     В главе 4 мы уже рассмотрели доступ ко всем функциям ДОС,  включая  и
функции ввода/вывода  с  дискетой.  Одно  из  главных  достоинств  функций
ввода/вывода на уровне ДОС заключается, как Вы могли уже  заметить  изучая
главу 4,  в  ширине  диапазона  их  возможностей.  Функции  ДОС  позволяют
выполнять  как  операции  довольно  высокого  уровня  (например,  поиск  в
справочнике файлов по родовым именам),  так  и  операции  среднего  уровня
(чтение и запись  логических  записей)  и  даже  операции  низкого  уровня
(чтение и запись секторов по абсолютному номеру).
     Широкие  возможности  уровня  функций  ДОС   делают    их    особенно
привлекательными для  использования.  Языки  программирования,  такие  как
Паскаль, обычно  организуют  все  свои  средства  ввода/вывода  с  помощью
функций ДОС. Если Вы хотите  освободиться  от  ограничений,  накладываемых
организацией системы ввода/вывода выбранного Вами языка  программирования,
я советую обратиться к функциям ввода/вывода ДОС.
     Если главная причина обращения к специальным  операциям  ввода/вывода
связана с необходимостью чтения или  записи  секторов  дискеты,  то  лучше
воспользоваться функциями ДОС, чем процедурами BIOS. Это связано только  с
тем, что дополнительный сервис, предоставляемый функциями ДОС, избавит Вас
от  необходимости  заботиться  о  таких  деталях  как  повторение  попытки
выполнения операции в случае ошибки или выдержки времени, необходимого для
разгона двигателя дисковода. Тем не менее, Вам может потребоваться  прямой
доступ к процедурам уровня BIOS, например,  если  нужно  обойти  процедуры
обнаружения ошибок ДОС или когда  нужно  выполнить  операцию,  которая  не
выполняется средствами ДОС.  По  этой  причине  ниже  приводится  описание
служебных процедур системы  BIOS  в  ПЗУ,  предназначенных  для  работы  с
дискетами.


     7.2. Служебные процедуры обслуживания дискет системы BIOS в ПЗУ.

     Для обслуживания дисководов в системе BIOS  имеется  шесть  процедур.
Доступ  ко  всем  осуществляется  с   помощью    прерывания    номер    19
(шестнадцатиричное значение 13). В этом разделе мы  рассмотрим  каждую  из
них и увидим некоторые примеры их использования. Программы 7.101 и  7.102,
включенные в дисковый  пакет  прилагающийся  к  этой  книге,  обеспечивают
необходимые ассемблерные подпрограммы для доступа к этим процедурам  BIOS,
а также определения и вспомогательные программы  на  Паскале,  облегчающие
использование ассемблерных подпрограмм.
     Первая служебная процедура, которая имеет код 0, сбрасывает  дисковую
подсистему в исходное состояние. Эта процедура  может  использоваться  для
восстановления после различных ошибок и  сбоев.  Эта  операция  аналогична
операции сброса в ДОС (вызов функции номер  13),  но  она  выполняется  на
более низком уровне системы BIOS. Операция сброса диска  посылает  команду
контроллеру дисков, приводящую его  в  исходное  состояние.  Заметим,  что
здесь  не  выполняются  такие  действия  как    установление    дисковода,
выбираемого ДОС по умолчанию, -  для  этого  должна  выполняться  операция
сброса на уровне ДОС.
     Наиболее  очевидное  использование  операции  сброса  -  в  процедуре
восстановления после ошибки. Часто наилучшим способом действий программы в
случае ошибки  операций  с  дискетой  является  быстрое  прекращение  всех
действий,  с  предоставлением  возможности  разбираться   в    происшедшем
пользователю компьютера.  В  конце  концов,  большинство  дисковых  ошибок
связаны с причинами, которые невозможно устранить программно, например,  с
механическими повреждениями  дискеты  или  неправильной  работой  механики
дисковода.  Однако,  Ваша  программа  должна  использовать  все  имеющиеся
возможности для восстановления после ошибки и процедура сброса может стать
важной составной частью такой программы восстановления.
     Вторая служебная  процедура,  с  кодом  1,  позволяет  прочитать  код
состояния  дисковой  подсистемы.  Состояние  изменяется  любой    дисковой
операцией, так что эта процедура отражает последнюю выполненную операцию с
дискетой. Эту процедуру можно использовать для слежения за теми операциями
ввода/вывода, которыми Вы не можете управлять  непосредственно.  Например,
если выполняется обычная операция ввода/вывода на  уровне  языка  высокого
уровня и получено сообщение об ошибке, вызов этой процедуры поможет  лучше
понять, что произошло, в чем состоит ошибка,  так  чтобы  программа  могла
выполнить  необходимые  корректирующие  действия.  Ниже  приведены    коды
состояний, которые могут  возвращаться,  сами  по  себе  или  в  некоторой
комбинации, этой процедурой.


     КОД   ШЕСТНАДЦАТИРИЧНОЕ                 СМЫСЛ
               ЗНАЧЕНИЕ
     ___    _______________  ________________________________________

      1           01         Была выдана неправильная команда
      2           02         Не найден адресный маркер (используемый
                             для обнаружения сектора)
      3           03         Была  запрошена  операция  записи   для
                             дискеты, защищенной от записи
      4           04         Запрашиваемый сектор не найден
      8           08         Неправильный адрес при операции прямого
                             доступа к памяти (ПДП)
      9           09         При ПДП перейдена граница 64К памяти
     16           10         Ошибка чтения данных, обнаруженная  при
                             проверке циклического избыточного кода
     32           20         Ошибка контроллера гибких дисков
     64           40         Ошибка поиска указанной дорожки
     128          80         Тайм-аут: ответ от дисковода не получен
                             в положенное время


     Третья и четвертая процедуры, с кодами 2 и 3, считывают и  записывают
один или несколько секторов (объединяемых в  блок)  на  одной  дорожке.  Я
советую  использовать  эквивалентные  функции  ДОС,  что  избавит  Вас  от
необходимости проверять  возникновение  ошибок  или  повторять  выполнение
операций. Заметим что эти две операции, а  также  соответствующие  функции
ДОС позволяют считывать или записывать  одновременно  несколько  секторов.
Если Вам необходимо выполнить очень быстрый ввод  или  вывод  данных,  эти
операции позволяют переслать вплоть  до  целой  дорожки  данных  за  время
одного оборота дискеты. Чтение/запись секторов по одному  требуют  затраты
времени одного оборота на каждый сектор.
     Впрочем чтение/запись нескольких секторов имеет  и  свои  недостатки.
Один из таких недостатков -  необходимость  организации  большого  буфера,
размером до 4К байт при  чтении  целой  дорожки.  Если  можно  работать  с
данными в том же  месте  памяти,  куда  они  считываются  или  откуда  они
записываются, такой недостаток не будет существенным,  но  если  требуется
выделить отдельную буферную область для работы с  дискетой,  тогда  чтение
или запись нескольких секторов увеличат требования  к  памяти,  занимаемой
Вашей программой. Имеются и другие недостатки, например,  если  происходит
ошибка, то ее обнаружение  и  восстановление  после  нее  могут  оказаться
значительно сложнее, поскольку трудно  установить  на  каком  из  секторов
произошла  ошибка.  Эта  сложность  несколько  меньше  при   использовании
служебных процедур BIOS, поскольку  они  ведут  подсчет  числа  переданных
секторов, который может быть проанализирован программой;  функции  ДОС  не
обеспечивают такой возможности.  Проблема  ошибки  в  процессе  выполнения
многосекторной операции не слишком существенна при чтении, но  при  записи
она может весьма осложнить задачу восстановления, если программа не  может
определить сколько секторов уже было записано.
     Пятая служебная процедура, с кодом 4,  используется  для  верификации
данных после операции чтения или записи. Она повторно  считывает  сектора,
используя  для  проверки  циклические  избыточные  коды.  Эта    процедура
используется по ключу "/V" в команде ДОС  COPY.  Верификацией  не  следует
злоупотреблять и на то есть все основания. Во-первых, операции с дискетами
достаточно надежны. Во-вторых, практически все ошибки при пересылке данных
обнаруживаются и  сообщения  о  них  передаются  программам;  очень  редко
операция чтения или записи завершается успешно, а данные при  этом  как-то
искажаются. Однако, когда  гарантия  безошибочности  действительно  важна,
необходимо выполнять верификацию после  пересылки  данных.  Эта  операция,
помимо всего прочего, значительно увеличивает время  выполнения  операции.
Для верификации чтения или записи сектора эту процедуру  следует  вызывать
сразу же после завершения операции пересылки.
     Шестая, и последняя, операция, с кодом  6,  особенно  интересна.  Эта
процедура форматирует дорожку дискеты, записывая адресные маркеры секторов
и заполняя сегмент данных каждого  сектора  стандартным  шестнадцатиричным
значением F6  или  CHR$(246).  Должны  указываться  отдельно  для  каждого
сектора такие спецификации как дорожка, сторона и номер сектора,  а  также
код, задающий длину сектора. Поскольку размер каждого сектора  может  быть
задан независимо от остальных, можно сформатировать дорожку  с  одним  или
несколькими  секторами  нестандартного  размера  -  что  является  обычным
средством для  защиты  от  копирования.  Обычными  средствами  ДОС  нельзя
прочитать сектор, размер которого отличается от стандартного 512-байтного,
поэтому многие  схемы  защиты  от  копирования  пользуются  именно  такими
средствами.  Более  подробно  мы  рассмотрим  это  в  следующем   разделе,
посвященном параметрам, управляющим операциями с дискетой.
     Форматировать нужно целую дорожку сразу - поскольку промежутки  между
секторами и  адресные  маркеры  взаимозависимы.  Однако,  если  необходимо
переформатировать всего  один  сектор,  способ  для  этого  все  же  есть.
Например, если  нужно  изменить  формат  последнего  сектора  на  дорожке,
сохранив данные в первых семи секторах, поступите так: напишите  программу
для чтения первых семи секторов,  затем  переформатируйте  всю  дорожку  и
перезапишите данные. Такая процедура позволит защитить от копирования  уже
существующие данные, хотя внешне вроде бы ничего не изменяется.
     Для форматирования  всех  секторов  на  дорожке  должны  быть  заданы
следующие параметры, каждый в виде однобайтного числа:
     1 - номер дорожки (от 0 до 39)
     2 - сторона (0 или 1; для односторонних дискет всегда 0)
     3 - номер  сектора  (начиная  с  1;  сектор  0  означает  управляющую
информацию)
     4 - код длины (0=128 байт,  1=256  байт,  2=512  байт  [стандартное],
3=1024)
     Поскольку каждый сектор имеет собственный код длины, включить  сектор
нестандартной длины в дорожку не представляет особого труда (либо  создать
целую дорожку из секторов нестандартной длины для ДОС).
     Если для форматирования дорожки используется процедура  уровня  BIOS,
следите за правильным указанием всех параметров.
Предыдущая страница Следующая страница
1 ... 22 23 24 25 26 27 28  29 30 31 32 33 34 35 ... 47
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (1)

Реклама