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

33.Сигналы как средство взаимодействия процессов в ос unix. Диспозиция сигналов.

Сигнал - способ передачи уведомления о некотором произод событии между процессами, при котором нарушется нормальное вып процесса.

Кажд сигнал имеет уник симв имя и соотв ему номер. Имена стандартиз, а номера завис от архитектруры. Сигнал мб отправлен ядром или другим процессом.

#include <signal.h>

Int kill(pid_t, int sig);

Если пид >0 то это номер процесса, если =-1, то всем процессам.

Если Pid<-1, то посылает группе процессов. Если Pid=0, то посылает всем процессам своей группы , кроме себя.

UID=0 – суперпользователь, млгут отпр сигналы любым проц, а остальные – только процессам, принадл тому же пользователю.

SIGTERM – заверш проц( можно перехв или игнорир)

SIGTKILL(9) – заверш проц( нельзя игнорир)

CTRL-ALT-DEL –расс всем процесаама сначала TerM, а через 5 сек КИЛЛ, чтобы они успели привести дела в порядок.

SEGV(наруш защ пам),PPE (дел на 0) система рассылает процессам, кот вызвали прерывание. Эти сигналы уничт процесс с созд core файла (дамп памяти)

SIGSTOP (ctrl-z) Нельзя перехв и игнор.

SIGCONT – перехв можно

SIGCHILD – отпр родит проц при заверш дочерн процесса.

SIGALARM – будильник (отправитель ОС)

SIGUSR1,2 – можно программить, по умолч – заверш.

  1. Игнорирование

  2. Перехват – программная обработка функцией обработчтком.

  3. П умолчанию.

Измнение диспозиции сигнала с помошью Signal()

#include <signal.h>

Void (*signal(int sig,void(*disp)(int)) disp:

  1. SIG_IGN – игнор

  2. SIG_DFL – по умолч

  3. Собств функция-обработчик

Volatile static int i=0;

Const char message[]=””;

Void handler(int)

{signal (SIGINT,handler);

I++;

Write(1,meassage,sizeof(meassage-1))};

Int main()

{Signal(SIGINT,handler)

While(i<25);pause();return(0);

{signal(SIGINT,handler);

Signal(SIGUSR1,SIG_DFL);

Signal(SIGUSR2,SIG_IGN);}Имеем диспозиц 3х сигналов.

34.Ограничения для процесса в ос unix (по ресурсам). Связь со свойствами процесса.

Каждый процесс имеет огранич на ресурсы. Для получения инфы о текущем огранич и их изменении:

<sys/time.h> <sys/resurce.h>

Int getrlimit(int resource,struct rlimit*rep);

Int setrlimit( ) – изменение

Struct rlimit:

Rlim_t rlim_cur; soft текущее огранич

Rlim_t rlim_max; hard

Любой процесс может изменть от cur До max.

Ограничения установл при инициализ системы и наследуются процессом.

Обычный процесс может только уменьшать, а суперпользователь и увеличивать.

Hard можно увеличивать до бесконечности( RLIM_INFINITY)

  1. Планирование процессов. Обработка прерываний таймера; «будильники» (алармы).

Планирование процессов:

Обеспечение поочередного доступа процессов к одному процессору.

  1. Устанавливается задержка от 100 до 200 мс.

  2. Фоновое приложение – не требует вмешательства пользователя.

Важно минимизировать суммарное время выполнения в системе..

  1. Реального времени – нужны опред ограничения на время обработки кадра.

Задача – нах золотой середины( макс производительность)

Обработка прерываний таймера

Генерирует прерывания с интервалом 10мс (тик) HZ=100 – Опред в param.h

Обработчик прерываний ядра вызывается аппаратным прерыванием таймера, приоритет которого самый высокий. Обраб прерывания должна заним минимальное количество времени. Обработчики:

  1. Обновление статистики использования CPU для текущ процесса.

  2. Планировщик процессов (пересчет приоритета , проверка истчения временного кванта для процесса) Если превышена процессорная квота, то посыл сигнал SIGEXCPU

  3. Обновление системного времени, обработка отложенных вызовов, обработка будильников.

Часть задач раегирует только на главный тик (кажд 4 тика). Отложенный вызов – определяет функцию, вызов котрой будет произведен системой через некот время.

Int co_ID = timeout

(void(*fn)(); caddr_t arg адрес функции, long delta через дельта тиков);

Ядро ОС производит вызов функции fn в системном контексте (она не дожна нах в состоянии ожидания)

Обработка отложенного вызова запускается после обработки прер таймера.

Хранится в системной таблице отложенных вызовов( просмотр кажд тик)

Будильники:

Процесс может попросить ядро отправить сигнал SIGALRM себе через некотрое время.

Для установки таймера реального времени:

Int alarm( unsigned int seconds)

- Вернет 0 если не было заказа.

- Если был, то вернет количество секунд до посылки сигнала. Новый заказ отменит старый и установит свой.