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

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

Ядро состоит из трех основных подсистем

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

Ядро обеспечивает базовую функциональность ОС: создает процессы и управляет ими, распределяет память и обеспечивает доступ к файлам и периферийным устройствам

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

операционная система прекращает его деятельность;

он не может продолжать свою работу, пока не произойдет некоторое событие, и операционная система переводит его в состояние ожидание;

в результате возникновения прерывания в вычислительной системе (например, прерывания от таймера по истечении предусмотренного времени выполнения) его возвращают в состояние готовность.

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

Ядро обычно размещается в оперативной памяти, в то время как другие части ОС перемещаются во внешнюю память и обратно по мере необходимости

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

Из состояния ожидание процесс попадает в состояние готовность после того, как ожидаемое событие произошло, и он снова может быть выбран для исполнения.

Наша новая модель хорошо описывает поведение процессов во время их существования, но она не акцентирует внимания на появлении процесса в системе и его исчезновении. Для полноты картины нам необходимо ввести еще два состояния процессов: рождение и закончил исполнение (см. рис. 2.3 ).




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

Рис. 2.3. Диаграмма состояний процесса, принятая в курсе

Теперь для появления в вычислительной системе процесс должен пройти через состояние рождение. При рождении процесс получает в свое распоряжение адресное пространство, в которое загружается программный код процесса; ему выделяются стек и системные ресурсы; устанавливается начальное значение программного счетчика этого процесса и т. д. Родившийся процесс переводится в состояние готовность. При завершении своей деятельности процесс из состояния исполнение попадает в состояние закончил исполнение.

Важно, чтобы разработчики приложений понимали, как разные компоненты приложения влияют на время жизни процесса приложения. Неправильное использование этих компонентов может привести к тому, что система уничтожит процесс приложения, пока он выполняет важную работу.

Таким образом, система может убить процесс в любое время, чтобы восстановить память, и при этом он завершает порожденный поток, выполняющийся в этом процессе. Эти типы процессов. Процесс переднего плана - это тот, который требуется для того, что делает пользователь в данный момент. Различные компоненты приложения могут привести к тому, что его содержащий процесс будет рассматриваться на переднем плане по-разному. Процесс считается находящимся на переднем плане, если выполняется одно из следующих условий: он работает в верхней части экрана, с которым взаимодействует пользователь. Он имеет тот, который в настоящее время выполняет код в одном из своих обратных вызовов. У этого есть то, что в настоящее время работает. . В системе будет только несколько таких процессов, и они будут убиты только в крайнем случае, если память будет настолько низкой, что даже эти процессы не смогут продолжать работать.

В конкретных операционных системах состояния процесса могут быть еще более детализированы, могут появиться некоторые новые варианты переходов из одного состояния в другое. Так, например, модель состояний процессов для операционной системы Windows NT содержит 7 различных состояний, а для операционной системы Unix – 9. Тем не менее так или иначе, все операционные системы подчиняются изложенной выше модели.

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

  • Он работает, что отображается пользователю на экране, но не на переднем плане.
  • У этого есть работа, выполняемая как служба переднего плана, через.
Количество этих процессов, работающих в системе, менее ограничено, чем процессы переднего плана, но все еще относительно контролируется.

Операции над процессами и связанные с ними понятия

Набор операций

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

Ряд учетных функций

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

создание процесса – завершение процесса;

Основы операционных систем

приостановка процесса (перевод из состояния исполнение в состояние готовность) – запуск процесса (перевод из состояния готовность в состояние исполнение);

блокирование процесса (перевод из состояния исполнение в состояние ожидание) – разблокирование процесса (перевод из состояния ожидание в состояние готовность).

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

В процессе «процесс жизни» процесс меняется многократно. Эти изменения могут произойти, например, когда процесс выполняет системный вызов, это чья-то очередь запускается, происходит прерывание или процесс запрашивает ресурс, который в настоящее время недоступен.

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

Операции создания и завершения процесса являются одноразовыми, так как применяются к процессу не более одного раза (некоторые системные процессы при работе вычислительной системы не завершаются никогда). Все остальные операции, связанные с изменением состояния процессов, будь то запуск или блокировка, как правило, являются многоразовыми. Рассмотрим подробнее, как операционная система выполняет операции над процессами.

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

На вершине иерархии располагаются сами процессы пользователей

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

Process Control Block и контекст процесса

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

состояние, в котором находится процесс;

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

