Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АВМиС - Готовые шпоры.doc
Скачиваний:
145
Добавлен:
15.09.2014
Размер:
1.75 Mб
Скачать

Файл config.Nt

В операционных системах семейства Windows NT файл CONFIG.SYS не используется, а при старте DOS-сессий (для запуска в режиме эмуляции приложений, написанных для DOS) вместо него используется файл config.nt. Этот файл должен быть расположен в %systemroot%\System32, и его синтаксис похож на синтаксис CONFIG.SYS.[6]

Файл SMARTDRV.EXE

Загружает драйвер устройства SMARTDRV.EXE для выполнения двойной буферизации. Двойная буферизация обеспечивает совместимость с отдельными контроллерами жесткого диска, которые не могут работать с памятью, поддерживаемой EMM386 или Windows в улучшенном режиме 386.

SMARTDrive может также выполнять кэширование диска, которое ускоряет работу компьютера. Для этого добавьте команду SMARTDRV в файл AUTOEXEC.BAT.

Чтобы использовать средство двойной буферизации SMARTDrive, драйвер SMARTDRV.EXE нужно загрузить командой DEVICE в файле CONFIG.SYS.

DEVICE=[диск:][маршрут]SMARTDRV.EXE /DOUBLE_BUFFER

Параметр [диск:][маршрут] задает расположение файла SMARTDRV.EXE. /DOUBLE_BUFFER указывает SMARTDrive, что нужно выполнять двойную буферизацию.

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

Вам может потребоваться двойная буферизация, если вы используете EMM386 или выполняете Windows в улучшенном режиме 386. Двойная буферизация обычно требуется для жесткого диска или другого устройства с интерфейсом SCSI, но может оказаться необходимой и для устройства с интерфейсом ESDI MCA. Для большинства жестких дисков двойная буферизация не требуется.

12. Прерывания дисковой системы пэвм.

Функция 36H прерывания 21H сообщает сколько имеется свободного пространства на диске. Единственный входной регистр DL, который должен содержать номер накопителя. Hакопитель по умолчанию обозначается 0, накопитель A - 1 и т.д. При возврате BX содержит число доступных кластеров, AX - число секторов в кластере, а CX количество байт в секторе. Hебольшое упражнение в умножении дает желаемый результат. В следующем примере проверяется, что на двухсторонней дискете осталось по меньшей мере 2K дискового пространства:

MOV AH,36H

;номер функции

MOV DL,1

;накопитель A

INT 21H

;получаем информацию

CMP BX,2

;имеется ли 2 свободных кластера?

JL RUNNING_OUT

;если нет, то сообщаем об этом

FCB функция 23H прерывания 21H сообщает число записей в файле. Если приписать файлу длину записи в 1 байт, то его размер будет возвращен в байтах. DS:DX должны указывать на управляющий блок открытого файла. Затем вызовите функцию. Если файл не найден, то в AL возвращается FF. В противном случае в AL возвращается 0, а число записей помещается в поле номера записи прямого доступа FCB (байты 33-36). Для правильной работы поле длины записи FCB должно быть установлено после открытия файла, но перед вызовом функции; это двухбайтное поле расположено по смещению 14 в FCB. Если размер файла неточно делится на длину записи, то сообщаемое число записей округляется вверх. Вот пример, в котором используется длина записи равная 1:

;---определение размера файла

LEA DX,FCB

;DS:DX указывает на FCB

MOV BX,DX

;копируем указатель в BX

MOV CX,1

;размер записи в CX

MOV [BX]+14,CX

;пишем в поле размера записи FCB

MOV AH,23H

;функция сообщающая размер файла

INT 21H

;вызов функции

MOV AX,[BX]+33

;получаем младшую часть размера файла

MOV CX,[BX]+35

;получаем старшую часть размера файла

Метод, использующий дескриптор файла (file handle) не имеет функции, которая непосредственно сообщала бы длину файла, однако имеется возможность вычислить размер, передвинув указатель файла с начала на конец файла. При открытии файла указатель файла автоматически устанавливается на первый байт файла.

