Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Процессы и механизмы многозадачности






Понятие процесса

Программа - это набор инструкций процессора, находящийся на внешнем запоминающем устройстве в виде файла. Перед выполнением программы ОС производит выделение памяти, необходимой для размещения этих инструкций. Кроме того, происходит выделение памяти, необходимой для хранения данных, которыми оперирует выполняющаяся программа. Многозадачные ОС для управления выполняющимися программами создают специальные структуры, в которых хранится информация об этих программах. Программа, находящаяся в стадии выполнения, представляет собой логически выделенный объект, называемый процессом.

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

В структурах данных ядра UNIX хранится информация о каждом процессе. К наиболее важным сведениям относятся:

•идентификатор процесса (PID);

•идентификатор родительского процесса (PPID);

•идентификатор пользователя, запустившего процесс;

•текущее состояние процесса;

•приоритет процесса;

•информация о ресурсах, используемых процессом;

•и т.д.

Эти системные данные сосредоточены в двух областях - таблице процессов и таблице пользователя.

Каждому новому процессу присваивается уникальный идентификационный номер (Process IdentiFier - PID).

В UNIX любой процесс порождается каким-либо другим процессом, благодаря чему они образуют иерархическую структуру - дерево.

Процесс Р1 создает новый процесс Р2 посредством системного вызова fork. Запуск процесса Р2 осуществляется системным вызовом exec. Процесс Р1 называется родительским, Р2 - дочерним. В вершине дерева процессов UNIX находится процесс init. Этот процесс порождается особым образом и далее постоянно присутствует в системе. Процесс init является, таким образом, прародителем всех других процессов. Процесс init всегда имеет PID, равный 1. Для того, чтобы после завершения работы процесса обеспечить возврат управления породившему его процессу, каждый процесс содержит идентификационный номер родительского процесса (Parent Process IdentiFier - PPID).

В процессе выполнения процесс может находиться в одном из след.состояний:

-выполнение в режиме задачи,

-выполнение в режиме ядра,

-режим ожидания,

-остановленный,

-зомби.

Для создания нового процесса существующий процесс копирует самого себя посредством вызова системной функции fork. Вызов fork создает копию исходного процесса, идентичную родителю, но имеющую ряд отличий, например, у нового процесса свой PID, PPID нового процесса равен PID родителя. После выполнения fork новая программа запускается с помощью одного из системных вызовов семейства exec. Такой вызов изменяет программный код процесса-родителя на программный код дочернего процесса, устанавливает сегменты данных и стека и передает управление коду программы дочернего процесса.

Возможные переходы между состояниями отражены на схеме.

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

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

Выполнение процесса завершается, когда он осуществляет системный вызов exit. При этом, генерируется целое число - код завершения процесса. Обычно нулевое значение кода свидетельствует о нормальном завершении процесса. Функция exit освобождает адресное пространство процесса, закрывает все файлы, открытые процессом, но не очищает запись о процессе в таблице процессов. Такое состояние процесса называется зомби. Родительский процесс с помощью системного вызова wait может получить код возврата и статистику выполнения завершенного процесса. Только после этого в таблице процессов очищается запись о данном процессе. Если родительский процесс умирает первым, то для его работающих дочерних процессов в качестве родительского UNIX назначает процесс init, который и осуществляет вызов wait. В случае если родительский процесс заканчивает свое выполнение после потомка, но не производит вызова wait, потомок будет находиться в состоянии зомби до завершения работы системы, занимая ресурс в виде записи в таблице процессов.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.