270.46K
Категория: ПрограммированиеПрограммирование

Процессы и потоки

1.

Модель процесса базируется на двух независимых концепциях:
группировании ресурсов и выполнении программы.
Концепция потоков (thread) добавляет к модели процесса возможность
одновременного выполнения в одной и той же среде процесса нескольких
программ, в достаточной степени независимых.
Под словом «поток» имеется в виду «поток команд», то есть
последовательность инструкций, которые считывает и исполняет
процессор.

2.

Элементы процесса и элементы потока (в первой колонке перечислены
элементы, совместно используемые всеми потоками процесса, а во второй
– элементы, индивидуальные для каждого потока)
Элементы процесса
Элементы потока
Адресное пространство
Счетчик команд
Глобальные переменные
Регистры
Открытые файлы
Стек
Дочерние процессы
Состояние
Необработанные аварийные сигналы
Сигналы и их обработчики
Информация об использовании
ресурсов

3.

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

4.

Создание процессов
Процесс может создать несколько новых процессов с помощью соответствующего
системного вызова в течение своего выполнения. Порождающий процесс называется
родительским (parent process) или процессом-отцом, а новый порожденный родительским –
процессом-потомком (children process) или процессом-сыном, дочерним по отношению к
порождающим. Каждый из новых процессов может породить другие процессы, формируя
дерево процессов/

5.

Если некоторый процесс порождает новый, то существуют две возможности для
продолжения работы:
• процесс-отец продолжает выполняться вместе со своими сыновьями;
• процесс-отец ожидает завершения работы одного или нескольких своих
потомков.
Два варианта использования адресного пространства порожденным процессом:
• процесс-сын является клоном родительского процесса;
• процесс-сын создается для исполнения новой программы.

6.

Порождение процессов в системе UNIX
• системный вызов fork() создает новый процесс;
• системный вызов exec() используется после fork(),
чтобы заменить адресное пространство процесса
новой программой

7.

#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
pid t pid;
/* развилка */
if ((pid = fork())< 0)
{/* обнаружена ошибка */
fprintf(stderr, “Fork failed\n”);
exit (-1) ;
}
else if (pid == 0)
{/* дочерний процесс*/
execlp ("/bin/ls", "ls", NULL) ;
}
else
{/* родительский процесс */
wait (NULL) ;
printf("Child Complete\n");
exit (0);
}
}

8.

Порождение процессов в системе Windows
#include <stdio.h>
#include <windows.h>
int main (void)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
// выделение памяти
zeromemory(&si, sizeof (si));
si.cb = sizeof (si);
zeromemory(&pi, sizeof (pi));
// создание дочернего процесса
if (!CreateProcess( NULL, // команднаю строка во 2 параметре
'C:\\WINDOWS\\system32\\mspaint.exe', // команда
NULL, // атрибуты защиты процесса по умолчанию
NULL, // атрибуты защиты главного потока по умолчанию
FALSE, // идентификаторы не наследуются
0, // флаги создания не используются
NULL, // наследовать окружение родителя
NULL, // наследовать текущий каталог
&si,
&pi
)
)
{
fprintf(stderr,”Create Process failed\n”);
return -1;
}
// Родительский процесс ожидает окончания дочернего
WaitForSingleObject(pi.hProcess, INFINITE);
printf(”Child complete\n”);
// закрытие объектов
CloseHandle(pi.hProcess,INFINITE);
CloseHandle(pi.hThread);
}

9.

Завершение процессов
Процесс завершает свою работу, когда завершается выполнение его последней
команды, и передает ОС запрос на удаление процесса с помощью
соответствующего системного вызова (exit):
• процесс может вернуть результирующие данные своему отцу;
• ОС удаляет процесс и освобождает все его ресурсы, включая физическую и
виртуальную память, открытые файлы, буферы ввода-вывода.
Процесс может быть принудительно завершен с помощью соответствующего
системного вызова (abort)/
Родительский процесс может прекратить выполнение своих сыновей по
многим причинам, например:
• запросы процесса-сына превышают возможности некоторых выделенных ему
ресурсов;
• задача, решаемая процессом-сыном, более не потребуется;
• процесс-отец завершается, и ОС не разрешает сыну продолжаться после
прекращения работы процесса-отца.

10.

Планирование процессов. Очереди
Планирование процессов (process scheduling) – распределение процессов
между имеющимися ресурсами.
Одним из методов планирования процессов, ориентированных на
эффективную загрузку ресурсов является метод очередей (queue) к ресурсам.
Очереди:
• входная очередь или очередь заданий (job queue);
• очередь готовых процессов (ready queue);
• очередь к устройству (device queue)

11.

12.

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

13.

Планировщики
• долгосрочный планировщик (long-term scheduler/ job scheduler) выбирает
из процессы входной очереди;
• краткосрочный планировщик (short-term scheduler/CPU scheduler)
определяет, какие из процессов готовы к выполнению и распределению
центрального процессора одному из них.
Основное отличие между долгосрочным и краткосрочным планировщиком
заключается в частоте запуска.
В связи с коротким интервалом между запусками краткосрочный
планировщик должен быть очень быстрым.
Долгосрочный планировщик управляет степенью мультизадачности (числом
параллельно выполняемых процессов). Долгосрочный планировщик
выбирает процесс из входной очереди с целью создания неоднородной
мультипрограммной смеси.
В некоторых ОС долгосрочный планировщик может отсутствовать или его
функции могут быть сведены к минимуму. Отсутствует он обычно в
системах разделения времени (time-sharing systems).

14.

В некоторых ОС, например, в системах разделения времени, кроме того,
может присутствовать среднесрочный планировщик (medium-term scheduler).
Ключевая идея этого планировщика состоит в периодическом удалении
процесса из оперативной памяти с тем чтобы увеличить степень
многозадачности. Через некоторое время процесс вновь будет размещен в ОП и
его выполнении продолжится. Эта схема называется подкачкой/откачкой
(swapping).

15.

Моменты перепланировки
События, требующие перераспределения процессорного времени:
• прерывание от таймера, сигнализирующее, что время, отведенное активному
процессу на выполнение, закончилось;
• выполнение активным процессом системного вызова, связанного с запросом
на ввод-вывод или на доступ к ресурсу, который в настоящий момент занят;
• выполнение активным процессом системного вызова, связанного с
освобождением ресурса.
• внешнее (аппаратное) прерывание, которое сигнализирует о завершении
периферийным устройством операции ввода-вывода;
• внутреннее прерывание сигнализирует об ошибке, которая произошла в
результате выполнения активного процесса.

16.

Вытеснение
Необходимость в планировании центрального процессора может возникнуть в
следующих четырех ситуациях:
• Когда процесс переходит из состояния «выполняемый» в состояние
ожидания, например, вследствие запроса ввода-вывода или ожидания
завершения порожденного процесса.
• Когда процесс переходит из состояния «выполняемый» в состояние
«готовый», например, при исчерпании кванта времени (прерывание по
таймеру).
• Когда процесс переходит из состояния ожидания в состояние «готовый»,
например, завершился запрос ввода-вывода.
• Когда процесс завершился.
Если система построена так, что перепланирование выполняется только в
первой и четвертой ситуациях, то такая схема планирования называется схемой
планирования без вытеснения. В противном случае схема называется схемой
планирования с вытеснением процессов.
English     Русский Правила