Указатель файла перемещается функцией 42H прерывания 21H. Hадо поместить в AL кодовое число 2, направляющее указатель на конец файла. В BX должен быть указан номер файла, а CX:DX содержит смещение от конца файла до позиции, в которую должен быть установлен указатель, поэтому поместите 0 в оба этих регистра. Затем вызовите функцию. При возврате DX:AX будет содержать новую позицию указателя, относительно его предыдущей позиции - т.е. будет содержать длину файла (DX содержит старший байт). При возникновении ошибки будет установлен флаг переноса, а в AX будет возвращено 1, если неправилен номер функции и 6, если неправилен номер файла. Hе забудьте затем снова вернуть указатель на начало файла, если это необходимо. Поместите 0 в AL, CX и DX и вызовите функцию снова. Вот пример:

;---открываем файл

LEA DX,FILE_PATH

;DS:DX указывают на путь файла

MOV AL,0

;открываем для чтения

MOV AH,3DH

;функция открытия файла

INT 21H

;открываем его

JC OPEN_ERROR

;проверка на ошибку

MOV HANDLE,AX

;запоминаем номер файла

;---определяем длину файла

MOV AH,42H

;функция перемещения указателя

MOV AL,2

;код установки на конец файла

MOV BX,HANDLE

;номер файла в BX

MOV CX,0

;0 в CX и DX

MOV DX,0

;

INT 21H

;сдвигаем указатель

JC POINTER_ERROR

;ошибка?

MOV FSIZE_HIGH,DX

;запоминаем размер файла

MOV FSIZE_LOW,DX

;

Все функции DOS, которые пишут на диск, выдают определенный код ошибки при попытке записи на полный диск. Вот сводка этих кодов:

Метод доступа Функция Hазвание Kод ошибки

FCB 15H Последовательная запись AL = 1

FCB 22H Прямая запись AL = 1

FCB 27H Прямая запись блока AL = 1

Дескриптор 40H Запись в файл/устройство CX <> BX

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

MS DOS обеспечивает две пары функций для поиска файлов, одна для файлов, открытых методом управляющих блоков файла, а другая для файлов, открытых методом дескриптора файлов. Одна из функций каждой пары ищет первое появление имени файла в каталоге, а другая ищет последующие появления, когда в имени файла содержатся джокеры. Только метод, использующий дескриптор файла позволяет искать подкаталоги. Метод FCB:

Функция 11H прерывания 21H ищет первое появление файла. Установите DS:DX на неоткрытый FCB и выполните функцию. При возврате AL будет содержать 0, если файл найден, и FF - если нет. DTA заполняется информацией из каталога. Для обычных FCB первый байт DTA содержит номер накопителя (1 = A и т.д.), а следующие 32 байта содержат элемент каталога. Для расширенного FCB первые 7 байтов файла копируются в первые 7 байтов расширенного FCB, восьмой байт указывает на накопитель, а следующие 32 байта - элемент каталога.

;---в сегменте данных

FCB DB 1,'NEWDATABAK',25DUP(0)

;---ищем файл

MOV AH,11H

;функция поиска в каталоге

LEA DX,FCB

;указываем на FCB

INT 21H

;ищем

CMP AL,0

;успешно?

JNE NO_FILE

;если нет, то процедура обработки ошибки

LEA BX,DTA

;теперь DS:BX указывает на элемент каталога

После использования функции 11H можно использовать функцию 12H для поиска следующих подходящих элементов, когда имя файла содержит джокеры. В данном случае в имени файла допустим только символ "?", но не "*". Эта функция работает в точности так же, как и первая, и если найден второй файл, то информация о первом файле в DTA будет уничтожена повторной записью.

Метод дескриптора файлов:

Функция 4EH прерывания 21H ищет файл с данным именем. DS:DX должны указывать на строку, дающую путь файла. Hапример, B:\EUROPE\FRANCE\PARIS указывает на файл PARIS. Строка может содержать до 63 символов и завершаться символом ASCII 0.

