Монопольные приложения

Содержание

Слайд 2

4. Standalone приложения 2002 v.0.3 ОУ Печать УСО Пример Управление: Период

4. Standalone приложения 2002 v.0.3

ОУ

Печать

УСО

Пример

Управление:
Период = 1 s
WCET < 0.3 ms
Функции
Измерение
Принятие

решения
Вывод воздействия

Запрос на печать
Период = 180 s
WCET < 0,05 ms
Функции
Запуск печати:
ВыводНаПечать(Данное: X)

Слайд 3

4. Standalone приложения 2002 v.0.3 Прерывание “Внешняя среда” Пример (2) Возможная

4. Standalone приложения 2002 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

4. Standalone приложения 2002 v.0.3 Пример (3) Возможная реализация Предлагаемая реализация

4. Standalone приложения 2002 v.0.3

Пример (3) Возможная реализация

Предлагаемая реализация некорректна - вывод

на печать время от времени “зависает”
Необходимо более детальное рассмотрение работы системы
Слайд 5

4. Standalone приложения 2002 v.0.3 Пример (4) Работа печати Секция запуска

4. Standalone приложения 2002 v.0.3

Пример (4) Работа печати

Секция
запуска

Передача Xi

Прерывание

Возврат

Запрос на
печать

Драйвер печати

Буфер печати

Запрос:

ВыводНаПечать(Данное: X)
Секция запуска считывает Х в буфер вывода, пересылает порцию Х1 на устройство и возвращает управление
Программа и устройство работают параллельно
Устройство закончило печать Х1,и формирует запрос на прерывание
Обработчик прерывания драйвера пересылает Х2 на устройство
Возврат в точку прерывания
Программа и устройство работают параллельно
И так далее для Х2 Х3 Х4 ...

Программа

1

2

3

4

5

7

6

Слайд 6

4. Standalone приложения 2002 v.0.3 Пример (5) Работа печати Драйвер печати

4. Standalone приложения 2002 v.0.3

Пример (5) Работа печати

Драйвер печати

Управляющая программа

Секция запуска

3

Управление

4

5

1

2

2

1

2

6

6

6

3

7

7

8

Прерывания от

таймера
Прерывания печати
Часы
Секция запуска драйвера печати

Управление
Занятое ожидание while(true) do end
Обработка прерывания печати
Драйвер прерывается таймером (!)

Некорректно реализован возврат из процедуры обработки прерывания таймера (Управляющая программа). Вследствие этого зависает драйвер печати

5

6

Слайд 7

4. Standalone приложения 2002 v.0.3 Пример (5) Корректная реализация Прерывание “Внешняя

4. Standalone приложения 2002 v.0.3

Пример (5) Корректная реализация

Прерывание

“Внешняя среда”

Печать

Таймер

ОУ

Часы

Передача Xi

Возврат

Прерывание

Возврат

while(true)do
if flag_1 then

Управление;
flag_1:= false;
if flag_2 then
ВыводНаПечать(Данное: X);
flag_2:= false;
end;

Секция
запуска

Управляющая программа

Слайд 8

4. Standalone приложения 2002 v.0.3 Проблемы Критическая секция КС - участок

4. Standalone приложения 2002 v.0.3

Проблемы

Критическая секция
КС - участок программы, выполнение которого не

должено прерываться
Синхронизация
согласование во времени выполнения заданных участков программы
Слайд 9

4. Standalone приложения 2002 v.0.3 Критическая секция R:= A; R:= R+1;

4. Standalone приложения 2002 v.0.3

Критическая секция

R:= A;
R:= R+1;
A:= R;

R:= A;
R:= R+1;
A:= R;

Возврат

Прерывание

b

A

= 5; R = 5; R = 5; R = 6; A = 6; R = 7; A = 7;
A = 5; R = 5; R = 6; R = 5; R = 6; A = 6; A = 6;

Возможное средство:
маскировать прерывания (CLI …… STI). Однако, КС не должна быть длинной – увеличение latancy (В предыдущем примере недопустимо целиком маскировать обработку прерывания печати)

a

Слайд 10

4. Standalone приложения 2002 v.0.3 Синхронизация Работа с данным Ввод данного

4. Standalone приложения 2002 v.0.3

Синхронизация

Работа
с данным

Ввод
данного

Возврат

Прерывание

a

b

c

Идея:

Программа X

Программа Y

Программа X:

flag := false;
repeat

until flag;
Работа с данным;
flag := false;

Программа Y:

Ввод данного;
flag := true;

Возможное средство: механизм флагов

Слайд 11

4. Standalone приложения 2002 v.0.3 Механизм флагов - реализация class Flag

4. Standalone приложения 2002 v.0.3

Механизм флагов - реализация

class Flag {
boolean flag;
void setFlag(boolean

value){
установить_маску;
flag := value;
сбросить_маску;
}
boolean getFlag(){
return flag;
}
}

Флаги реализуются на системном (аппаратном) уровне и поддерживаются неделимыми примитивами доступа