
- •«Операционные системы.Командный интерфейс» конспект лекций Тема 1. Введение. Содержание курса
- •Тема 2. Классификация режимов работы ос
- •Диалоговый пакетный
- •Тема 3. Виды нтерфейсов пользователя ос unix
- •Тема 4. Обобщенные принцпы построения современных ос
- •Тема 5. Состав ос unix
- •Тема 6. Среда для работы пользователя
- •Тема 7. Регистрация пользователя в системе
- •Тема 8. Группа коммуникационных команд
- •Тема 9. Группа вспомогательных команд
- •Тема 10. Перенаправление ввода-вывода
- •Файловая система unix
- •Тема 11. Файлы unix
- •Тема 12. Генерация имен файлов
- •Тема 13. Структура системы каталогов unix
- •Тема 14. Управление каталогами в unix
- •Тема 15. Команды поиска файлов в системе каталогов
- •Тема 16. Управление файлами
- •Тема 17. Управление правами доступа к файлам и каталогам
- •Здесь файл fil1.C, владельцем которого является пользова-
- •Тема 18. Конвееры и фильтры
- •Тема 19. Создание и редактирование текстовых файлов
- •Команды удаления текста
- •Введение в shell- программирование
- •Тема 20. Операторы – команды
- •В unix при написании операторов важное значение отводится
- •Тема 21. Управление локальными переменными
- •Тема 22. Подстановка значений переменных
- •Тема 23. Экспортирование локальных переменных в среду shell
- •Тема 24. Проверка условий
- •2. Сравнение числовых значений:
- •3. Сравнение строк:
- •If список_команд1
- •Тема 25. Построение циклов
- •Тема 26. Управление процессами в unix
- •Тема 27. Создание фоновых процессов
- •Тема 28. Управление приоритетами
- •Тема 29. Завершение процессов
- •Тема 30. Перехватывание сигналов
- •Тема 31. Сетевые средства unix
Тема 26. Управление процессами в unix
UNIX - многопользовательская многозадачная операционная система. Концепция процесса является базовой для архитектуры ОС. Процесс строится для каждой прикладной (например sh-процедуры и системной задачи (например - утилиты) с помощью системного вызова fork. Является единицей вычислительной работы и потребления ресурсов. В процессе жизни в системе, процесс непосредственно управляется специальными системными вызовами, которые обеспечивают его построение - передачу управления - завершение:
fork - exec - exit совокупность этих переключений
состояний процесса определяют время
существования процесса.
В общем случае активныйпроцесс (выполняемая задача) может находиться в одном из шести состояний (в Linux):
ожидание процессора в очереди
выполнение на процессоре в течение выделенного кванта времени
ожидание освобождения ресурса (например – устройства)
приостановлен специальным сигналом
завершился, но его дескриптор еще в оперативной памяти ядра ОС
процесс свопирован на внешнюю память .
В ОП в активном состоянии находится несколько процессов - до 30000. .Каждому процессу выделяется виртуальная память практически без ограничений (за счет страничной организации).
При выполнении любого вычислительного задания прикладные и системные процессы ядра должны взаимодействовать между собой. Это необходимо для обмена данными, для передачи управляющей информации при использовании системных ресурсов, для синхронизации или управления последовательностью выполнения процессов и т.п.. Для этих целей служат специальные системные программы, встроенные в оболочку и поддерживающие следующие механизмы взаимодействия процессов :
программы-сокеты - для обмена данными;
программные каналы для обмена данными между утилитами (см. выше);
асинхронные сигналы – ключевые слова, передаваемые от одного процесса к другому, напрмер, для завершения выполнения процесса или для получения информации о свершении некоторых событий в системе (сигнал от таймера, ошибка при передачи данных на устройство, попытка выполнения несуществующей команды и пр.);
семафоры – синхронизация выполнения процессов посредством установки значений бит-"флагов" специальных системных переменных;
совместно используемая общая область физической памяти.
Перечисленные механизмы использует как сама ОС (write,mail и пр.), так и прикладные программы с помощью команд управления процессами или системных вызоваов.
Роассмотрим создание и работу процессов на примере процедуры. Так как sh-процедура - исполняемый файл то процесс его выполнения обеспечивается в ОС обычными механизмами построения и управления процессами. Для каждой sh-процедуры строится свой процесс со своим дескриптором - порожденный процесс. В дескрипторе процесса хранится информация, необходимая ядру для управления процессом. Дескриторы хранятся в адресном пространствя ядра ОС в виде двунаправленного приоритетного списка, упорядоченного в соответствии с их номерами – идентификаторами процессов (PID).
Пример.
$ vi proc
date
ls
$sh proc
< дата>
f1
f2
$
Рассмотрим как реализуются процессы процедуры примера.
В ответ на приглашение -$ вводится имя процедуры proc и создается порожденный процесс shell. Он вводит данные, необходимые для своего выполнения из указанного файла proc - командные строки. Каждая команда sh-процедуры выполняется порожденным для неё процессом (как обычно для команды, введенной с клавиатуры - процессы утилит). Как только все команды окажутся выполненными, sh-процесс завершается и управление возвращается родительскому процессу. Процедура выполнена.
Планировщик обрабатывает процессы двух видов – обычные и более приоритетные процессы реального времени. Место в очереди определяется его приоритетом.
Процессы выполняются в одном из двух режимов- пользовательском и в режиме ядра. В режиме ядра выполняются процессы системных вызовов. В этом случае они имеют доступ к процедурам и структурам данных ядра. Такая организация позволяет ядру защитить свои процедуры и структуры системных данных от искажений со стороны проблемных задач.
Дескрипторы процессов создаются и удаляются динамически при выполнении процессов. Поэтому состав и размер списка постоянно меняются. Так как все процессы связаны между собой родственными отношениями, то списковая организация процессов используется для процессов одного ранга (например – для всех порожденных одним родительским или для всехродительских и т.п.). Таким образом вся система дескрипторов представляет собой некоторую древовидную структуру с коренным общисистемным процессом (swapper – имеющего идентификатор PID=0), который компилируется в состав ядра и используется для построения всей структуры дескрипторов и ее обработки. Открывается очередь наиболее приоритетным процессом инициатора ОС (init – PID=1), который строится первым при инициализпации ОС и уничтожается при завершении работы ОС.
Процессор выделяется каждому процессу в очереди на ограниченные кванты времени. Это принципиально отличает многозадачный режим обработки заданий в UNIX от однозадачного режима (DOS), где процессор выделяется процессам строго последовательно на все время выполнения процесса. В UNIX пересчет приоритетов происходит постоянно по прерываниям определенного типа с частотой - около одного раза в сек.
Часть инфориации дескриптора может быть выведена в листинг характеристик процесса с помощью специальной команды ps (см. ниже). Некоторые заголовки полей листинга:
номер терминала, которому принадлежит процесс (TTY)
приоритет (PRI)
использованное время процессора (TIME)
идентификатор процесса (PID)
имя программы процесса или команды, выполняемой в теле процедуры на момент запроса листинга (CMD)
идентификатор родительского процесса (PPID)
адрес процесса (ADDR)
величина изменения значения приоритета (NI) и пр..
Полную информацию о процессе пользователь или администратор может получить с помощью этой команды в следующем формате:
$ps [-k] [<входное_имя_пользователя>] - вывод листинга
характеристик процесса.
Некоторые значения ключей:
-a[l] показать процессы данного терминала или
-af полный (достаточный_ формат сообщения
-afl длинный формат
-u показать все активные процессы и пр..
Пример:
$ps -flu lev
PID PPID TTY PRI TIME CMD
927 1 tty5 0:04 sh
1001 927 tty5 0:02 ps
..
Для вывода листинга процессов, принадлежащих пользователю можно воспользоваться конструкцией:
$ps -f|grep <имя_пользователя>.