- •Операционная система unix
- •Лабораторная работа № 1 введение в ос unix
- •1. Теоретические сведения
- •1.1. Общие положения
- •1.2. Регистрация в системе
- •2. Работа с файлами
- •2.1. Пользователи системы и владельцы файлов
- •2.2. Перенаправление потоков и программные каналы
- •3. Командный язык системы unix
- •3.2. Команды работы с каталогами
- •3.3. Команды работы с файлами
- •3.4. Команды работы с текстовыми файлами
- •3.5. Команды работы с процессами
- •4. Интерпретатор shell
- •Лабораторная работа № 2. Файловая система ос unix
- •1. Теоретические сведения
- •1.1. Структура файловой системы
- •1.2. Типы файлов
- •2. Управление файлами
- •3. Программирование операций ввода-вывода
- •4. Примеры программ работы с файлами
- •Лабораторная работа № 3. Процессы и сигналы ос unix
- •1. Теоретические сведения
- •1.1. Процессы ос unix
- •1.1.1. Выполнение процесса
- •1.1.2. Контекст процесса
- •1.2. Состояния процесса
- •1.3. Сигналы как средство взаимодействия процессов
- •1.3.1. Причины возникновения сигналов
- •1.3.2. Обработка сигналов
- •1.3.3. Группы процессов
- •2. Системные вызовы
- •2.1. Системные вызовы для работы с процессами
- •2.2. Системные вызовы для работы с сигналами
- •3. Примеры программ
- •1.2. Использование разделяемой памяти
- •1.3. Семафоры
- •1.3.1. Синхронизация процессов
- •1.3.2. Реализация семафоров
- •1.4. Общие замечания
- •2. Системные вызовы
- •2.1. Системные вызовы для работы с разделяемой памятью
- •2.2. Системные вызовы для работы с семафорами
- •3. Примеры программ работы с семафорами
- •Задания на лабораторную работу № 1
- •Задания на лабораторную работу № 2
- •Задания на лабораторную работу № 3
- •Задания на лабораторную работу № 4
1.3. Сигналы как средство взаимодействия процессов
Сигнал – это программное средство, с помощью которого может быть прервано функционирование процесса ОС UNIX. Сигналы сообщают процессам о возникновении асинхронных событий. Механизм сигналов позволяет процессам реагировать на различные события, которые могут происходить в ходе работы процесса внутри него самого или во внешней среде.
Сигналы описаны в файле <signal.h>, каждому из них ставится в соответствие мнемоническое обозначение. Количество и семантика сигналов зависят от версии ОС UNIX.
В версии System V сигналы имеют номера от 1 до 19:
#define NSIG 20
#define SIGHUP 1 /* разрыв связи */
#define SIGINT 2 /* прерывание */
#define SIGQUIT 3 /* аварийный выход */
#define SIGILL 4 /* неверная машинная инструкция */
#define SIGTRAP 5 /* прерывание-ловушка */
#define SIGIOT 6 /* прерывание ввода-вывода */
#define SIGEMT 7 /* программное прерывание EMT */
#define SIGFPE 8 /* авария при выполнении операции с */
/* плавающей точкой */
#define SIGKILL 9 /* уничтожение процесса */
#define SIGBUS 10 /* ошибка шины */
#define SIGSEGV 11 /* нарушение сегментации */
#define SIGSYS 12 /* ошибка выполнения системного вызова */
#define SIGPIPE 13 /* запись в канал есть, чтения нет */
#define SIGALRM 14 /* прерывание от таймера */
#define SIGTERM 15 /* программ. сигнал завершения от kill */
#define SIGUSR1 16 /* определяется пользователем */
#define SIGUSR2 17 /* определяется пользователем */
#define SIGCLD 18 /* процесс-потомок завершился */
#define SIGPWR 19 /* авария питания */
#define SIG_DFL (int(*)())0 /* все установки «по умолчанию» */
#define SIG_IGN (int(*)())1 /* игнорировать этот сигнал */
В версии BSD UNIX сигналы описываются следующим образом:
#define SIGHUP 1 /* разрыв связи */
#define SIGINT 2 /* прерывание */
#define SIGQUIT 3 /* аварийный выход */
#define SIGILL 4 /* неверная машинная инструкция */
#define SIGTRAP 5 /* прерывание-ловушка */
#define SIGIOT 6 /* прерывание ввода-вывода */
#define SIGABRT 6 /* используется как ABORT */
#define SIGEMT 7 /* программное прерывание EMT */
#define SIGFPE 8 /* авария при выполнении операции
с плавающей точкой */
#define SIGKILL 9 /* уничтожение процесса (не может быть
перехвачен или проигнорирован */
#define SIGBUS 10 /* ошибка шины */
#define SIGSEGV 11 /* нарушение сегментации */
#define SIGSYS 12 /* неправильный аргумент системного
вызова */
#define SIGPIPE 13 /* запись в канал есть, чтения нет */
#define SIGALRM 14 /* прерывание от таймера */
#define SIGTERM 15 /* программ. сигнал завершения от kill */
#define SIGUSR1 16 /* определяется пользователем */
#define SIGUSR2 17 /* определяется пользователем */
#define SIGCLD 18 /* изменение статуса потомка
(завершение процесса-потомка) */
#define SIGCHLD 18 /* альтернатива для SIGCLD (POSIX) */
#define SIGPWR 19 /* авария питания */
#define SIGWINCH 20 /* изменение размера окна */
#define SIGURG 21 /* urgent socket condition */
#define SIGPOLL 22 /* pollable event occured */
#define SIGIO SIGPOLL /* socket I/O possible (SIGPOLL alias) */
#define SIGSTOP 23 /* стоп (не может быть перехвачен или
проигнорирован */
#define SIGTSTP 24 /* требование остановки от терминала */
#define SIGCONT 25 /* остановить процесс с возможностью
продолжения */
#define SIGTTIN 26 /* скрытая попытка чтения с терминала */
#define SIGTTOU 27 /* скрытая попытка записи на терминал */
#define SIGVTALRM 28 /* виртуальное время истекло */
#define SIGPROF 29 /* время конфигурирования истекло */
#define SIGXCPU 30 /* превышен лимит ЦП */
#define SIGXFSZ 31 /* превышен лимит размера файла */
#define SIGWAITING 32 /* process's lwps заблокирован */
#define SIGLWP 33 /* спецсигнал (used by thread library) */
#define SIGFREEZE 34 /* спецсигнал, используемый процессором*/
#define SIGTHAW 35 /* спецсигнал, используемый процессором*/
#define _SIGRTMIN 36 /* первый (с высшим приоритетом)
сигнал реального времени */
#define _SIGRTMAX 43 /* последний (с низшим приоритетом)
сигнал реального времени */
#define SIG_DFL (void(*)())0 /* все установки «по умолчанию» */
#define SIG_IGN (void(*)())0 /* игнорировать этот сигнал */
Примечание: причины возникновения сигналов для различных версий могут отличаться; первоначально они были обусловлены архитектурными особенностями ЭВМ PDP-11.