- •4. Монопольные (Standalone) приложения
- •Пример
- •Пример (2) Возможная реализация
- •Пример (3) Возможная реализация
- •Пример (4) Работа печати
- •Пример (5) Работа печати
- •Пример (5) Корректная реализация
- •Проблемы
- •Критическая секция
- •Синхронизация
- •Механизм флагов - реализация
- •Особенности Standalone приложений
4. Монопольные (Standalone) приложения
Standalone приложение:
•монопольно используюет ресурсы целевой платформы;
•поддерживается платформо-ориентированной (native) библиотекой драйверов устройств (драйвер осуществляет управление устройством, реализует процедуры ввода/вывода);
Библиотека |
|
Standalone приложение |
драйверов |
|
|
|
|
|
|
|
|
Целевая платформа |
||
|
|
|
•может включать в себя самостоятельные процедуры обработки прерываний и действия по вводу/выводу;
•сильно зависит от платформы
4. Standalone приложения |
2002 |
1 |
v.0.3 |
|
|
Пример
Таймер
Управление
|
УСО |
Запрос на печать |
|
|
|
ОУ |
|
Печать |
Управление:
Период = 1 s |
|
WCET < 0.3 ms |
|
Функции |
|
• |
Измерение |
• |
Принятие решения |
• |
Вывод воздействия |
Запрос на печать
Период = 180 sWCET < 0,05 msФункции
Запуск печати:
ВыводНаПечать(Данное: X)
4. Standalone приложения |
2002 |
2 |
v.0.3 |
|
|
Пример (2) Возможная реализация
|
Таймер |
|
|
Прерывание |
Таймер: |
|||||
|
|
|
Запрос на прерывание каждую секунду |
|||||||
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Часы; |
|
|
|
|
||
|
|
|
|
|
|
Управляющая программа |
|
|||
|
|
|
|
if flag_1 then |
|
|
||||
|
|
|
|
|
|
|
||||
|
|
|
|
|
Управление; |
|
|
|||
|
|
|
|
|
flag_1:= false; |
|
|
|||
|
|
|
|
if flag_2 then |
|
|
||||
“Внешняя |
|
|
ВыводНаПечать(X); |
|||||||
|
|
flag_2:= false; |
|
|
||||||
|
среда” |
|
|
|
|
|||||
|
|
while(true)do end; |
|
|
||||||
|
|
|
|
|
|
|
Часы: |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
Часы |
|
реализует два счетчика, значения которых |
||||
|
|
|
|
|
увеличиваются на 1 при каждом |
|||||
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
||||
|
ОУ |
|
|
|
|
обращении; когда |
||||
|
|
Управление |
|
|||||||
|
|
|
счетчик_1 = 1 flag_1:= true |
|||||||
|
|
|
|
|
|
|
счетчик_2 = 180 flag_2:= true |
|||
|
Печать |
|
|
Драйвер |
|
|||||
|
|
|
|
Драйвер печати: |
||||||
|
|
|
|
печати |
|
|||||
|
|
|
|
|
|
|
Библиотечная программа |
|||
|
|
|
|
|
|
|
4. Standalone приложения |
2002 |
3 |
v.0.3 |
|
|
Пример (3) Возможная реализация
Предлагаемая реализация некорректна - вывод на печать время от времени “зависает”
Необходимо более детальное рассмотрение работы системы
4. Standalone приложения |
2002 |
4 |
v.0.3 |
|
|
Пример (4) Работа печати
Буфер печати X1 |
X2 |
Xn |
|
|
|
Программа |
|
|
|
1. |
Запрос: ВыводНаПечать(Данное: |
Запрос на |
1 |
|
Драйвер |
|
X) |
|
2. |
Секция запуска считывает Х в буфер |
|||
печать |
|
|
печати |
||
|
|
2 |
Секция |
|
вывода, пересылает порцию Х1 на |
|
|
|
устройство и возвращает управление |
||
|
|
|
запуска |
|
|
3 |
4 |
Прерывание |
3. |
Программа и устройство работают |
|
|
параллельно |
||||
|
|
|
|
|
|
|
|
|
Передача Xi |
4. |
Устройство закончило печать Х1,и |
|
|
5 |
|
|
формирует запрос на прерывание |
7 |
6 |
|
Возврат |
5. |
Обработчик прерывания драйвера |
|
|
|
пересылает Х2 на устройство |
||
|
|
|
|
6. |
Возврат в точку прерывания |
|
|
|
|
7. |
Программа и устройство работают |
|
|
|
|
|
параллельно |
8. И так далее для Х2 Х3 Х4 ...
4. Standalone приложения 2002 5 v.0.3
Пример (5) Работа печати
Управляющая программа
Секция запуска
Управление
1 |
2 |
2 |
2 |
1 |
|
3 |
6 |
6 |
6 |
3 |
6 |
4
5 |
5 |
Драйвер печати
1.Прерывания от таймера
2.Прерывания печати
3.Часы
7 |
7 |
8 |
5.Управление
6.Занятое ожидание while(true) do end
7.Обработка прерывания печати
4.Секция запуска драйвера печати 8. Драйвер прерывается таймером (!)
Некорректно реализован возврат из процедуры обработки прерывания таймера (Управляющая программа). Вследствие этого зависает драйвер печати
4. Standalone приложения |
2002 |
6 |
v.0.3 |
|
|
Пример (5) Корректная реализация
Таймер |
Прерывание |
|
Часы |
“Внешняя |
Возврат |
среда” |
|
|
Секция |
|
запуска |
|
Прерывание |
Печать |
Передача Xi |
|
Возврат |
Управляющая программа
while(true)do
if flag_1 then Управление; flag_1:= false;
if flag_2 then ВыводНаПечать(Данное:
X);
flag_2:= false;
end;
ОУ |
Управление |
4. Standalone приложения |
2002 |
7 |
v.0.3 |
|
|
Проблемы
Критическая секция
КС - участок программы, выполнение которого не должено прерываться
Синхронизация
согласование во времени выполнения заданных участков программы
4. Standalone приложения |
2002 |
8 |
v.0.3 |
|
|
Критическая секция
|
|
Прерывание |
a |
R:= A; |
R:= A; |
b |
R:= R+1; |
R:= R+1; |
|
A:= R; |
A:= R; |
|
|
Возврат |
a) |
A = 5; |
R = 5; R = 5; R = 6; A = 6; R = 7; A = 7; |
b) |
A = 5; |
R = 5; R = 6; R = 5; R = 6; A = 6; A = 6; |
Возможное средство:
маскировать прерывания (CLI …… STI). Однако, КС не должна быть длинной – увеличение latancy (В предыдущем примере недопустимо целиком маскировать обработку прерывания печати)
4. Standalone приложения |
2002 |
9 |
v.0.3 |
|
|
Синхронизация
Программа X |
Программа Y |
a |
Прерывание |
|
b |
Работа |
Ввод |
c |
с данным |
данного |
|
|
|
|
|
Возврат |
Возможное средство: механизм флагов
Идея: |
Программа X: |
|
flag := false; |
|
repeat until flag; |
|
Работа с данным; |
|
flag := false; |
Программа Y:
Ввод данного; flag := true;
4. Standalone приложения |
2002 |
10 |
v.0.3 |
|
|