Причина зависания заключается в том, что слот в таблице процессов используется для кода выхода из процесса. Это может использоваться родительским процессом, чтобы определить, выполнил ли этот процесс то, что он должен был делать, или же он столкнулся с проблемами. Процесс показывает, что он завершился тем, что поставил себя в состояние 8 и стал «зомби».

Прерывания по контролю машины

Когда-то здесь он никогда не может работать снова, потому что ничего не существует, кроме записи в таблице процессов. Вот почему вы не можете «убить» процесс зомби. Нет ничего убить. Чтобы убить процесс, вам нужно отправить ему сигнал. Потому что нет ничего, чтобы получать или обрабатывать этот сигнал, пытаясь его убить, мало смысла. Единственное, что нужно сделать, это позволить системе очистить его.

содержимое регистров процессора;

данные, необходимые для планирования использования процессора и управления памятью (приоритет процесса, размер и расположение адресного пространства и т. д.);

учетные данные (идентификационный номер процесса, какой пользователь инициировал его работу, общее время использования процессора данным процессом и т. д.);

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

Резюме, ключевые и контрольные вопросы

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

сведения об устройствах ввода-вывода, связанных с процессом (например, какие устройства закреплены за процессом, таблицу открытых файлов).

Ее состав и строение зависят, конечно, от конкретной операционной системы. Во многих операционных системах информация, характеризующая процесс, хранится не в одной, а в нескольких связанных структурах данных. Эти структуры могут иметь различные наименования, содержать дополнительную информацию или, наоборот, лишь часть описанной информации. Для нас это не имеет значения. Для нас важно лишь то, что для любого процесса, находящегося в вычислительной системе, вся информация, необходимая для совершения операций над ним, доступна операционной системе. Для простоты изложения будем считать, что она хранится в одной структуре данных. Мы будем называть ее PCB (Process Control Block) или блоком управления процессом. Блок управления процессом является моделью процесса для операционной системы. Любая операция, производимая операционной системой над процессом, вызывает определенные изменения в PCB. В рамках принятой модели состояний процессов содержимое PCB между операциями остается постоянным.

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

Возможно, этот процесс только начался, когда он заметил, что у него нет необходимого ресурса. Введение. Концепция. Чтобы понять функциональность приложения моделирования модели семи состояний, сначала нужно понять, что представляет собой концепция модели процессов семи государств? Выполнение: содержит процесс, который выполняется или выполняется. Выход: содержит процессы, которые полностью выполняются. Заблокировано: содержит процессы, которые находятся в основной памяти и ждут события. Однако может потребоваться приостановить готовый процесс, если это единственный способ освободить достаточно большой блок основной памяти. В конце концов, если процесс не готов к выполнению и еще не находится в основной памяти, в чем его смысл? Однако в некоторых операционных системах процесс может быть завершен процессом, который его создал, или когда сам родительский процесс завершается. Если это разрешено, тогда процесс в любом состоянии может быть перемещен в состояние «Выход». Цель: Цель этого приложения моделирования состоит в том, чтобы предоставить визуальные возможности, чтобы служить эффективным инструментом поддержки для лучшего изучения концепций и методов модели состояний семи состояний в операционных системах, служащих средством повышения эффективности всего процесса. Область применения. Область применения этого симуляционного приложения заключается в представлении концепций и приемов модели семи состояний. Это позволяет пользователям визуализировать сложные концепции динамичным и анимированным способом. Интерфейса командной строки нет, только графический интерфейс.

  • Какова концепция модели «Семь государственных процессов»?
  • Какова его цель и масштаб?
  • Как работает это приложение?
  • Каковы функции этого программного обеспечения?
Процессы формируют базовую структуру любой современной операционной системы.

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


Основы операционных систем

Одноразовые операции

Сложный жизненный путь процесса в компьютере начинается с его рождения. Любая операционная система, поддерживающая концепцию процессов, должна обладать средствами для их создания. В очень простых системах (например, в системах, спроектированных для работы только одного конкретного приложения) все процессы могут быть порождены на этапе старта системы. Более сложные операционные системы создают процессы динамически, по мере необходимости. Инициатором рождения нового процесса после старта операционной системы может выступить либо процесс пользователя, совершивший специальный системный вызов, либо сама операционная система, то есть, в конечном итоге, тоже некоторый процесс. Процесс, инициировавший создание нового процесса, принято называть процессомродителем (parent process), а вновь созданный процесс – процессом-ребенком (child process). Процессыдети могут в свою очередь порождать новых детей и т. д., образуя, в общем случае, внутри системы набор генеалогических деревьев процессов – генеалогический лес. Пример генеалогического леса изображен нарисунке 2.4 . Следует отметить, что все пользовательские процессы вместе с некоторыми процессами операционной системы принадлежат одному и тому же дереву леса. В ряде вычислительных систем лес вообще вырождается в одно такое дерево.

