Главная -> Книги

(0) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) (48) (49) (50) (51) (52) (53) (54) (55) (56) (57) (58) (59) (60) (61) (62) (63) (64) (65) (66) (67) (68) (69) (70) (71) (72) (73) (74) (75) (76) (77) (78) (79) (80) (81) (82) (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) (96) (97) (98) (99) (100) ( 101 ) (102) (103) (104) (105) (106) (107) (108) (109) (110) (111) (112) (113) (114) (115) (116) (117) (118) (119) (120) (121) (122) (123) (124) (101)

Прерывание Рис. 7-8. Планирование задач по прерывает таймера ниям от таймера

Подпрограмма таймера

Задача О

Задача 1

Задача?

±

Задача 3

±

Задача 4

(рис. 7-8). Задачей О может быть сканирование клавиатуры, задачей 1 - модификация текущего времени и т. д. Каждой задаче должно отводиться время процессора, достаточное для удовлетворения ее временных ограничений. Задача с наименьщим приоритетом всегда должна находиться в состоянии выполнения либо готовности к выполнению.

Период таймера выбирается из общих временных характеристик в системе, например частоты опроса периферийных устройств в задаче с максимальным приоритетом. Если сканирование клавиатуры должно производиться с интервалом 10 мс, частота прерываний таймера составит 100 Гц. Задачи (их еще называют процессами) можно рассматривать как динамическое выполнение программы. По мере выполнения задача создает данные, которые становятся ее неотъемлемой частью, и манипулирует ими. В процессорах со стековой ориентацией • для временного хранения адресов возврата и содержимого внутренних регистров используется стек. Поскольку задачи автономны, у каждой должен быть свой стек, в котором запоминается содержимое регистров в случае прерывания или приостановки задачи. В специальной ячейке запоминается значение ее указателя стека. Таким образом, задача ассоциируется со структурой данных, показанной на рис. 7-9. Основным элементом ее является запомненное значение указателя стека SP, которое адресует сохраненное содержимое регистров и программного счетчика. Продолжение или инициирование выполнения задачи процессором осуществляется путем восстановления содержимого указателя стека, регистров и програмного счетчика.

При фиксированном числе задач, что характерно для многих применений микро-ЭВМ, структура данных для планирования задач оказывается простой. В таблице SPSAV запоминается содержимое указателя стека каждой задачи, а в ячейки RUNNR находится номер выполняемой задачи. Для удобства манипуляций адресами номер



задачи представлен 16-битным числом.

Проводимая ниже подпрограмма RESRV используется для запоминания содержимого всех регистров и указателя стека в случае прерывания или приостановки:

Метка

RESRV:

Операнд

Комментарий

XTHL

PUSH

PUSH

PUSH

PUSH

LHLD

RUNNR

D, SRSAV

XCHG

XCHG

H, 0 ;

XCHG

M, D

Содержимое H, L в стеке

Запоминание содержимого регистров процессора Адрес возврата в стеке Вычисление индекса в таблице SPSAV

; Индекс в регистрах D, ; Е

; Передача (SP) в (Н, L)

; Компенсация адреса ; возврата

; Передача (SP) в (D, ; Е)

; Запоминание (SP) в ; таблице SPSAV

; Возврат

Таблица SPSAV 15 о

Запомненное содержимое SP

Номер задачи

RUNNR

Стек задачи 2

Свободная область

- (О, Е) -

(в, с) -

- (PSW) -

- (Н. L)

- (PC)

Даннь

Программе

Рис, 7-9. Структура данных задачи (задача 2)



Вначале команда XTHL передает адрес возврата в регистры Н, L, а текущее содержимое этих регистров запоминается в стеке. Затем тремя командами PUSH в стеке запоминается содержимое регистров процессора, а последняя команда PUSH Н включает в стек адрес возврата. В остальной части программы вычисляется индекс в таблице SPSAV для выполнявщейся задачи, и в соответствующем элементе таблицы запоминается содержимое указателя стека.

Подпрограмма SUSP используется для приостановки одной задачи и инициирования или продолжения задачи со следующим приоритетом. Она вызывается из одной задачи, а в результате производимого ею контекстного переключения управление возвращается по адресу возврата другой задачи. Подпрограмма выполняется с запрещенными прерываниями, чтобы не нарущалось контекстное переключение процессора:

Метка Код Операнд Комментарий

SUSP:

NEXT:

CALL

LHLD

SHLD

XCHG

MOV-

XCHQ

SPHL

POP POP POP POP EI

RESRV

RUNNR H

RUNNR D, SRSAV

D E,M

H D, M

D В PSW H

Запрещение прерываний

Сохранение состояния

задачи Продвижение номера

задачи

; Вычисление индекса в ; таблице SPSAV

; Указатель стека в D,

Восстановление указателя стека

Восстановление содержимого регистров процессора

Разрешение прерываний

Возврат к следующей задаче

Подпрограмма TIMER обработки прерываний таймера аналогично по структуре подпрограмме SUSP, но инициирует выполнение задачи с максимальным приоритетом (задача 0).



(0) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) (48) (49) (50) (51) (52) (53) (54) (55) (56) (57) (58) (59) (60) (61) (62) (63) (64) (65) (66) (67) (68) (69) (70) (71) (72) (73) (74) (75) (76) (77) (78) (79) (80) (81) (82) (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) (96) (97) (98) (99) (100) ( 101 ) (102) (103) (104) (105) (106) (107) (108) (109) (110) (111) (112) (113) (114) (115) (116) (117) (118) (119) (120) (121) (122) (123) (124)