Слайд 1Модель процесса базируется на двух независимых концепциях: группировании ресурсов и выполнении
программы.
Концепция потоков (thread) добавляет к модели процесса возможность одновременного выполнения в одной и той же среде процесса нескольких программ, в достаточной степени независимых.
Под словом «поток» имеется в виду «поток команд», то есть последовательность инструкций, которые считывает и исполняет процессор.
Слайд 2Элементы процесса и элементы потока (в первой колонке перечислены элементы, совместно
используемые всеми потоками процесса, а во второй – элементы, индивидуальные для каждого потока)
Слайд 3Потоки выполнения отличаются от традиционных процессов многозадачной операционной системы тем, что:
процессы,
как правило, независимы, тогда как потоки выполнения существуют как составные элементы процессов;
процессы несут значительно больше информации о состоянии, тогда как несколько потоков выполнения внутри процесса совместно используют информацию о состоянии, а также память и другие вычислительные ресурсы;
процессы имеют отдельные адресные пространства, тогда как потоки выполнения совместно используют их адресное пространство;
процессы взаимодействуют только через предоставляемые системой механизмы связей между процессами;
переключение контекста между потоками выполнения в одном процессе, как правило, быстрее, чем переключение контекста между процессами.
Слайд 4Создание процессов
Процесс может создать несколько новых процессов с помощью соответствующего
системного вызова в течение своего выполнения. Порождающий процесс называется родительским (parent process) или процессом-отцом, а новый порожденный родительским – процессом-потомком (children process) или процессом-сыном, дочерним по отношению к порождающим. Каждый из новых процессов может породить другие процессы, формируя дерево процессов/
Слайд 5Если некоторый процесс порождает новый, то существуют две возможности для продолжения
работы:
процесс-отец продолжает выполняться вместе со своими сыновьями;
процесс-отец ожидает завершения работы одного или нескольких своих потомков.
Два варианта использования адресного пространства порожденным процессом:
процесс-сын является клоном родительского процесса;
процесс-сын создается для исполнения новой программы.
Слайд 6Порождение процессов в системе UNIX
системный вызов fork() создает новый процесс;
системный вызов exec() используется после fork(), чтобы заменить адресное пространство процесса новой программой
Слайд 7#include
#include
#include
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
#include
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)
Слайд 12Общее представление о планировании очередей
Прямоугольные блоки представляют очередь готовых процессов
и множество очередей к устройствам. Овалы представляют ресурсы, обслуживаемые очередями, а стрелки – потоки процессов в системе.
Слайд 13Планировщики
долгосрочный планировщик (long-term scheduler/ job scheduler) выбирает из процессы входной очереди;
краткосрочный
планировщик (short-term scheduler/CPU scheduler) определяет, какие из процессов готовы к выполнению и распределению центрального процессора одному из них.
Основное отличие между долгосрочным и краткосрочным планировщиком заключается в частоте запуска.
В связи с коротким интервалом между запусками краткосрочный планировщик должен быть очень быстрым.
Долгосрочный планировщик управляет степенью мультизадачности (числом параллельно выполняемых процессов). Долгосрочный планировщик выбирает процесс из входной очереди с целью создания неоднородной мультипрограммной смеси.
В некоторых ОС долгосрочный планировщик может отсутствовать или его функции могут быть сведены к минимуму. Отсутствует он обычно в системах разделения времени (time-sharing systems).
Слайд 14В некоторых ОС, например, в системах разделения времени, кроме того, может
присутствовать среднесрочный планировщик (medium-term scheduler).
Ключевая идея этого планировщика состоит в периодическом удалении процесса из оперативной памяти с тем чтобы увеличить степень многозадачности. Через некоторое время процесс вновь будет размещен в ОП и его выполнении продолжится. Эта схема называется подкачкой/откачкой (swapping).
Слайд 15Моменты перепланировки
События, требующие перераспределения процессорного времени:
прерывание от таймера, сигнализирующее, что
время, отведенное активному процессу на выполнение, закончилось;
выполнение активным процессом системного вызова, связанного с запросом на ввод-вывод или на доступ к ресурсу, который в настоящий момент занят;
выполнение активным процессом системного вызова, связанного с освобождением ресурса.
внешнее (аппаратное) прерывание, которое сигнализирует о завершении периферийным устройством операции ввода-вывода;
внутреннее прерывание сигнализирует об ошибке, которая произошла в результате выполнения активного процесса.
Слайд 16Вытеснение
Необходимость в планировании центрального процессора может возникнуть в следующих четырех ситуациях:
Когда
процесс переходит из состояния «выполняемый» в состояние ожидания, например, вследствие запроса ввода-вывода или ожидания завершения порожденного процесса.
Когда процесс переходит из состояния «выполняемый» в состояние «готовый», например, при исчерпании кванта времени (прерывание по таймеру).
Когда процесс переходит из состояния ожидания в состояние «готовый», например, завершился запрос ввода-вывода.
Когда процесс завершился.
Если система построена так, что перепланирование выполняется только в первой и четвертой ситуациях, то такая схема планирования называется схемой планирования без вытеснения. В противном случае схема называется схемой планирования с вытеснением процессов.