Если файл найден, то функция заполняет DTA информацией о файле. Отметим частный случай использования DTA методом дескриптора файлов - обычно, DTA используется функциями MS DOS для работы через FCB. Первые 21 байт DTA зарезервированы DOS для поиска следующих совпадающих файлов. Двадцать второй байт дает атрибут файла, за ним следуют два байта, содержащие время и еще два байта содержащие дату. Следующие 4 байта содержат размер файла (младшее слово сначала). И, наконец, дается имя файла в виде строки переменной длины, заканчивающейся байтом ASCII 0. Точка (ASCII 46) разделяет имя и расширение и не один из этих элементов не заполнен пробелами.

;---в сегменте данных

PATH DB 'B:FRANCE\PARIS\4EME',0

;---ищем файл

MOV AH,4EH

;номер функции

LEA DX,PATH

;DS:DX указывают на путь

MOV CX,0

;обычный атрибут файла

INT 21H

;ищем файл

JC NO_FILE

;уход, если не найден

LEA BX,DTA

;DS:BX указывают на DTA

MOV AL,[BX]+21

;теперь атрибут файла в AL

Следующее появление имени файла (когда используются джокеры) ищется с помощью функции 4FH прерывания 21H. Она готовится в точности так же, как и функция 4EH, при этом указатель DTA не должен меняться. Kогда других совпадений не найдено, то устанавливается флаг переноса, а в AX появляется 18.

Функция EH прерывания 21H устанавливает накопитель по умолчанию. Надо просто поместить номер накопителя (0 = A, 1 = B и т.д.) в DL и выполнить прерывание. Эта функция возвращает в AL число накопителей на машине. Отметим, что когда у машины имеется только один накопитель, то возвращается число 2.

MOV AH,0EH

;номер функции

MOV DL,1

;код для накопителя B

INT 21H

;устанавливаем накопитель по умолчанию

Функция 19H прерывания 21H сообщает какой из накопителей является накопителем по умолчанию. Для этой функции нет входных регистров. При возврате в AL содержится кодовый номер, где 0 = A, 1 = B и т.д.

  1. Назначение, структурная схема и программирование контроллеров НГМД.

Гибкие диски были первой системой дисковой памяти на персональном компьютере. Дисковая подсистема первого IBM PC состояла только из них. Накопитель на гибких дисках состоит из контроллера, соединительного шлейфа (36 линий связи), устройства чтения-записи (дисковода) и гибких дисков

Гибкий диск представляет собой пластину из гибкого материала (полимера) и нанесенное на нее магнитное покрытие. Покрытие наносится с двух сторон диска (раньше было с одной стороны). Диск находится в защитном конверте. В центре диска есть отверстие со специальным кольцом (металлическим у дисков 3.5 дюйма), за которое привод мотора дисковода захватывает диск.

Для выполнения операций записи и чтения шаговый двигатель перемещает головки вдоль радиуса диска. Это связано с тем, что вся поверхность диска разбивается на концентрические кольца - дорожки (цилиндры, треки). Позиционирование головок выполняется на тот трек, данные с которого требуется прочитать. Каждый трек делится на несколько секторов. Позиционирование головок на сектор, конечно, не производится. Для чтения сектора контроллер ищет начало дорожки (запись определенного формата), после чего просматривается каждый найденный сектор, который содержит информацию о своем номере и позиции на диске. После выполнения считывания сектора данные (512 байт) проверяются на корректность методом расчета контрольной суммы (CRC).

Если правильность не подтверждается, проводится повторное чтение несколько раз. В случае успеха данные поступают в оперативную память, используя метод DMA.

Накопители подключены к контроллеру - специальному устройству, выполняющему функции управления. Контроллер обычно выполнен в виде платы и вставлен в разъем системной шины, который находится на основной плате компьютера.

Существует специальная таблица - Disk Parameter Table. Она содержит специфические низкоуровневые параметры дисководов, формируется BIOS при инициализации системы. На эту таблицу указывает вектор прерывания 1Eh ( адрес находится по адресу 0000h:0078h). Таблица имеет размер 11 байт.

Смещение

Описание

0