Рис. 2.4. Упрощенный генеалогический лес процессов. Стрелочка означает отношение родитель–ребенок

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

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

После наделения процесса-ребенка ресурсами необходимо занести в его адресное пространство программный код, значения данных, установить программный счетчик. Здесь также возможны два решения. В первом случае процесс-ребенок становится дубликатом процесса-родителя по регистровому и пользовательскому контекстам, при этом должен существовать способ определения, кто для кого из процессовдвойников является родителем. Во втором случае процесс-ребенок загружается новой программой из ка- кого-либо файла. Операционная система Unix разрешает порождение процесса только первым способом; для запуска новой программы необходимо сначала создать копию процесса-родителя, а затем процессребенок должен заменить свой пользовательский контекст с помощью специального системного вызова. Операционная система VAX/VMS допускает только второе решение. В Windows NT возможны оба варианта (в различных API).

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

Основы операционных систем

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

После того как процесс наделен содержанием, в PCB дописывается оставшаяся информация, и состояние нового процесса изменяется на готовность. Осталось сказать несколько слов о том, как ведут себя про- цессы-родители после рождения процессов-детей. Процесс-родитель может продолжать свое выполнение одновременно с выполнением процесса-ребенка, а может ожидать завершения работы некоторых или всех своих "детей".

Мы не будем подробно останавливаться на причинах, которые могут привести к завершению жизненного цикла процесса. После того как процесс завершил свою работу, операционная система переводит его в состояние закончил исполнение и освобождает все ассоциированные с ним ресурсы, делая соответствующие записи в блоке управления процессом. При этом сам PCB не уничтожается, а остается в системе еще некоторое время. Это связано с тем, что процесс-родитель после завершения процесса-ребенка может запросить операционную систему о причине "смерти" порожденного им процесса и/или статистическую информацию о его работе. Подобная информация сохраняется в PCB отработавшего процесса до запроса процесса-родителя или до конца его деятельности, после чего все следы завершившегося процесса окончательно исчезают из системы. В операционной системе Unix процессы, находящиеся в состоянии закончил исполнение, принято называть процессами-зомби.

Следует заметить, что в ряде операционных систем (например, в VAX/VMS) гибель процесса-родителя приводит к завершению работы всех его "детей". В других операционных системах (например, в Unix) процессы-дети продолжают свое существование и после окончания работы процесса-родителя. При этом возникает необходимость изменения информации в PCB процессов-детей о породившем их процессе для того, чтобы генеалогический лес процессов оставался целостным. Рассмотрим следующий пример. Пусть процесс с номером 2515 был порожден процессом с номером 2001 и после завершения его работы остается в вычислительной системе неограниченно долго. Тогда не исключено, что номер 2001 будет использован операционной системой повторно для совсем другого процесса. Если не изменить информацию о процессе-родителе для процесса 2515, то генеалогический лес процессов окажется некорректным – процесс 2515 будет считать своим родителем новый процесс 2001, а процесс 2001 будет открещиваться от нежданного потомка. Как правило, "осиротевшие" процессы "усыновляются" одним из системных процессов, который порождается при старте операционной системы и функционирует все время, пока она работает.

Многоразовые операции

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

В этом разделе мы кратко опишем действия, которые производит операционная система при выполнении многоразовых операций над процессами. Более подробно эти действия будут рассмотрены далее в соответствующих лекциях.

Запуск процесса. Из числа процессов, находящихся в состоянии готовность, операционная система выбирает один процесс для последующего исполнения. Критерии и алгоритмы такого выбора будут подробно рассмотрены в лекции 3 – "Планирование процессов". Для избранного процесса операционная система обеспечивает наличие в оперативной памяти информации, необходимой для его дальнейшего выполнения. То, как она это делает, будет в деталях описано в лекциях 8-10. Далее состояние процесса изменяется на исполнение, восстанавливаются значения регистров для данного процесса и управление передается команде, на которую указывает счетчик команд процесса. Все данные, необходимые для восстановления контекста, извлекаются из PCB процесса, над которым совершается операция.

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

