Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры_ОС.rtf
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.9 Mб
Скачать

6. Процессы в ос unix. Типы процессов. Атрибуты процессов. Планирование выполнения процессов в ос unix. Таймеры. Порождение и завершение процессов в ос unix.

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

Типы процессов:

  1. системные процессы –являются частью ядра и расположены в оперативной памяти, запускаются особым образом при инициализации ядра системы. Не имеют программ в виде исполняемых файлов. Данные ее выполняемые инструкции находятся в ядре. Они могут вызывать функции и обращаться к данным, недоступных для остальных процессов.

  2. демоны – близки к системным, отличаются от них запуском. Запуск происходит с помощью загрузки в память соответствующих им программ (исполняемых файлов), и выполняются в фоновом режиме (низкоприоритетные процессы). Выполняют системные функции. Запускаются при инициализации системы. Обеспечивают работу системы печати, сетевой сервис, системы терминального доступа. Они не связаны ни с одним пользовательским сеансом работы => непосредственно пользователем не управляется. Большую часть времени демоны ожидают пока процесс запросит определенную услугу.

  3. прикладные процессы – все остальные процессы, выполняющиеся в системе. Процессы, порождаются в рамках пользовательского сеанса работы. Пользовательские процессы выполняются в фоновом или интерактивном режиме. Их жизнь ограничена сеансом работы.

Атрибуты процесса:

  1. PID – идентификатор процесса. Когда создается новый процесс, ядро присваивает ему следующий свободный идентификатор. Идентификатор нового процесса больше, чем идентификатор процесса созданного перед ним. Если идентификатор достиг максимального значения, у следующего процесса будет минимальный свободный PID и цикл повторяется. Процесс завершил работу, идентификатор освободился.

  2. PPID – идентификатор родительского процесса.

  3. RID – реальный идентификатор и EUID – эффективный идентификатор пользователя. RID – идентификатор пользователя, запустившего процесс. EUID – определяет права доступа процесса к системным ресурсам. Обычно RID и EUID эквивалентны.

  4. RGID – реальный и EGID – эффективный идентификаторы группы.RGID – реальный идентификатор первичной или текущей группы пользователя запустивших процесс. EGID- эффективный идентификатор группы.

  5. SID идентификатор сеанса.

  6. Nice Number –относительный приоритет процесса, задается при порождении процесса и влияет на текущий приоритет (на основании текущего приоритета происходит планирование).

  7. текущий каталог этого процесса

  8. корневой каталог

  9. набор ждущих сигналов

  10. блокировки файлов, сигнал маски

Таймер. Существует один системный таймер, он выдает время в секундах. Существует набор функций, который позволяет работать со временем в UNIX. Для каждого процесса существует 3 таймера:

SIGALRM – таймер реального времени, не зависит от состояния процесса;

SIGPROF – таймер профилирования, когда процесс находится в состоянии ядра;

SIGVTALRM – когда процесс находится в состоянии задачи.

При обрывании таймера происходит обновление статистики, в которую входит: сколько времени процесс выполнялся на процессоре, происходит обновление системного времени и всех таймеров, для каждлгл таймера надо установить время срабатывания.Существует возможность задания интервального времени, но любой процесс в UNIX работает со своим набором таймеров, они получают информацию от первичного таймера, но он работает по разному. С помощью таймеров можно получить разные оценки работы системы.

Планирование выполнения процессов. Процессу выделяется квант, по истечению кванта процесс выходит из состояния активности и возвращается в очередь, выбирается процесс с наибольшим приоритетом. При создании процесс имеет стартовый приоритет, который потом меняется ОС. В первую очередь обслуживаются процессы с меньшим временем обслуживания, которые соответственно имеют больший приоритет. Приоритет пересчитывается при каждом тике.

Порождение процесса. В UNIX-е все процессы порождаются с помощью системного вызова fork(). Системный вызов создает новый процесс точную копию родителя.

После возвращения из системного вызова оба процесса выполняют инструкции одной и той же программы и имеют одинаковые сегменты данных и стека. Но родительский и дочерние процессы различаются:

  1. дочернему процессу присваивается уникальный идентификатор PID, отличный от родительского.

  2. идентификатор родительского процесса PPID для родителя и потомка различны.

  3. дочерний процесс получает собственные файловые дескрипторы, хотя он разделяет те же записи файловой таблицы.

  4. для дочернего процесса очищаются все ожидающие доставки сигнала.

Запуск новой программы – осуществляется с помощью системного вызова exec(). При этом создается не новый процесс, а новое адресное пространство процесса, которое загружается содержимым новой программы. Если процесс был создан вызовом fork(), старое адресное пространство возвращается родителю, в противном случаи оно просто уничтожается. После возврата из exec() процесс продолжает выполнение кода новой программы.

Завершение процесса – с помощью функции exit(), которая выполняет такие действия:

  1. отключает все сигналы

  2. закрывает все открытые файлы

  3. изменяет состояние процесса на «зомби»

  4. освобождает адресное пространство процесса,в противном случае,рвыфfhsdfhfjjjdddjh

  5. уведомляет родительский процесс о «смерти» потомка

  6. пробуждает родительский процесс, если тот ждет завершения потомка

  7. запускает функцию переключения контекста => высокоприоритетному процессу становятся доступными вычисляемому ресурсу.

Процесс в «зомби», а от него остается запись proc в таблице процессов, т.к. она может потребоваться родителю.