Главная страница
Навигация по странице:

  • Листинг Sig-RT.c

  • К о н т р о л ь н ы е в о п р о с ы д л я с а м о п р о в е р к и

  • ИУС_Архитектура и разработка_IoTиОблако. 87 Интернет вещей и облачные технологии Интернет вещей и облачные технологии


    Скачать 2.23 Mb.
    Название87 Интернет вещей и облачные технологии Интернет вещей и облачные технологии
    Дата26.06.2022
    Размер2.23 Mb.
    Формат файлаpdf
    Имя файлаИУС_Архитектура и разработка_IoTиОблако.pdf
    ТипДокументы
    #616158
    страница4 из 4
    1   2   3   4
    sigaction (int signum, const struct sigaction *act, struct sigaction *oldact);
    В параметрах указывается номер сигнала, задаваемые в структуре типа sigaction действия по обработке сигнала, адрес аналогичной струк‑
    туры, в которой сохраняются предыдущие действия по его обработке.
    Структура типа sigaction теперь несколько изменена:
    struct sigaction { void (*sa_handler) (int);
    void (*sa_sigaction) (int, siginfo_t *, void *);
    sigset_t sa_mask;
    int sa_flags;
    void (*sa_restorer) (void);
    };
    Она имеет дополнительное поле sa_sigaction, в котором зада‑
    ется обработчик сигнала реального времени. Если мы его использу‑
    ем, необходимо задать опцию (sa_flags) SA_SIGINFO. Прототип об‑
    работчика выглядит следующим образом:
    void handler (int sig, siginfo_t *info, void *ucontext)
    {…} где sig — номер сигнала;
    info — указатель на структуру siginfo_t;
    ucontext — указатель на структуру типа ucontext_t, содержащую ин‑
    формацию из сохраненного контекста процесса.
    Первый параметр содержит номер сигнала, получение которого послужило причиной вызова обработчика. Второй параметр указы‑
    вает на структуру, в которую записывается детальная информация о сигнале:
    typedef struct { int si_signo;/* Signal number */ int si_code;/* Signal code */ sigval_t si_value;/* Signal value */

    } siginfo_t;
    Здесь поле si_code содержит условный код, определяющий меха‑
    низм генерации сигнала. Например, это может быть:
    SI_USER — сигнал сгенерирован функцией kill ();
    SI_KERNEL — сигнал сгенерирован ядром ОС;
    SI_QUEUE — сигнал сгенерирован функцией sigqueue ().

    126
    Раздел Б. Разработка информационно-управляющих систем
    Поле si_value содержит значение, передаваемое с сигналом. Оно имеет следующий тип:
    union sigval { int sival_int;
    void *sival_ptr;
    };
    Обычно используется sival_int — целое 32‑битное значение.
    Отправка сигнала в очередь осуществляется по следующей функции:
    i nt sigqueue (pid_t pid, int sig, const union sigval value);
    где pid определяет процесс, которому передается сигнал;
    sig — номер сигнала;
    value — значение сигнала.
    Первые два параметра соответствуют параметрам системного вы‑
    зова kill (). Дополнительный, третий, параметр позволяет задать зна‑
    чение, передаваемое с сигналом.
    Приведем пример программы, иллюстрирующей передачу и прием сигналов реального времени:
    Листинг Sig-RT.c
    #include
    #include
    #include
    #include static void handler (int signo, siginfo_t* info, void* context)
    { printf (“Received signal %d, code %d, val %d\n”, signo, info->si_code, info->si_value.sival_int);
    } int main (int argc, char *argv [])
    { printf (“SIGRTMAX= %d, SIGRTMIN= %d\n”, SIGRTMAX,
    SIGRTMIN);
    int opt, val, beg=SIGRTMAX, num=3, fin=SIGRTMAX-num, seg=3;
    int i, j;
    while ((opt=getopt (argc, argv,”b: e: n:”))!=-1) {

    127 5. Системы реального времени switch (opt) { case ‘b’:
    if (sscanf (optarg,” %d”,&val)!=1) { perror (“Parse”); exit (EXIT_FAILURE);
    } beg=val;
    break;
    case ‘e’:
    if (sscanf (optarg,” %d”,&val)!=1) { perror (“Parse”); exit (EXIT_FAILURE);
    } fin=val;
    break;
    case ‘n’:
    if (sscanf (optarg,” %d”,&val)!=1) { perror (“Parse”); exit (EXIT_FAILURE);
    } seg=val;
    break;
    default: exit (EXIT_FAILURE);
    }} num=fin-beg;
    fin+=num>0?1:-1;
    sigset_t sigset;
    sigemptyset (&sigset);
    for (i=beg; i!=fin; i+= (num>0?1:-1)) sigaddset (&sigset, i);
    pid_t pid;
    if ((pid=fork ())==0) {
    //Child Process sigprocmask (SIG_BLOCK,&sigset, NULL);
    for (i=beg; i!=fin; i+= (num>0?1:-1)){ struct sigaction act, oact;
    sigemptyset (&act.sa_mask);
    act.sa_sigaction=handler;
    act.sa_flags=SA_SIGINFO;
    if (sigaction (i,&act, NULL)<0) perror (“set handler”);
    }

    128
    Раздел Б. Разработка информационно-управляющих систем printf (“Child: signal mask set\n”);
    sleep (3);
    printf (“Child: signal unblock\n”);
    sigprocmask (SIG_UNBLOCK,&sigset, NULL);
    sleep (3);
    exit (EXIT_SUCCESS);
    }
    //Parent process sigprocmask (SIG_BLOCK,&sigset, NULL);
    sleep (1);
    union sigval value;
    for (i=beg; i!=fin; i+= (num>0?1:-1)) { for (j=0; jsigqueue (pid, i, value);
    printf (“Signal sent: %d, val= %d\n”, i, j);
    }
    } printf (“Parent finished!\n”);
    exit (EXIT_SUCCESS);
    }
    В программе создается новый процесс, которому родительский про‑
    цесс передает группы сигналов реального времени. С помощью опций
    -b и -e задаются начальный и конечный номера сигналов, а с помо‑
    щью опции -n задается количество сигналов в группе. Передаваемое значение соответствует номеру сигнала в группе. В программном коде показан порядок доставки, а также отсутствие объединения сигналов и передача с ними информации.
    К о н т р о л ь н ы е в о п р о с ы д л я с а м о п р о в е р к и
    1.
    Что такое POSIX‑совместимая ОС? Приведите примеры.
    2.
    Как определяется выбор ОС для решения задач автоматизации?
    3.
    Сравните две POSIX‑совместимые ОС РВ QNX и VxWorks. Ука‑
    жите их преимущества и недостатки. В чем проигрывает ОС РВ QNX

    129
    Контрольные вопросы для самопроверки операционной системе VxWorks? По каким характеристикам ОС РВ
    QNX выигрывает у операционной системы РВ VxWorks?
    4.
    Каким образом происходит развитие слияния универсальных OC и ОС реального времени?
    5.
    Укажите особенности дистрибутивов Linux, поддерживающих расширения реального времени.
    6.
    Приведите пример прикладного модуля, использующего ядро ре‑
    ального времени RTLinux в виде загружаемого модуля Linux.
    7.
    Что такое виртуальная Java‑машина?
    8.
    Какие функции реализованы в виртуальной Java‑машине для полноценной поддержки систем реального времени?
    9.
    Требуются ли ОС РВ для управления в реальном времени груп‑
    пировками устройств с использованием IoT, IIoT или IoBT? Могут ли быть с этой целью использованы ОС РВ QNX и VxWorks?
    10.
    Что такое ОС РВ МАКС? Какие задачи она выполняет? В чем состоит концепция указанного проекта?
    11.
    В чем сущность процесса стандартизации ОС РВ? Какое вли‑
    яние оказывает этот процесс на развитие технологий автоматизиро‑
    ванных систем управления производством?
    12.
    Что такое реактивность операционной системы реального вре‑
    мени? Как рассчитать максимальную величину временного интерва‑
    ла задержки прерывания?
    13.
    Что такое инверсия приоритетов? Как инверсия приоритетов влияет на предсказуемость поведения ОС?
    14.
    Что такое наследование приоритетов? В каких целях оно ис‑
    пользуется?
    15.
    Какая нежелательная ситуация может взникнуть при использо‑
    вании примитивов синхронизации процессов и потоков?
    16.
    Какие задачи выполняет микроядерная архитектура ядра? Опи‑
    шите проблемы использования микроядерной архитектуры.
    17.
    Что такое профили прикладных контекстов реального времени?
    18.
    Укажите особенности использования универсальных ОС в ка‑
    честве ОС РВ.
    19.
    Назовите алгоритмы диспетчеризации, используемые в универ‑
    сальных ОС и ОС РВ.
    20.
    Приведите пример программы, позволяющей исследовать за‑
    висимость кванта времени от базового приоритета, приоритета реаль‑
    ного времени и дисциплины диспетчеризации.
    1   2   3   4


    написать администратору сайта