Основы операционных систем

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

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

Разблокирование процесса. После возникновения в системе какого-либо события операционной системе нужно точно определить, какое именно событие произошло. Затем операционная система проверяет, находился ли некоторый процесс в состоянии ожидание для данного события, и если находился, переводит его в состояние готовность, выполняя необходимые действия, связанные с наступлением события (инициализация операции ввода-вывода для очередного ожидающего процесса и т. п.). Эта операция, как и операция блокирования, будет подробно описана в лекции 13.

Переключение контекста

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

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

Рис. 2.5. Выполнение операции разблокирования процесса. Использование термина "код пользователя" не ограничивает общности рисунка только пользовательскими процессами


Основы операционных систем

Для корректного переключения процессора с одного процесса на другой необходимо сохранить контекст исполнявшегося процесса и восстановить контекст процесса, на который будет переключен процессор. Такая процедура сохранения/восстановления работоспособности процессов называется переключением контекста. Время, затраченное на переключение контекста, не используется вычислительной системой для совершения полезной работы и представляет собой накладные расходы, снижающие производительность системы. Оно меняется от машины к машине и обычно колеблется в диапазоне от 1 до 1000 микросекунд. Существенно сократить накладные расходы в современных операционных системах позволяет расширенная модель процессов, включающая в себя понятие threads of execution (нити исполнения или просто нити). Подробнее о нитях исполнения мы будем говорить в лекции 4 – "Кооперация процессов и основные аспекты ее логической организации".

Заключение

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

Процессы могут находиться в пяти основных состояниях: рождение, готовность, исполнение, ожидание, закончил исполнение. Из состояния в состояние процесс переводится операционной системой в результате выполнения над ним операций. Операционная система может выполнять над процессами следующие операции: создание процесса, завершение процесса, приостановка процесса, запуск процесса, блокирование процесса, разблокирование процесса, изменение приоритета процесса. Между операциями содержимое PCB не изменяется. Деятельность мультипрограммной операционной системы состоит из цепочек перечисленных операций, выполняемых над различными процессами, и сопровождается процедурами сохранения/восстановления работоспособности процессов, т. е. переключением контекста. Переключение контекста не имеет отношения к полезной работе, выполняемой процессами, и время, затраченное на него, сокращает полезное время работы процессора.

3. Лекция: Планирование процессов

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

Я планов наших люблю громадьё...

В. В. Маяковский Чем тщательнее мы планируем свою деятельность, тем меньше времени остается на ее осуществление.

Из анналов Госплана

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

Уровни планирования

В первой лекции, рассматривая эволюцию компьютерных систем, мы говорили о двух видах планирования в вычислительных системах: планировании заданий и планировании использования процессора. Планирование заданий появилось в пакетных системах после того, как для хранения сформированных пакетов заданий начали использоваться магнитные диски. Магнитные диски, являясь устройствами пря-

Основы операционных систем

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

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

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

В некоторых вычислительных системах бывает выгодно для повышения производительности временно удалить какой-либо частично выполнившийся процесс из оперативной памяти на диск, а позже вернуть его обратно для дальнейшего выполнения. Такая процедура в англоязычной литературе получила название swapping, что можно перевести на русский язык как "перекачка", хотя в специальной литературе оно употребляется без перевода – свопинг. Когда и какой из процессов нужно перекачать на диск и вернуть обратно, решается дополнительным промежуточным уровнем планирования процессов – среднесрочным.

Критерии планирования и требования к алгоритмам

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

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

Эффективность – постараться занять процессор на все 100% рабочего времени, не позволяя ему простаивать в ожидании процессов, готовых к исполнению. В реальных вычислительных системах загрузка процессора колеблется от 40 до 90%.

Сокращение полного времени выполнения (turnaround time) – обеспечить минимальное время между стартом процесса или постановкой задания в очередь для загрузки и его завершением.

Основы операционных систем

Сокращение времени ожидания (waiting time) – сократить время, которое проводят процессы в состоянии готовность и задания в очереди для загрузки.

Сокращение времени отклика (response time) – минимизировать время, которое требуется процессу в интерактивных системах для ответа на запрос пользователя.

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

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

