
- •Операційні системи
- •1.Принципи побудови ос. Теоретичні основи процесу
- •2. Властивості та класифікація процесів. Життєвий цикл процесу.
- •Арі процесів. Функція fork. Функція exit.
- •Сигнали. Функція wait, waitpid. Функція exec.
- •Ресурси ос. Визначення ресурсу. Властивості та класифікація ресурсів.
- •Концепція віртуалізації. Віртуальна машина.
- •Дисципліни розподілу ресурсів які використовуються в ос.
- •Концепція переривань Теорія переривань
- •Блокування. Сигнали. Сигнальна маска. Функція sigaction.
- •Процеси-демони. Поняття про демони. Основні демони unix. Приклад програми демону
- •Засоби, механізми і підсистеми ос. Системи керування процесами. Дворівнева система керування процесами.
- •Засоби, механізми і підсистеми ос. Рівень довгострокового планування. Схема довгострокового рівня планування.
- •Засоби, механізми і підсистеми ос. Рівень короткострокового планування. Схема рівня планування.
- •Структури даних процесів. Стан процесів у unix. Особливості планувальника unix ( Linux).
- •Дескриптори процесів.
- •Взаємодія між процесами у unix.
- •Канали. Fifo (First InFirst Out). Повідомлення (черги повідомлень).
- •Семафори. Задачі синхронізації.
- •Архітектура та основні питання побудови механізмів синхронізації
- •Семафорна техніка синхронізації та упорядкування процесів.
- •Підсистема введення/виведення системи unix. Драйвери пристроїв. Типи драйверів. Базова архітектура драйверів
- •Файлова підсистема ос. Суперблок. Індексні дескриптори. Імена файлів. Каталоги.
- •Побудова підсистем ядра мультипрограмних ос. Організація віртуальної оп. Основні поняття та принципи віртуалізації пам’яті.
- •Принципи керування пам’яттю у unix. Віртуальна та фізична пам’ять. Сегменти. Сторінковий механізм.
- •Адресний простір процесів. Керування пам’яттю процесу.
- •Планування виконання процесі. Обробка переривань таймеру. Відкладений виклик. Аларми. Контекст процесу.
- •Архітектура віртуальної фс. Віртуальні індексні дескриптори. Монтування фс.
- •Архітектура віртуальної фс. Трансляції імен. Доступ до фс. Файлова таблиця.
- •Архітектура віртуальної фс. Блокування доступу до файлу.
Блокування. Сигнали. Сигнальна маска. Функція sigaction.
Сигнали в UNIX, Unix-подібних і інших POSIX-сумісних операційних системах є одним із способів взаємодії між процесами (англ. IPC, inter-process communication). Фактично, сигнал - це асинхронне повідомлення процесу про будь-яку подію. Коли сигнал посланий процесу, операційна система перериває виконання процесу. Якщо процес встановив власний обробник сигналу, операційна система запускає цей обробник, передавши йому інформацію про сигнал. Якщо процес не встановив обробник, то виконується обробник за умовчанням.
Назви сигналів «SIG ...» є числовими константами (макровизначень Сі) зі значеннями, обумовленими в заголовному файлі signal.h. Числові значення сигналів можуть змінюватися від системи до системи, хоча основна їх частина має в різних системах одні й ті ж значення. Утиліта kill дозволяє задавати сигнал як числом, так і символьним позначенням.
Сигнальна маска - об'єкт типу sigset_t, вміст якого представляє собою бітову маску сигналів, підтримуваних даною реалізацією. У SVR4 це масив з 4 unsigned long. Бібліотечні функції (sigsetops (3C)) використовуються для маніпуляції з окремими бітами в копії маски sigset_t, що належить користувача програмі. Використання нових системних викликів зазвичай включає в себе створення копії маски, установку маски так, щоб вона відображала сигнали, які повинні бути блоковані або розблоковані, і виклик відповідної системної функції зміни сигнальної маски ядра.
Руководство по sigsetops(2) содержит функции для манипуляций с объектами типа sigset_t.
sigemptyset(3C)
Инициализирует маску сигналов, на которое указывает параметр set так, чтобы исключить все сигналы, определенные в системе.
sigfillset(3C)
Инициализирует маску сигналов, на которое указывает параметр set так, чтобы включить все сигналы, определенные в системе.
sigaddset(3C)
Добавляет индивидуальный сигнал, заданный значением signo, к маске, на которую указывает set.
sigdelset(3C)
Удаляет индивидуальный сигнал, заданный значением signo, из маски, на которую указывает set.
sigismember(3C)
Проверяет, установлен ли сигнал, заданный значением signo, в маске, на которую указывает set.
Замечание: Объект типа sigset_t должен быть инициализирован вызовом sigfillset или sigemptyset до того, как применять к нему любые другие
операции.
Функция sigaction
Інтерфейс прикладного програмування sigaction замінює API signal в останніх версіях ОС UNIX і POSIX. 1. Подібно API signal, він викликається процесом для завдання методу обробки кожного сигналу, з яким збирається працювати. Обидва інтерфейсу прикладного програмування повертають покажчик на предьщущем метод обробки даного сигналу. Крім того, API sigaction дозволяє визначити додаткові сигнали, які також будуть блокуватися при обробці сигналу signalnum
Прототип API sigaction выглядит таким образом:
#include <signal.h>
int sigaction ( int signal num, struct sigaction* action,
struct sigaction* old action);
Тип данных struct sigaction определяется в заголовке <signal.h>:
struct sigaction
f void (*sa handler) (int) ;
sigset t sa mas)c; int sa flag;
Поле sajtandler відповідає другому аргументу функції signal. У нього може бути занесено значення SIGIGN, SIG DFL або визначена користувачем функція-обробник сигналу. Поле samask поряд з сигналами, зазначеними в даний момент в сигнальної масці процесу, і сигналом signaljtum задає додаткові сигнали, які процес блокуватиме при обробці сигналу signal піт.
Аргумент signaljtum показує, яку дію з обробки сигналу визначено в аргументі action. Предьщущем метод обробки сигналу для signaljtum буде повернений допомогою аргументу old action, якщо це не NULL-вказівник. Якщо аргумент action є NULL-покажчиком, то метод обробки сигналу викликає процесу для sifftaljtum залишиться колишнім.
В приведенной ниже программе 5gflc on. С показан пример использования функции sigaction:
♦include <iostream.h> ♦include <stdio.h> ♦include <unistd.h> ♦include <signal.h>
void callmeO {
cout catch signal endl;
int mainO (
sigset t sigmaslc; struct sigaction action, old action; sigemptyset (&sigmaslc) ;
if (sigaddset( &sigmaslc, SIGTERM) ==-1 II
sigprocmas)c (SIG SETMASK, &sigmas)c, 0)==-l) perror( set signal mas)? ); sigemptyset (&action . sa mas)c) ; sigaddset (Saction. sa maslc, SIGSEGV) ; ♦ifdef SOLARIS 25
action.sa handler => (void (*)(int))callme;
♦else
action. sa handler = callme; ♦endif
action. sa f lags *= 0; if (sigaction(SIGILL,&action,&old action)==-1)
perror( sigaction ); pause 0; /* ожидать прерывания сигналом */
return 0;
У цьому прикладі сигнальна маска процесу містить сигнал SIGTERM. Потім процесом визначається обробник для сигналу SIGINT. Вказується, що сигнал SIGSEGV повинен бути блокований при обробці процесом сигналу SIGINT. Потім процес призупиняє своє виконання за допомогою API pause
int sighold ( int signal num );
int sigrelse ( int signal num );
int sigignore ( int signal num );
int sigpause ( int signal num );
Пробное выполнение профаммы дает такой результат:
% СС sigaction.с -о sigaction % sigaction [1] 495
% kill -INT 495 catch signal
[1] Interrupt sigaction
Якщо в процесі генерується сигнал SIGINT, те ядро спочатку встановлює сигнальну маску процесу на блокування сигналів SIGTERM, SIGINT і SIGSEGV. Потім воно налаштовує процес на виконання функції-обробника сигналу callme. Коли функція callme повертає результат, сигнальна маска процесу відновлюється і містить тільки сигнал SIGTERM, а процес продовжує перехоплювати сигнал SIGILL.
Поле sa Jlag в структурі struct sigaction використовується для завдання спеціальних методів обробки певних сигналів. У стандарті POSIX.l встановлено тільки два значення цього поля: О або SA NOCHLDSTOP. Прапор NOCHLDSTOP - це ціле число, визначене в заголовку <signal.h>. Даний прапор може використовуватися, коли аргумент signai num має значення SIGCHLD. Дія прапора SA NOCHLDSTOP полягає в тому, що ядро посилає сигнал SIGCHLD в процес тоді, коли породжений ним процес заверщен, а не тоді, коли він зупинений. З іншого боку, якщо значення sa Jlagb виклику sigaction одно О, те ядро посилає сигнал SIGCHLD в викликає процес незалежно від того, заверщен породжений процес або зупинений.
В ОС UNIX System V.4 визначені додаткові прапори для поля saструктури struct sigaction. Ці прапори можуть використовуватися для вказівки методу обробки сигналу в стилі UNIX System V.3.
Значення sa ag Вплив на обробку аргументу signal num
SA RESETHAND Якщо signal num перехоплений, то sa handler встановлюється в SIGDFL до того, як викликається функція обробника сигналу, і signalnum не додавайте в сигнальну маску. процесу при виконанні функції-обробника сигналу
SA RESTART
Якщо сигнал перехоплений, коли процес виконує системний виклик, ядро перезапускає даний виклик після повернення з функції-обробника сигналу. Якщо цей прапор у sa Jlag не встановлений, то після повернення з обробника сигналу системний виклик переривається, повертається значення -1 і змінної егто присвоюється значення EINTR