Процесс в операционной системе

Автор работы: Пользователь скрыл имя, 21 Февраля 2011 в 14:21, реферат

Описание работы

Описание сущностей процесса и потока, их жизненного цикла с примерами из UNIX.

Файлы: 1 файл

Процесс в операционной системе.docx

— 32.76 Кб (Скачать файл)

Создание  описателя процесса – это появление в системе еще одного претендента на вычислительные ресурсы. Начиная с этого момента при распределении ресурсов ОС должна принимать во внимание потребности нового процесса.

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

В многопоточной  системе при создании процесса ОС создает для каждого процесса как минимум один поток выполнения. При создании потока так же, как  и при создании процесса, операционная система генерирует специальную  информационную структуру — описатель  потока, который содержит идентификатор  потока, данные о правах доступа  и приоритете, о состоянии потока и другую информацию. В исходном состоянии поток (или процесс, если речь идет о системе, в которой  понятие «поток» не определяется) находится в приостановленном состоянии. Момент выборки потока на выполнение осуществляется в соответствии с  принятым в данной системе правилом предоставления процессорного времени  и с учетом всех существующих в  данный момент потоков и процессов. В случае если коды и данные процесса находятся в области подкачки, необходимым условием активизации  потока процесса является также наличие  места в оперативной памяти для  загрузки его исполняемого модуля.

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

Создание  процессов на примере

В качестве примера возьмем создание процессов в операционной системе UNIX System V Release 4. В этой системе потоки не поддерживаются, в качестве единицы управления и единицы потребления ресурсов выступает процесс.

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

Дескрипторы отдельных процессов объединены в список, образующий таблицу процессов. Память для таблицы процессов  отводится динамически в области  ядра. На основании информации, содержащейся в таблице процессов, операционная система осуществляет планирование и синхронизацию процессов. В дескрипторе прямо или косвенно (через указатели, на связанные с процессом структуры) содержится информация о состоянии процесса, о расположении образа процесса в оперативной памяти и на диске, о значении отдельных составляющих приоритета, а также о его итоговом значении — глобальном приоритете, об идентификаторе пользователя, создавшего процесс, о родственных процессах, о событиях, осуществления которых ожидает данный процесс, и некоторая другая информация.

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

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

После выполнения системного вызова fork оба процесса продолжают выполнение с одной и той же точки. Чтобы процесс мог опознать, является он родительским процессом или процессом-потомком, системный вызов fork возвращает в качестве своего значения в породивший процесс идентификатор порожденного процесса, а в порожденный процесс — NULL. Типичное разветвление на языке С записывается так:

if( -fork() ) { действия родительского процесса }

else { действия порожденного процесса }

Идентификатор потомка может быть присвоен переменной, входящей в контекст родительского  процесса. Так как контекст процесса наследуется его потомками, то потомки  могут узнать идентификаторы своих  «старших братьев», таким образом сумма знаний наследуется при порождении и может быть распространена между родственными процессами. На независимости идентификатора процесса от выполняемой процессом программы построен механизм, позволяющий процессу перейти к выполнению другой программы с помощью системного вызова ехес.

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

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

Завершение  процесса

В большинстве  операционных систем есть одни и те же варианты завершения процесса, различающиеся деталями реализации:

  • Нормальное завершение процесса: завершение при достижении конца основной функции программы (разновидности main), или при вызове системной функции выхода (например, exit в unix).
  • Принудительное завершение процесса: производится внешним процессом с помощью вызова соответствующей системной функции (например, системного вызова kill в unix).

Результат завершения процесса

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

В unix, если процесс-потомок завершает свою работу прежде процесса-предка, и процесс-предок явно не указал, что он не заинтересован в получении информации о статусе завершения процесса-потомка, то завершившийся процесс-потомок не исчезает из системы окончательно, а остается в состоянии «закончил исполнение» либо до завершения процесса-предка, либо до того момента, когда предок проверит завершение потомка.

Резюме

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

 

Использованная  литература:

  1. Э.Таненбаум, А.Вудхалл. Операционные системы. Разработка и реализация. 3-е издание.
  2. В.Г.Олифер, Н.А.Олифер. Сетевые операционные системы. Учебник для ВУЗов.
  3. И.В.Машечкин, А.Н.Терёхин. Операционные системы. Лекционный курс факультета ВМиК МГУ им. М.В.Ломоносова.

Информация о работе Процесс в операционной системе