Были связаны с минимальными накладными расходами. Если на каждые 100 миллисекунд, выделенные процессу для использования процессора, будет приходиться 200 миллисекунд на определение того, какой именно процесс получит процессор в свое распоряжение, и на переключение контекста, то такой алгоритм, очевидно, применять не стоит.

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

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

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

Параметры планирования

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

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

К статическим параметрам вычислительной системы можно отнести предельные значения ее ресурсов (размер оперативной памяти, максимальное количество памяти на диске для осуществления свопинга, количество подключенных устройств ввода-вывода и т. п.). Динамические параметры системы описывают количество свободных ресурсов на данный момент.

К статическим параметрам процессов относятся характеристики, как правило присущие заданиям уже на этапе загрузки.

Каким пользователем запущен процесс или сформировано задание.

Насколько важной является поставленная задача, т. е. каков приоритет ее выполнения.

Сколько процессорного времени запрошено пользователем для решения задачи.

Каково соотношение процессорного времени и времени, необходимого для осуществления операций ввода-вывода.

Какие ресурсы вычислительной системы (оперативная память, устройства ввода-вывода, специальные библиотеки и системные программы и т. д.) и в каком количестве необходимы заданию.

Алгоритмы долгосрочного планирования используют в своей работе статические и динамические параметры вычислительной системы и статические параметры процессов (динамические параметры процессов на этапе загрузки заданий еще не известны). Алгоритмы краткосрочного и среднесрочного планиро-


Основы операционных систем

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

сколько времени прошло с момента выгрузки процесса на диск или его загрузки в оперативную память;

сколько оперативной памяти занимает процесс;

сколько процессорного времени уже предоставлено процессу.

Рис. 3.1. Фрагмент деятельности процесса с выделением промежутков непрерывного использования процессора и ожидания ввода-вывода

Для краткосрочного планирования нам понадобится ввести еще два динамических параметра. Деятельность любого процесса можно представить как последовательность циклов использования процессора и ожидания завершения операций ввода-вывода. Промежуток времени непрерывного использования процессора носит название CPU burst, а промежуток времени непрерывного ожидания ввода-вывода – I/O burst. Нарисунке 3.1. показан фрагмент деятельности некоторого процесса на псевдоязыке программирования с выделением указанных промежутков. Для краткости мы будем использовать термины CPU burst и I/O burst без перевода. Значения продолжительности последних и очередных CPU burst и I/O burst являются важными динамическими параметрами процесса.

Вытесняющее и невытесняющее планирование

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

1. Когда процесс переводится из состояния исполнение в состояние закончил исполнение.

2. Когда процесс переводится из состояния исполнение в состояние ожидание.

3. Когда процесс переводится из состояния исполнение в состояние готовность (например, после прерывания от таймера).

4. Когда процесс переводится из состояния ожидание в состояние готовность (завершилась операция ввода-вывода или произошло другое событие). Подробно процедура такого перевода рассматривалась в лекции 2 (раздел "Переключение контекста"), где мы показали, почему при этом возникает возможность смены процесса, находящегося в состоянии исполнение.

В случаях 1 и 2 процесс, находившийся в состоянии исполнение, не может дальше исполняться, и операционная система вынуждена осуществлять планирование выбирая новый процесс для выполнения. В случаях 3 и 4 планирование может как проводиться, так и не проводиться, планировщик не вынужден обязательно принимать решение о выборе процесса для выполнения, процесс, находившийся в состоянии исполнение может просто продолжить свою работу. Если в операционной системе планирование осуществляется только в вынужденных ситуациях, говорят, что имеет место невытесняющее (nonpreemptive) планирование. Если планировщик принимает и вынужденные, и невынужденные решения, говорят о вытесняющем (preemptive) планировании. Термин "вытесняющее планирование" возник потому, что исполняющийся процесс помимо своей воли может быть вытеснен из состояния исполнение другим процессом.

Основы операционных систем

Невытесняющее планирование используется, например, в MS Windows 3.1 и ОС Apple Macintosh. При таком режиме планирования процесс занимает столько процессорного времени, сколько ему необходимо. При этом переключение процессов возникает только при желании самого исполняющегося процесса передать управление (для ожидания завершения операции ввода-вывода или по окончании работы). Этот метод планирования относительно просто реализуем и достаточно эффективен, так как позволяет выделить большую часть процессорного времени для работы самих процессов и до минимума сократить затраты на переключение контекста. Однако при невытесняющем планировании возникает проблема возможности полного захвата процессора одним процессом, который вследствие каких-либо причин (например, из-за ошибки в программе) зацикливается и не может передать управление другому процессу. В такой ситуации спасает только перезагрузка всей вычислительной системы.

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

