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

(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) (100)

передается тест-программе. Она воспринимает и контролирует выходные данные и моделирует входные данные. Особенно удобно реализовать такое взаимодействие при использовании ввода-вывода, отображенного на память.

При программировании сопрограмм на языке ассемблера для каждой из них необходимо временно запоминать адрес возобновления. Наиболее просто эта задача решается в процессорах СМ с помощью команды JSR со специальным режимом адресации JSR R7, @(SP) +• При ее

выполнении содержимое вершины стека (т. е. адрес возобновления другой сопрограммы) передается в программно-недоступный регистр TEMP процессора, затем содержимое программного счетчика (т. е. адрес возобновления текущей сопрограммы) выключается в стек и, наконец, содержимое регистра TEMP загружается в программный счетчик. Другими словами, эта команда осуществляет обмен содержимого вершины стека и программного счетчика, что эквивалентно передаче управления от одной сопрограммы другой. Необходимые действия по передаче параметров и временному запоминанию содержимого регистров процессора в сопрограммах выполняются так же, как в подпрограммах. Для правильной работы сопрограмм необходимо запомнить адрес возобновляемой сопрограммы в стеке той сопрограммы, которая начинает выполняться первой.

В микропроцессоре КР580 взаимодействие сопрограмм приходится реализовать с помощью интерфейсных подпрограмм. Ниже приведена такая подпрограмма TRF12, передающая управление от сопрограммы 1 сопрограмме 2. Для возобновления сопрограммы 2 выполняется команда CALL TRF12 с точкой входа интерфейсной подпрограммы. При этом адрес возобновления включается в стек сопрограммы I. Подпрограмма TRF12 запоминает в этом же стеке содержимое всех внутренних регистров микропроцессора. После этого содержимое SP сопрограммы 1 запоминается в ячейке с адресом STACK1 и в SP загружается указатель стека сопрограммы 2 из ячейки STACK2. Команды POP восстанавливают содержимое всех регистров микропроцессора, относящееся к сопрограмме 2. Заключительная команда RET передает управление сопрограмме 2 по адресу возобновления, ранее запомненному в ее стеке:



Метка TRF12I

Операнд

Комментарий

PUSH

Запоминание в стеке

PUSH

, сопрограммы 1 со-

PUSH

держимого всех ре-

PUSH

гистров

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

мого SP сопрограм-

SHLD

STACK!

мы I

LHLD

STACK2

Инициализация SP со-

SPHL

программы 2

Восстановление нз сте-

ка сопрограммы 2 со-

держимого всех ре-

гистров

Передача управления

сопрограмме 2

Последующее возобновление сопрограммы 1 осуществляется командой CALL TRF21 с точкой входа аналогичной интерфейсной подпрограммы, в которой изменены операнды только двух команд: SHLD STACK2 и LHLD STACKL

7-6. РАСПИСАНИЕ ПРОЦЕССОВ В МУЛЬТИПРОГРАММНЫХ ЭВМ

Значительное увеличение емкости и быстродействия памяти, а также быстродействия процессоров привели к реализации в ЭВМ мультипрограммного режима работы. В основной памяти одновременно находится несколь::о программ, из которых в любой момент времени в однопроцессорной ЭВМ выполняется одна, и предусматриваются средства переключения процессора с одной программы на другую. Основная цель мультипрограммирования заключается в том, чтобы разделить ресурсы системы между несколькими программами (пользователями) и повысить ее пропускную способность. Если, например, одна программа инициирует ввод-вывод и ожидает реакции сравнительно медленнодействующего устройства ввода-вывода, процессор переключается на другую программу. С мультипрограммированием связано значительное число проблем, среди которых отметим планирование выполнения программ, распределение и защиту основной памяти, обеспечение бесконфликтного ввода-вывода, управление обменом данными между основной и массовой памятью и др. Пока большинство этих проблем решается программ-



ными средствами, т.е. с помощью операционной системы, но со временем акцент будет сделан на аппаратную реализацию системных функций.

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

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

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

Задачи могут находиться в одном из трех состояний: вьшолнения, когда процессор выполняет задачу; готовности к выполнению при выделении времени процессора; приостановки (ожидания, блокировки), когда задача должна ожидать некоторого внешнего события или когда истек отведенный ей интервал Времени процессора.

Когда одна задача переходит в состояние ожидания, процессор переключается на выполнение другой задачи.

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



(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)