Время, требуемое для передачи данных через порты, обычно за-
висит от характеристик внешних устройств. Например, время, необ-
ходимое для записи/считывания 1 байта на жесткий диск или с жест-
- 5-13 -
кого диска, зависит от нескольких факторов: типа жесткого диска,
таких параметров жесткого диска, как количество головок и коли-
чество цилиндров, размера порций ввода/вывода на жесткий диск,
структуры файлов, количества файлов и так далее. Если ваша систе-
ма реального времени использует внешние устройства, Вам следует
провести несколько опытов, чтобы снять время, затрачиваемое на
выполнение операций. Поскольку разрешающая способность часов сис-
темы в операционной системе MS-DOS равна 10 м/сек, операция в
опыте должна повторяться много раз с целью получения точных вре-
менных оценок. Они изображены ниже на рисунке 5-7:
ЪДДДДДДДДДДДДДДДДДДД¬
¦ ¦
¦ Передача данных ¦
¦ ¦
АДДДДДДДДДВДДДДДДДДДЩ
¦
ЪДДДДДДДДДД†ДДДДДДДДДДДД¬
¦ ¦ ¦
ЪДДБДДДД¬ ЪДДДБДДДДД¬ ЪДДДДБДДД¬
¦Метод ¦ ¦ Прямой ¦ ¦Метод ¦
¦упоря- ¦ ¦ доступ ¦ ¦доступа ¦
¦дочен- ¦ ¦ к памяти¦ ¦по пре- ¦
¦ного ¦ ¦ (DMA) ¦ ¦рываниям¦
¦опроса ¦ ¦ ¦ ¦ ¦
АДДДДДДДЩ АДДДДДДДДДЩ АДДДВДДДДЩ
¦
ЪДДДДДДДДДДДДДДД†ДДДДДДДДДДДДДД¬
¦ ¦ ¦
¦ ¦ ¦
ЪДДДДДДБДДДДДД¬ ЪДДДБДДД¬ ЪДДДДБДДДД¬
¦ Устройства ¦ ¦ Таймер¦ ¦Программа¦
¦ ввода/выво- ¦ ¦ ¦ ¦ ¦
¦ да ¦ АДДДДДДДЩ АДДДДДДДДДЩ
АДДДДДДДДДДДДДЩ
Рис. 5-7. Методы передачи данных
Метод упорядочения опроса может использоваться в действи-
тельности для любого устройства. В нашей схеме порты проверяются
(опрашиваются) в некоторой постоянной последовательности с целью
определения наличия данных для пересылки в каком-либо порту. Это
значит, что масса компьютерного времени тратится впустую, если
порты находятся большую часть времени в неактивном состоянии. Бо-
лее того, сам процессор во времени передачи данных находится в
"занятом" состоянии, и опрос в это время не ведется.
Для того, чтобы понять насколько быстро протекает передача
найденных в результате упорядоченного опроса данных, рассмотрим
предложенную ниже программу, в которой осуществляется ввод данных
через порт центрального процессора CPU в память. Регистр DX со-
держит адрес этого порта.
read: in ax,dx ; считывание данных - 12 циклов
add di,2 ; следующее место назначения -
4 цикла
mov [di],ax ; сохранение данных - 18 циклов
loop read ; выполнение цикла до полного
- 5-14 -
; завершения - 17 циклов
; общее количество -51 цикл
для 8088
; общее количество -43 цик-
ла для 8086
Для микропроцессора модели 8088, работающего с частотой
4,77 МГц 51 цикл занимает 10,69 микросекунд, что приводит к ско-
рости передачи данных на частоте 93 КГц. Эта скорость передачи
данных означает, что компьютер может считывать данные максимум
93000 раз из порта.
В приводимом ниже куске программы происходит проверка на на-
личие готовых к пересылке данных в последовательном порту. Для
этого используется функция прерывания "int 14h" со значением AH=3
(требование к состоянию последовательного порта). При возврате,
если бит 0 регистра AH имеет значение "1", это значит, что имеются
готовые данные. Программа обычно ожидает появление готовых данных
и они возвращаются в регистр AL.
wait:
mov ah,3 ; считать значение состояния
; последовательного порта
mov dx,0 ; требуется состояние порта
; COM1
int 14h ; обращение к ПЗУ-DIOS
and ah,1 ; данные готовы?
jz wait ; нет, ожидать, пока данные
; не будут готовы
mov ah,2 ; Функция=считывания данных
mov dx,0 ; считывание из порта COM1
int 14h ; обращение к ПЗУ-BIOS
Передача данных методом прямого доступа к памяти (DMA)
Передача данных методом прямого доступа к памяти (DMA) ис-
пользуется, когда требуется передача больших объемов данных, а
процессор занят выполнением других задач на фоне передачи данных.
Обычно только процессор имеет доступ к памяти. Но при наличии
прямого доступа к памяти (DMA) внешние устройства тоже могут об-
ращаться к памяти. Внешнее устройство блокирует процессор и начи-
нает само вести обмен данных с памятью. Во время передачи данных
процессор не может обращаться к памяти, но может выполнять какую-
то другую работу. После завершения процедуры передачи данных
процессор вновь получает возможность обращения к памяти.
Передача данных методом прерываний данных
Передача данных методом прерываний данных используется, ког-
да передача данных ведется асинхронно (то есть, время, отведенное
для передачи данных заранее не определяется). И такая передача
данных обычно происходит сравнительно не часто. Прерывание указы-
вает на появление какого-либо внешнего события в процессоре, тре-
бование может вызываться каким-либо внешним по отношению к про-
цессору устройством, часами (таймером) или какой-либо программой.
При наступлении прерывания процессор приостанавливает выполнение
текущей программы ("подвешивает" ее), считывает адрес сервисной
программы прерываний (программы ISR) из таблицы векторов прерыва-
- 5-15 -
ний и выполняет последнюю.
Основными функциями, выполняемыми сервисной программой ISR,
являются :
1. Разрешение прерываний таким образом, что могут обслуживать-
ся прерывания более высоких приоритетов.
2. Сохранение регистров, которые будут использоваться програм-
мой ISR.
3. Выполнение функций обработки, связанных с прерыванием, как
можно быстрее.
4. Восстановление содержимого сохраненных регистров.
5. Выполнение команды IRET для возобновления выполнения пре-
рванной программы.
Представленная ниже программа содержит структуру программы
ISR:
sti ; разрешить прерывания
push ax ; сохранить только те
push bx ; регистры, которые ис-
push cx ; пользуются программой
push dx ; ISR
.
.
.
mov ax,cs ; локальные данные, к ко-
; торым будет вестись об-
; ращение
mov ds,ax ; с использованием области
; DS
.
.
. ; обработать прерывания
pop dx ; восстановить регистры в
pop cx ; обратном порядке
pop bx ;
pop ax ;
iret ; возобновить выполнение
; прерванной программы
При появлении прерывания процессор сохраняет три слова (CS,
IP, флаги) и считывает два слова (адрес программы ISR). Таким об-
разом, на обслуживание любого прерывания в процессоре 8088 затра-
чивается 71 цикл, а в процессоре 8086 - 51 цикл. Не требуется до-
полнительных затрат на задание прерывания и его сброс, потому
что процесс обслуживания прерывания уже сбрасывает его (это назы-
вается "автоматическое завершение режима прерывания").
Сравнение методов передачи данных
Сравнение времен и максимальных скоростей передачи данных не
методами прямого доступа (DMA) представлено в таблице 5-5. Вре-
менные затраты (циклы и времена) в таблице вычисляются только для
тех циклов, в которых не происходит действительной передачи дан-
ных. Информация о временных затратах дается только в целях при-
близительного сравнения. Например, временные затраты на выполне-
ние "программного цикла" получают при выполнении следующей коман-
ды языка ассемблер:
again: loop again
Регистр CX загружается некоторым определенным значением
счетчика и в этом цикле передачи данных не происходит.
Циклы для проведения упорядоченного опроса строятся в виде
предложенной ниже программы, в которой происходит считывание сос-
тояния из порта, проверка бита готовности и потом выполняется сам
цикл, если готовности нет.
again:
in ax,dx ; порт задается в DX
test ax,bx ; сравнение регистр/регистр
jnz again ; повторять цикл до готовности
Таблица 5-5
Скорости передачи данных для не -DMA интерфейсов
ЪДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДВДДДДДДДДД¬
¦Готовые данные,¦ Затраты ¦ Передача ¦Макси- ¦
¦определяемые: ¦ времени ¦ данных ¦мальная ¦
¦ ГДДДДДДДДДДДДДДД†ДДДДДДДДДДДДДДґскорость ¦
¦ ¦ циклы время ¦ циклы время¦передачи ¦
¦ ¦ ¦ ¦данных ¦
ГДДДДДДДДДДДДДДД†ДДДДДДДДДДДДДДД†ДДДДДДДДДДДДДД†ДДДДДДДДДґ
¦Программный ¦17 3.564 мксек¦ - - ¦ - ¦
¦цикл ¦ ¦ ¦ ¦
¦(8088,4.77 MГц)¦ ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Упорядоченный ¦27 5.660 мксек¦51 10.692мксек¦61 КГц ¦
¦опрос ¦ ¦ ¦ ¦
¦(8088;4,77 МГц)¦ ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Прерывание ¦115 24.109мксек¦43 9.015мксек¦30 КГц ¦