Алгоритмы планирования

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

First-Come, First-Served (FCFS)

Простейшим алгоритмом планирования является алгоритм, который принято обозначать аббревиатурой FCFS по первым буквам его английского названия – First-Come, First-Served (первым пришел, первым обслужен). Представим себе, что процессы, находящиеся в состоянии готовность, выстроены в очередь. Когда процесс переходит в состояние готовность, он, а точнее, ссылка на его PCB помещается в конец этой очереди. Выбор нового процесса для исполнения осуществляется из начала очереди с удалением оттуда ссылки на его PCB. Очередь подобного типа имеет в программировании специальное наименование

– FIFO1) , сокращение от First In, First Out (первым вошел, первым вышел).

Такой алгоритм выбора процесса осуществляет невытесняющее планирование. Процесс, получивший в свое распоряжение процессор, занимает его до истечения текущего CPU burst. После этого для выполнения выбирается новый процесс из начала очереди.

Таблица 3.1.

Преимуществом алгоритма FCFS является легкость его реализации, но в то же время он имеет и много недостатков. Рассмотрим следующий пример. Пусть в состоянии готовность находятся три процесса p0 , p1 и p2 , для которых известны времена их очередных CPU burst. Эти времена приведены втаблице 3.1. в некоторых условных единицах. Для простоты будем полагать, что вся деятельность процессов ограничивается использованием только одного промежутка CPU burst, что процессы не совершают операций вво- да-вывода и что время переключения контекста так мало, что им можно пренебречь.

Если процессы расположены в очереди процессов, готовых к исполнению, в порядке p0 , p1 , p2 , то картина их выполнения выглядит так, как показано нарисунке 3.2 . Первым для выполнения выбирается процесс p0 , который получает процессор на все время своего CPU burst, т. е. на 13 единиц времени. После его окончания в состояние исполнение переводится процесс p1 , он занимает процессор на 4 единицы времени. И, наконец, возможность работать получает процесс p2 . Время ожидания для процесса p0 составляет 0

Управление процессами

В операционной системе UNIX процессы создаются с помощью вызова сис­темной функции ядра под названием fork (). При вызове этой функции процес­сом операционная система выполняет следующие действия [ВАСН86].

1. Выделяет в таблице процессов место для нового процесса.

2. Назначает этому процессу уникальный идентификатор.

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

4. Увеличивает показания счетчиков всех файлов, принадлежащих родительскому процессу, что отражает тот факт, что новый процесс также владеет этими файлами.

5. Назначает процессу состояние готовности к выполнению.

Возвращает родительскому процессу идентификатор дочернего процесса, а дочернему процессу - значение 0.

Возможно, такой метод создания процессов трудно изобразить наглядно, потому что и родительский и дочерний процессы в момент создания выполняют один и тот же проход по коду. Различаются они возвращаемым функцией fork () значением: если оно равно нулю, то это дочерний процесс. Таким обра­зом, можно выполнить команду ветвления, которая приведет к выполнению до­черней программы или продолжению выполнения основной ветви.

РЕЗЮМЕ, КЛЮЧЕВЫЕ И КОНТРОЛЬНЫЕ ВОПРОСЫ

Фундаментальным строительным блоком современных операционных систем является процесс. Основная функция операционной системы состоит в соз­дании, управлении и завершении процессов. Операционная система должна сле­дить за тем, чтобы каждому активному процессу выделялось время для выпол­нения на процессоре, координировать деятельность процессов, разрешать конфликтные ситуации и выделять процессам системные ресурсы.

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

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

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

Ключевые термины

Вытеснение Прерывание Слово состояния программы

Дочерний процесс Привилегированный Состояние блокирования

Завершение процесса режим Состояние выполнения

Задание Процесс Состояние готовности

Ловушка Режим ядра Состояние нового процесса

Образ процесса Родительский процесс Состояние

Переключение процессов Свопинг приостановленности

Переключение режимов Системный режим Управляющий блок

Пользовательский режим След процесса

Контрольные вопросы

3.1. Что такое след процесса?

3.2. В результате каких событий создаются процессы?

3.3. Дайте краткое описание каждого состояния, фигурирующего в модели обработки процессов, представленной на рис. 3.3.

3.4. Что такое вытеснение процесса?