Биты 0...3 - SRT (Step Rate Time) - задержка для переключения головок, лежит в пределах 1-16 мс и задается с интервалом 1 мс (0Fh - 1mc, 0Eh - 2 mc, 0Dh - 3 mc, ...);

биты 4...7 - задержка разгрузки головки, лежит в пределах 16-240 мс и задается с интервалом 16 мс (1 - 16 mc, 2 - 32 mc, ..., 0Fh - 240 mc).

1

Бит 0 - значение этого бита, равное 1, говорит о том, что используется прямой доступ к памяти (DMA);

биты 2...7 - время загрузки головок HLT - интервал между сигналом загрузки головок и началом операции чтение/запись, лежит в пределах 2-254 мс и задается с интервалом 2 мс (1 - 2 mc, 2 - 4 mc, ..., 0FFh - 254 mc).

2

Задержка перед выключением двигателя.

3

Код размера сектора в байтах (0 - 128 байтов, 1 - 256, 2 - 512, 3 - 1024).

4

Номер последнего сектора на дорожке

5

Длина межсекторного промежутка для чтения/записи.

6

Максимальная длина передаваемых данных, используется когда не задана длина сектора.

7

Длина межсекторного промежутка для операции форматирования.

8

Байт-заполнитель для форматирования (обычно используется F6h).

9

Время установки головки в миллисекундах.

10

Время запуска двигателя в 1/8 долях секунды.

Использовать эту таблицу можно при выполнении операций чтения-записи через порты контроллера дисководов.

Программа обращается к контроллеру для выполнения различных операций с помощью команд ввода/вывода. Для IBM PC и IBM PC/XT используются три порта с адресами 3F2h, 3F4h и 3F5h. В компьютерах IBM PC/AT дополнительно используются два порта с адресами 3F6h и 3F7h.

Порт 3F2h работает только на запись, это порт вывода. С его помощью можно выбирать для работы один из НГМД (одновременно можно работать только с одним НГМД), сбрасывать контроллер в исходное состояние, разрешать или запрещать прерывания от контроллера и работу схем прямого доступа к памяти, включать или выключать двигатели НГМД.

Порт 3F4h предназначен только для чтения. С его помощью можно получить байт основного состояния контроллера.

Порт 3F5h предназначен для записи или чтения данных. Он используется для всех операций.

Выполнение любой операции начинается с того, что программа посылает в этот порт байт кода операции, за которым следует один или несколько байт параметров. Количество байт параметров и их назначение зависит от кода операции (т. е. от первого байта). После выполнения операции программа считывает несколько байт результата для анализа результата выполнения операции.

Порт 3F7h работает на запись и чтение, он используется только в IBM PC/AT.

Контроллер НГМД может выполнять 15 операций, или команд. Команда разделяется на три фазы - командная фаза, фаза выполнения, фаза результата. В командной фазе программа должна передать контроллеру всю информацию, необходимую для команды. В фазе выполнения команда выполняется, и в фазе результата программа получает от контроллера информацию о состоянии контроллера.

Информация, необходимая для команды, передается контроллеру через порт данных 3F5h. В соответствии с форматом команды программа должна последовательно вывести в этот порт код команды и все параметры.

Прежде чем программа начнет командную фазу, она должна убедиться в том, что контроллер завершил выполнение предыдущей операции и готов к приему команды. Для этого программа должна прочитать байт основного состояния контроллера из порта с адресом 3F4h и проверить биты 6 и 7. Бит 6 должен быть установлен в 0. Это означает, что данные будут передаваться от процессора к контроллеру. Бит 7 должен быть установлен в 1 - это готовность контроллера к приему команды.

Фаза выполнения начинается после установки битов 6 и 7 байта основного состояния в 1. После завершения команды контроллер формирует сигнал запроса прерывания.

В фазе результата процессор считывает состояние контроллера. Это состояние хранится в нескольких внутренних регистрах контроллера:

• RS - регистр основного состояния;

• ST0, ST1, ST2, ST3 - регистры дополнительного состояния.

Регистр основного состояния доступен через порт 3F4h, содержимое остальных регистров процессор считывает после выполнения контроллером команды через порт данных 3F5h.