ОС.ppt
- Количество слайдов: 24
4. 3 Межпроцессное взаимодействие 1
Механизмы взаимодействия Полная изоляция процессов в операционной системе бессмысленна, так как им часто необходимо обмениваться данными в процессе работы. Поэтому одна из важнейших задач операционной системы — обеспечивать контролируемые взаимодействия процессов, в том числе за счет возможности разделения одного сегмента памяти между виртуальной памятью нескольких процессов. Для решения задачи межпроцессного взаимодействия в операционной системе UNIX существует набор специальных средств: - потоки ввода-вывода, - переменные окружения, - каналы и сокеты, - разделяемая память - сигналы. 2
Разделяемая память Самый простой способ «обойти» разделение виртуальных пространств процессов — использование разделяемой памяти. Это специальный механизм, с помощью которого средствами операционной системы два процесса могут обращаться к общему участку физической памяти — каждый через свое адресное пространство. Однако для пользователя такой способ межпроцессного взаимодействия является труднодоступным. Во-первых, программы, взаимодействующие таким образом, должны изначально содержать соответствующий код — с помощью специальных системных вызовов обе программы должны обозначить участки своих адресных пространств, предназначенные для обмена информацией. Другая сложность состоит в том, что разделяемая память сама по себе не содержит средств синхронизации, программы должны согласованно изменять общий участок памяти, чтобы не испортить данные; обычно для этих целей применяются семафоры и аналогичные механизмы синхронизации. 3
Разделяемая память — наиболее быстрый способ обмена, но при этом малопригодный для широкого использования. Обычная сфера применения разделяемой памяти — специализированные высокопроизводительные программы. 4
Переменные окружения В UNIX дочерний процесс создаётся как точная копия родительского, поэтому его окружение — также точная копия родительского. Если про дочерний процесс известно, что он использует значения некоторых переменных из числа передаваемых ему с окружением, родительский может заранее указать, каким из копируемых в окружении переменных нужно изменить значение. 5
Переменные окружения — очень ограниченное средство межпроцессного взаимодействия. Во-первых, действие их односторонне, так как дочерний процесс не может изменить окружение родительского процесса. Более того, родительский процесс никак не может воспользоваться информацией из окружения дочернего. Во-вторых, окружение уже запущенного процесса изменить извне нельзя. В-третьих, через переменные окружения можно передавать только текстовые данные, обычно небольшого объёма. Поэтому переменные окружения используются в основном для задания условий запуска программы: положение конфигурационных файлов, требуемые параметры интефейса и аналогичные простые параметры. 6
Межпроцессное взаимодействие Сигналы являются способом передачи от одного процесса другому или от ядра операционной системы какому-либо процессу уведомления о возникновении определенного события. kill sig_no pid где sig_no — номер или символическое название сигнала, pid — идентификатор процесса, которому посылается сигнал. 7
Сигналы — одно из традиционных средств межпроцессного взаимодействия в UNIX. Сигнал может быть отправлен процессу операционной системой или другим процессом. SIGALRM (14) --- процесс может с помощью специального системного вызова abort задать время, через которое ему необходимо отправить сигнал. SIGCHLD --- сигнал отправляется родительскому процессу в случае завершения его дочернего процесса SIGCONT --- сигнал продолжения исполнения программы после остановки 8
Сигналы SIGFPE (8) --- сигнал ошибки в вычислениях с плавающей точкой, отправляется операционной системой при некорректном исполении программы SIGHUP (1) --- сигнал закрытия терминала, к которому привязан данный процесс SIGILL (4) --- сигнал некорректной инструкции SIGKILL (9) --- сигнал аварийного завершения процесса SIGPIPE (13) --- сигнал отправляется процессу, который пытается отправить данные в канал, закрытый с противоположной стороны. 9
Сигналы SIGSEGV (11) - сигнал отправляется процессу операционной системой, если была произведена неверная операция с памятью (обращение по несуществующему или защищённому адресу). SIGSTOP - сигнал приостановки работы процесса (не может быть перехвачен), SIGTERM (15) - сигнал завершения процесса, как правило используется для корректного завершения его работы SIGUSR 1, SIGUSR 2 - «Пользовательские» сигналы — могут использоваться процессами для всевозможных уведомлений 10
Неименованный канал 11
Сокеты 12
4. 4 Команды управления процессами 13
Информация о процессе Полную информацию о процессе пользователь или администратор может получить с помощью этой команды в следующем формате: $ps [-k] [<входное_имя_пользователя>] - вывод листинга характеристик процесса. Некоторые значения ключей: -a[l] показать процессы данного терминала или -af полный (достаточный) формат сообщения -afl длинный формат -u показать все активные процессы и пр. . 14
Информация о процессе Пример: $ps -flu lev PID PPID 927 1 1001 927 TTY PRI TIME tty 5 0: 04 tty 5 0: 02 CMD sh ps Для вывода листинга процессов, принадлежащих пользователю можно воспользоваться конструкцией: $ps -f|grep <имя_пользователя>. 15
Создание фоновых процессов Для запуска фонового (параллельного с другими потомками) процесса в командную строку необходимо и достаточно последним символом добавить знак & (амперсанд): $ cc prog. c & 2388 $ Shell выводит номер этого процесса (PID) и разрешает ввод следующей команды. 16
Создание фоновых процессов Фоновые процессы обладают некоторыми недостатками: - не допускают ввода с клавиатуры; - обеспечивают вывод на экран, но при этом нарушают целостность вывода диалогового процесса. Общепринятый прием исключения влияния фонового вывода на интерактивную работу: ком_строка > имя_файла. out & ком_строка планирует задание для фонового режима перенаправляет вывод вместо экрана в указанный файл головного каталога пользователя. 17
Создание фоновых процессов Пример: $grep ааа* > grep. out & 194 $ps PID TTY TIME 194 tty 5 0: 02 200 tty 5 0: 01 CMD grep ps 18
Создание фоновых процессов Особенности работы с фоновым режимом: 1) выполняемая в фоновым режиме программа (команда), требующая стандартного ввода, должна читать его из файла с использованием перенаправленного ввода; 2) программа, выполняемая в фоновом режиме не может быть прервана
Создание фоновых процессов В случаях, когда фоновый процесс все же требует ввода данных с клавиатуры, то его надо временно перевести в оперативный режим, ввести данные, и вернуть опять в фоновый с помощью следующих команд: fg %N - перевод фонового процесса в оперативный; bg %N - перевод оперативного в фоновый режим. Здесь N – порядковый номер фонового задания, которое в общем случае может содержать несколько активных процессов и все они переводятся в соответствующий режим. 20
Создание фоновых процессов Номер задания “N” выводится: — при запуске фоновой программы — командой jobs без приостановленя или с приостановлением фонового процесса. Приостановить выполнение процесса с выходом в shell (например для анализа состояния и результатов работы процедуры) можно с помощью прерывания
Создание фоновых процессов Пример. $inf>f. out& # запуск процедуры inf в фоновом режиме [1] 1754 # номер задания и идентификатор процесса $jobs %1 # номер задания
Создание фоновых процессов Выполнение фоновых заданий прекращается с выходом пользователя из системы. НО! Если фоновая программа должна быть продолжена и после прекращения текущего сеанса работы, то необходимо использовать команду: $nohup имя_фоновой_программы & команда запускает и защищает фоновую программу от прерываний, вырабатываемых при выходе пользователя из системы, а также перенаправляет фоновый протокол в системный файл nohup. out. 23
Создание фоновых процессов Вместе с тем, вывод протокола работы фоновой программы можно перенаправить в специальный файл, который просмотреть позже без нарушения протокола работы с оперативной задачей: $nohup имя_фон_программы>имя_файла& 24