3.5. Что такое свопинг и когда он применяется?

3.6. Зачем на рис. 3.6,6 представлены два блокированных состояния?

3.7. Перечислите четыре характерных признака приостановленных процессов.

3.8. Для каких объектов операционная система поддерживает таблицы с управляющей информацией?

3.9. Перечислите три общие категории информации в управляющем блоке процесса.

3.10. Зачем нужны два режима работы процессора (пользовательский режим и режим ядра)?

3.11. Какие действия выполняет операционная система при создании нового процесса?

3.12. Чем отличаются обычное прерывание и ловушка?

3.13. Приведите три примера прерываний.

Чем отличаются переключение режима работы процессора и переключение процессов?

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

GOOD94 Goodheart В., Сох J. The Magic Garden Explained: The Internals of UNIX System V Release 4. - Englewood Cliffs, NJ: Prentice Hall, 1994.

GRAY97 Gray J. Interprocess Communication in UNIX: The Nooks and Crannies. - Upper Saddle River, NJ: Prentice Hall, 1997.

NEHM75 Nehmer J. Dispatcher Primitives for the Construction of Operating System Kernels. - Acta Informatica, vol. 5, 1975.

ЗАДАЧИ

Назовите пять основных функций операционной системы при управлении процессами; обоснуйте в общих чертах их необходимость.

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

3.2. Нарисуйте диаграмму с использованием очередей для модели с семью состояниями, изображенной на рис. 3.6,6. В качестве основы возьмите диаграмму, представленную на рис. 3.5,6.

3.3. Рассмотрим диаграмму переходов состояний, изображенную на рис. 3.6,6. Предположим, что для операционной системы пришло время переключать процесс. Пусть у нас имеются процессы как в состоянии готовности, так и готовые к выполнению приостановленные. Кроме того, по крайней мере один из готовых к выполнению приостановленных процессов имеет более высокий приоритет по сравнению с приоритетом любого процесса в состоянии готовности. Можно действовать в соответствии с одной из двух следующих стратегий.

1. Всегда выбирать процесс в состоянии готовности, чтобы свести свопинг к минимуму.

2. Всегда отдавать предпочтение процессу с более высоким приоритетом, даже если для этого приходится выполнять свопинг, который не является необходимым.

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

3.5. В табл. 3.13 приведены состояния процессов, использующиеся в операционной системе VAX/VMS.

а. Сможете ли вы найти оправдание наличию такого большого количества различных состояний ожидания?

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

в. Изобразите диаграмму переходов состояний и укажите на ней действие или событие, которое приводит к каждому из изображенных переходов.

Таблица 3.13. Состояния процессов в операционной системе VAX/VMS

Выполняющееся Выполняющийся процесс

Выполнимое (резидентное) Готовый к выполнению процесс, находящийся в основной памяти

Выполнимое (выгруженное) Готовый к выполнению процесс, выгруженный из основной памяти

Состояние ожидания

загруз­ки страницы Процесс обратился к странице, которая отсутствует в основной памяти, и должен ждать, пока она будет считана

Состояние ожидания

разре­шения конфликта

доступа к странице Процесс обратился к совместно используемой странице, загрузку которой уже ожидает другой процесс, или к персональной странице, для которой как раз выполняет­ся чтение или запись

Состояние ожидания

общего события Ожидание переключения совместно используемого флага событий (флаги событий - это однобитовые механизмы передачи сигналов от одного процесса другому)

Состояние ожидания

свобод­ной страницы Процесс ожидает, пока ко множеству выделенных ему и находящихся в основной памяти страниц (рабочему мно­жеству процесса) будет добавлена свободная страница ос­новной памяти

Состояние сна Процесс переводит сам себя в состояние ожидания

(резидентное)

Состояние сна

(выгруженное) Процесс в состоянии сна выгружается из основной памяти

Ожидание локального

собы­тия (резидентное) Процесс находится в основной памяти и ожидает наступ­ления локального события (обычно этим событием явля­ется завершение ввода-вывода)

Ожидание локального

собы­тия (выгруженное) Процесс в ожидании локального события выгружен из основной памяти

Приостановленное

(резидентное) Процесс, переведенный другим процессом в состояние ожидания

Приостановленное

(выгруженное) Приостановленный процесс выгружается из основной памяти

Ожидание ресурса Процесс, ожидающий, пока ему будет предоставлен какой-то системный ресурс