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

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


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#12| Old Monk & Old Hero
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)

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


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

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

Предыдущая страница Следующая страница
1 ... 82 83 84 85 86 87 88  89 90 91 92 93 94 95 ... 198
      є                                                                  є
      є Поле  по смещению  18 от начала  блока запроса содержит на  входеє
      є требуемое количество байтов/секторов.  Драйвер должен поместить вє
      є это поле фактическое количество переданных секторов или байтов.  є
      є Указатель на имя тома возвращается только в MS-DOS версии  3.00 иє
      є выше  при условии,  что возвращается ошибка  0FH -- "Недопустимаяє
      є замена диска".                                                   є
      є                                                                  є
      ИННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј

         VERIFY не будет использоваться), неподготовленный режим (позволя-
         ющий многобайтные передачи) и устройство,  поддерживающее команду
         OUTPUT UNTIL BUSY.  Однако, при тестировании этого режима обнару-
         жилось,  что команда OUTPUT UNTIL BUSY не выдается никогда, чем и
         объясняется,  наверное,  почему  IBM опустила эту команду в своей
         документации.
            Все эти команды имеют общую структуру блока запроса,  но отли-
         чаются типом запрашиваемой операции ввода/вывода и типом драйвера
         устройства. Ниже перечислены основные параметры, используемые при
         вызове команд ввода/вывода :

                                      - 6-39 -

            * Сама команда определяет источник и  получатель  при передаче
              данных. Важно отметить, что операции управления вводом/выво-
              дом предназначены для передачи драйверу различных директив и
              управляющей информации,  а не для передачи данных непосредс-
              твенно на устройство. Приведем возможные комбинации источни-
              ка и получателя данных :

                КОМАНДЫ                        ИСТОЧНИК      ПОЛУЧАТЕЛЬ

                INPUT                          Устройство    Буфер
                OUTPUT                         Буфер         Устройство
                OUTPUT VERIFY                  Буфер         Устройство
                OUTPUT UNTIL BUSY              Буфер         Устройство
                IOCTL INPUT                    Драйвер       Буфер
                IOCTL OUTPUT                   Буфер         Драйвер

            * Адрес источника или получателя со стороны MS-DOS представля-
              ет собой адрес буфера,  который либо содержит данные для вы-
              вода (команды OUTPUT),  либо будет заполнен данными (команды
              INPUT).

            * "Количество байт/секторов" определяет сколько байт (для сим-
              вольных устройств и в командах IOCTL) или  секторов (команды
              INPUT, OUTPUT и OUTPUT&VERIFY) будет (или было) передано.

            * Только  для  блоковых драйверов задаются параметры "Устройс-
              тво" и "Начальный сектор", уточняющие местонахождение источ-
              ника (для INPUT) или получателя (для OUTPUT).

            * Параметр "Байт описателя носителя" (только для блоковых ус-
              тройств) может быть использован для определения формата дис-
              ка или того факта, что носитель был заменен.
            Как только драйвер определил источника и получателя, он выпол-
         няет  передачу  данных.  После выполнения передачи драйвер должен
         вернуть фактическое количество переданных  байтов  или  секторов.
         Даже если возникла ошибка и установлен индикатор ошибки в возвра-
         щаемом слове состояния, MS-DOS считает, что возвращаемое значение
         параметра  "Количество байтов/секторов" корректно.  Если драйверу
         не удалось обновить этот параметр, то возвращаемое значение будет
         таким  же  как  и  переданное драйверу на входе.  Вы должны также
         знать,  что даже если передача прошла успешно,  счетчик  все-таки
         может  иметь неверное значение.  Это происходит при возникновении
         т.н. "перекрытия".
            Перекрытие (для  блоковых  драйверов)  возникает в том случае,
         если передается большее количество байт, чем то которое можно ад-
         ресовать с помощью сегментного адреса буфера.  Приведем следующий
         пример. Пусть драйвер пересылает 64 сектора по 512 байт каждый из
         буфера начиная со смещения 8000H. Таким образом, общее количество
         байт, которые требуется передать, составит 32768 (8000H). Так как
         начальное  смещение в буфере равно 8002H,  то смещение последнего
         байта будет иметь заведомо некорректное значение 10002H. В подоб-
         ных случаях, т.е. при возникновении перекрытий, драйвер не должен
         пытаться передавать недостижимую порцию данных.
            Каждая команда  имеет свои особенные требования для выполнения
         передачи и отличаются возвращаемым значением статуса  и счетчика.
         Эти требования описаны ниже для каждой из команд.

                                      - 6-40 -

         КОМАНДЫ CTL INPUT и CTL OUTPUT (3 и 12).
            Это простейшие команды,  обычно требуемые только для  передачи
         данных самому  драйверу  (не  устройству) или получения данных от
         него.  Для MS-DOS эти данные не имеют никакого значения, и, более
         того,  могут  быть проигнорированы самим драйвером,  если ему так
         захочется.  Ответственность за обработку переданных таким образом
         данных лежит только на драйвере и прикладной программе.  Как пра-
         вило,  используются для изменения режимов работы  драйвера  и/или
         устройства,  хотя возможны и другие варианты. Важно только, чтобы
         драйвер не забывал правильно устанавливать  возвращаемое значение
         счетчика переданных байтов.

         КОМАНДЫ INPUT OUTPUT (4 и 8).
         Для большинства  символьных  драйверов  логика  обработки  команд
         INPUT и OUTPUT весьма незамысловата.  Если передача прошла успеш-
         но,  то устанавливается бит DONE в  слове  состояния  драйвера  и
         драйвер возвращает управление. Если возникла какая-либо проблема,
         то в  слово  состояния  записывается  код  соответствующей ошибки
         (см.табл.6-3), устанавливается счетчик и возвращается управление.

            Если символьное  устройство  не имеет готовых данных на момент
         выдачи команды INPUT,  драйвер может либо подождать  или  вернуть
         ошибку "Устройство не готово". При выводе данных, если устройство
         не может их принять,  драйвер также может вернуть эту ошибку. Од-
         нако ошибка "Устройство не готово" обычно используется для указа-
         ния того, что устройство выключено или по каким-либо причинам не-
         доступно.  Использование  этой  ошибки  всего  лишь для индикации
         неготовности данных является не слишком хорошим решением, так как
         получив ошибку "Устройство не готово",  MS-DOS запросто может вы-
         дать оператору запрос на вмешательство.
            Логика  работы  блоковых  драйверов  при  выполнении  операций
         ввода/вывода более сложная. Как правило, драйвер должен выполнять
         преобразование номера начального сектора в координаты физического
         сектора,  обычно состоящие из номера цилиндра  (дорожки),  номера
         головки  и номера физического сектора на дорожке.  Возможно,  что
         драйверу придется выполнить операцию перевода головки  чтения/за-
         писи  на соответствующую дорожку перед началом передачи и,  может
         быть, в процессе самой передачи секторов. Более подробно устройс-
         тво диска описано в главе 11.
            Более того, устройства, подобные дисководам, являются источни-
         ком множества ошибок (см.табл.6-3), таких как "Запись на устройс-
         тво запрещена",  "Неверно переданы данные (ошибка CRC)",  "Ошибка
         при установке головки", "Ошибка при чтении", "Ошибка при записи",
         и даже такая звучная как "Общая ошибка". Обычно при возникновении
         ошибки драйвер фиксирует код ошибки в слове состояния, устанавли-
         вает счетчик успешно переданных секторов и возвращает управление.
         Однако одна ошибка требует дальнейшего анализа и обработки  - это
         "Недопустимая смена диска".
            Ошибка "Недопустимая смена диска" воспринимается MS-DOS версии
         3.0 и выше и только в том случае, когда MS-DOS знает что она име-
         ет дело с устройством, поддерживающем замену носителя (установлен
         атрибут OCRM в слове атрибутов драйвера).  Отличие этой ошибки от
         остальных заключается в том,  что если драйвер информирует MS-DOS
         о недопустимой замене носителя,  MS-DOS  должна  знать  с  каким,
         собственно,  диском намеревался работать драйвер.  Эта информация
         определяется именем тома ожидаемого диска,  указатель на  которое

                                      - 6-41 -
         должен вернуть драйвер.  Как и в команде MEDIA CHECK,  если соот-
         ветствующее имя драйверу не известно,  он  должен  вернуть  адрес
         строки "NO NAME".
            Как узнает драйвер о недопустимой замене носителя?  Если драй-
         вер ведет счетчик количества открытий и закрытий,  выполненных на
         устройстве (командами 13 и 14) и  диск  заменяется  пользователем
         (что  определяется другим форматом,  другим описателем носителя и
         т.п.) при количестве открытий превышающем количество закрытий, то
         делается  вывод  о  том,  что замена носителя была недопустимой и
         формируется ошибка "Недопустимая смена диска".

         КОМАНДА OUTPUT & VERIFY (9).
         Команда OUTPUT & VERIFY(вывод с проверкой) применяется только для
         тех устройств,  в которых возможно считывание данных после их за-
         писи  на устройство для того,  чтобы убедиться в корректности вы-
         полненной операции.  Для таких устройств  (например  для  дисков)
         драйвер  должен  выводить данные (также как и по команде OUTPUT),
         считывать их обратно (так же как по INPUT) и  сравнить  считанные
         данные с теми,  которые были записаны. Если обнаружена ошибка, то
         драйверу следует не пытаться повторить  неудавшуюся  операцию,  а
         сообщить  об  этой  ситуации  MS-DOS,  вернув соответствующий код
         ошибки (см.табл.6-3) и количество успешно переданных  байтов/сек-
         торов.

            Как и   в   случае   команды    BUILD BPB,   обработка команды
         OUTPUT & VERIFY требует наличия у драйвера внутреннего буфера для
         считывания проверяемых данных.  Если устройство не позволяет счи-
         тывать данные обратно,  то данная команда  должна  обрабатываться
         также как и команда OUTPUT (команда 8).

         КОМАНДА OUTPUT UNTIL BUSY (16).
            Команда OUTPUT UNTIL BUSY представляет еще одну  разновидность
         команды OUTPUT.  Эта команда,  которая используется только с сим-
         вольными устройствами, драйверы которых имеют атрибут OTB (бит 13
         слова атрибутов),  позволяет программам передавать большие порции
         данных устройствам,  которые имеют внутренние буфера  (таких  как
         принтеры).  Драйвер такого устройства должен посылать данные либо
         до тех пор пока они не кончатся, либо пока устройство в состоянии
         их принять. Очень важно, чтобы такой драйвер корректно устанавли-
         вал счетчик переданных байтов, так чтобы MS-DOS знала какое коли-
         чество данных уже передано.  Обратите внимание,  что для этой ко-
         манды не  является  ошибочной  ситуация,  когда  передано  меньше
         данных, чем было запрошено.
            Команда NONDESTRUCTIVE INPUT WITHOUT WAIT (неразрушающее  счи-
         тывание  без  ожидания) требуется только для драйверов символьных
         устройств и не используется для блоковых драйверов.  Хотя эта ко-
Предыдущая страница Следующая страница
1 ... 82 83 84 85 86 87 88  89 90 91 92 93 94 95 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама