- •20 Билет
- •1)Установление связи
- •2) Передача данных
- •2.Системные вызовы
- •3.Примеры
- •2 Билет.
- •1.Управление процессами
- •2. Сигналы.
- •3 Билет
- •1.Обработка Сигнала
- •2) Группы процессов
- •3)Примеры
- •4 Билет
- •1)Посылка сигналов процессами
- •2)Межпроцессные комуникации
- •3)Примеры в качестве примера можно привести программу ,которая принимает сигналы о прерывании (sigint) и сама посылает их (в результате выполнения функции kill
- •5 Билет.
- •6 Билет.
- •7 Билет
- •1)Атомарные (неделимые) операции с каналами
- •2)Примечания к полудуплексным каналам
- •8 Билет
- •1)Именованные каналы (fifo: First In First Out): основные понятия
- •2)Операции с fifo
- •3) Примеры
- •9 Билет
- •1) Базовые понятия System V ipc
- •2) Идентификаторы ipc
- •10 Билет
- •11 Билет
- •1)Буфер сообщения
- •13 Билет
- •1)Системный вызов msgctl
- •2)Семафоры. Основные понятия
- •1)Системный вызов semget.
- •2) Системный вызов semop.
- •15 Билет
- •1) Системный вызов semctl
- •2) Разделяемая память. Основные понятия.
- •3) Примеры
- •16 Билет
- •1) Системный вызов shmget
- •2) Системный вызов shmctl
- •3) Примеры
- •17 Билет
- •Системный вызов shmat
- •Системный вызов shmdt
- •18 Билет
- •Системный вызов mmap
- •19 Билет
- •1) Создание сокета
- •2) Привязка к локальным именам
- •3) Примеры:
- •20 Билет
- •1)Установление связи
- •2) Передача данных
- •3) Примеры Установление связи
- •Передача данных
- •21 Билет
- •1. Закрытие сокетов.
- •22 Билет.
- •1) Алгоритмы
- •2) Оценки эффективности алгоритмов.
- •3) Примеры
- •23 Билет
- •1.Ядро операционной системы
- •2.Системные вызовы
- •3.Примеры
- •24 Билет.
- •25 Билет
- •1) Системный вызов semctl
- •2) Разделяемая память. Основные понятия.
- •3) Примеры
- •26 Билет
- •1) Группы процессов
- •2)Обработка Сигнала
- •3)Примеры
- •27 Билет
- •1) Создание сокета
- •2) Привязка к локальным именам
- •3) Примеры:
- •28 Билет.
- •29 Билет
- •1. Закрытие сокетов.
- •30 Билет
- •1)Установление связи
- •2) Передача данных
- •3) Примеры Установление связи
- •Передача данных
2 Билет.
1.Управление процессами
Каждая задача, или поток выполнения (thread), называется процессом. Контекст процесса состоит из адресного пространства, переменных окружения и состояния ядра, которое включает в себя алгоритм управления (scheduling), управление ресурсами и идентификационную информацию. Пользователь может создавать процессы, управлять ими, а также получить статус завершения. Каждому процессу ставится в соответствие уникальное значение, называемое идентификатором процесса (PID), которое используется ядром для идентификации процесса, когда пользователь осуществляет манипуляции с процессами посредством системных вызовов. Ядро создает процесс, дублируя контекст другого процесса. Новый процесс называется дочерним (child process), а исходный процесс родительским (parent process). Процесс может создать новый процесс как копию исходного при помощи системного вызова fork, возвращающего два значения: одно в родительском процессе, которое является значением идентификатора дочернего процесса, другое в дочернем процессе, где возвращаемое значение 0. Новый процесс наследует все ресурсы родительского процесса, такие как файловые дескрипторы, обработчики сигналов и образ памяти.
Однако новый процесс -это всего лишь копия родительского, и далее он будет работать независимо от него. Наиболее часто дочерний процесс применяют для запуска другой программы, используя для этого семейство системных вызовов exec.
Процесс может быть завершен системным вызовом exit, после завершения которого родительскому процессу будет послан 8-ми битный статус завершения. Если родительский процесс хочет получить больше информации от дочернего процесса или ему необходимо обмениваться с ним данными, то для этого он может использовать средства межпроцессных коммуникаций, Inter-Process Communication (IPC), речь о которых пойдет далее.
При помощи системного вызова wait, процесс может приостановить выполнение до тех пор, пока один из дочерних процессов не завершится. Вызов wait возвращает идентификатор завершившегося дочернего процесса (PID) и статус его завершения. Используя вызов wait4, родительский процесс может получить информацию по выбранному завершившемуся процессу, используя для выбора идентификатор дочернего процесса (PID). Если дочерний процесс завершился, но родительский не позвал wait, то дочерний процесс становится так называемым процессом-зомби до вызова
Wait или пока родительский процесс не завершится. Если родительский процесс завершился раньше дочернего, то все порожденные им процессы становятся потомками специального системного процесса init.Приоритет выполнения процессов задается специальным управляющим алгоритмом ядра.Пользователь может манипулировать приоритетом, задавая «вес» процессу (nice), используемый ядром для вычисления приоритета.
2. Сигналы.
Сигналы сообщают процессам о возникновении асинхронных событий. Посылка сигналов производится процессами друг другу с помощью функции kill или ядром. В версии V (вторая редакция) системы UNIX существуют 19 различных сигналов, которые можно классифицировать следующим образом:
•сигналы, посылаемые в случае завершения выполнения процес
са,т.е. тогда, когда процесс выполняет функцию exit или функцию signal с параметром «death of child» (гибель потомка);
•сигналы, посылаемые в случае возникновения вызываемых процессом особых ситуаций, таких как обращение к адресу, находящемуся за пределами виртуального адресного пространства процесса, или попытка записи в область памяти, открытую только для чтения(например, текст программы), или попытка выполнения привилегированной команды, а также различные аппаратные ошибки;
•сигналы, посылаемые во время выполнения системной функции
при возникновении неисправимых ошибок, таких как исчерпание
системных ресурсов во время выполнения функции exec
после освобождения исходного адресного пространства;
•сигналы, причиной которых служит возникновение во время выполнения системной функции совершенно неожиданных ошибок,таких как обращение к несуществующей системной функции (процесс передал номер системной функции, который не соответствует ни одной из имеющихся функций), запись в канал, не связанный ни с одним из процессов чтения, а также использование недопустимого значения в параметре «reference» системной функции lseek. Казалось бы, более логично в таких случаях вместо посылки сигнала возвращать код ошибки, однако с практической точки зрения для аварийного завершения процессов, в которых возникают подобные ошибки, более предпочтительным является именно использование
сигналов;
•сигналы, посылаемые процессу, который выполняется в режиме
задачи, например, сигнал тревоги (alarm), посылаемый по истечении определенного периода времени, или произвольные сигналы,которыми обмениваются процессы, использующие функцию kill;
•сигналы, связанные с терминальным взаимодействием, напри
мер,с «зависанием» терминала (когда сигнал-носитель на терминальной линии прекращается по любой причине), или с нажатием клавиш «break» и «delete» на клавиатуре терминала;
•сигналы, с помощью которых производится трассировка выполнения процесса. Условия применения сигналов каждой группы будут рассмотрены в этой и последующих главах.
