Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1 / T1 Допустимое время выполнения, нарушение deadline

.docx
Скачиваний:
0
Добавлен:
09.11.2025
Размер:
28.04 Кб
Скачать

Задание1. Допустимое время выполнения, нарушение deadline.

Предполагается, что некоторая система управления периодически измеряет состояние объекта , выполняет действия по принятию решения и формируют управляющие воздействия.

Все эти действия реализуются некоторой функцией doControl(), вызываемую в цикле с заданным периодом - period:

While(true) {

doControl();

waitMoment(period) ;

}

Функция waitMoment выполняет временную задержку, обеспечивающую период вызова doControl . ( В данном задании следует реализовать как nanosleep с величиной задержки period.)

Требуется реализовать модель подобной системы, обеспечив перечисленные ниже условия.

  1. Предполагается, что расчетное время работы функции doControl() составляет 0.5 секунды и может увеличиваться в результате воздействия случайных факторов. Допустимое превышение времени выполнения («мягкий дедлайн» - soft_dt) не должно составлять более 4% расчетного времени.

  1. Предполагается, что в результате неисправности исполнительного оборудования функция управления может «зависнуть» дольше, чем на 1с. Произойдет нарушение «жесткого» ограничения по времени - hard_dt = 1с,

Для выполнения условий 1 и 2 модель функция doControl() представляется следующим образом:

Void doControl() {

int tp = 500000; // номинальное время работы в мкс

int dt=0, x=1;

t = tp + dt; // dt – случайное число, требуется обеспечить

if(x == 0) while(1); // x случайное число, исходное значение x=1;

// в случайный момент времени принимает

// значение 0 – имитация «зависания» системы

usleep(t);

}

  1. На каждом цикле работы модели измеряется время выполнения функции doControl() - tr, значение которого выводится в консоль.

Значение tr сравнивается с soft_dt ограничением. В случае, если tr > soft_dt, то такому событию присваивается номер в виде целого числа N и формируется сигнал реального времени SIGRTMIN (вызов sigqueue(…)) с передачей этого номера в обработчик данного сигнала.

Случай «зависания» doControl контролируется посредством таймаута с помощью функции alarm(). Обработчик таймаута выводит сообщение и вызывает сигнал SIGUSR1, завершающий работу модели.

Int ret;

struct timespec tp, dtp;

While(true) { // цикл работы модели

. . . // сброс timeout - alarm(0)

. . . // установка timeout - alarm(hard_dt)

. . . // определение времени начала работы функции

doControl();

. . . // определении времени окончания работы функции

. . . // вывод в консоль значения tr;

. . . // проверка нарушения soft_dt;

. . . // при нарушении посылается сигнал SIGRTMIN;

ret = nanosleep(&tp, &dtp)

if(ret == EINTR){

// задержка была прервана сигналом,

// выполнить дополнительную задержку на время dtp;

}

}

softdeadlineHandler() { // обработчик согнала SIGRTMIN

// вывод сообщения о нарушении «мягкого» дедлайна

}

alarmHandler(){

// вывод сообщения о «зависании системы»

// послать сигнал SIGUSR1, завершение работы

Форматы выводимых сообщений:

А) Значение tr (выводится каждый цикл работы модели c точностью мкс):

### Фактическое время работы <значение > ###

Б) Сообщения о нарушении «мягкого» дедлайна (выводится из softdeadlineHandler())

! «»» Нарушение soft deadline N <номер> «»» !

В) Сообщение о «зависании системы» (выводится из обработчика alarmHandler)

!!!! Аварийная ситуация !!!!

Справочные материалы:

  1. Цилюрик О., Горшко Е. Анатомия параллелизма QNX/UNIX

  2. Сидельников В.В. Широков В.В. «Реальное время в операционных системах».

  3. Сигналы группы сеансы Сигналы, группы, сеансы

https://parallel.uran.ru/book/export/html/399?ysclid=m6anjhge4k94285595

Соседние файлы в папке 1