Управление процессами (вычисления)

редактировать

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

Содержание
  • 1 Мультипрограммирование
  • 2 Как мультипрограммирование увеличивает эффективность
  • 3 Создание процесса
  • 4 Завершение процесса
  • 5 Модель управления процессами с двумя состояниями
  • 6 Модель управления процессами с тремя состояниями
  • 7 Описание процесса и управление
  • 8 Режимы процессора
  • 9 Концепция системы ядра
  • 10 Запросы системных служб
  • 11 См. Также
  • 12 Ссылки
  • 13 Источники
Мультипрограммирование

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

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

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

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

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

Как мультипрограммирование увеличивает эффективность

Общей чертой, наблюдаемой среди процессов, связанных с большинством компьютерных программ, является то, что они чередуются между циклами ЦП и вводом-выводом циклов. В течение части времени, необходимого для циклов ЦП, процесс выполняется; т. Е. Занимает ЦП. В течение необходимого времени ed для циклов ввода-вывода, процесс не использует процессор. Вместо этого он либо ожидает выполнения ввода / вывода, либо фактически выполняет ввод / вывод. Примером этого является чтение или запись файла на диске. До появления мультипрограммирования, компьютеры работали как однопользовательские системы. Пользователи таких систем быстро осознали, что большую часть времени, когда компьютер был выделен одному пользователю, процессор простаивал; например, когда пользователь вводил информацию или отлаживал программы. Ученые-компьютерщики заметили, что общую производительность машины можно улучшить, если разрешить другому процессу использовать процессор всякий раз, когда один процесс ожидает ввода / вывода. В системе с единым программированием, если N пользователей должны были выполнять программы с индивидуальным временем выполнения t 1, t 2,..., t N, тогда общее время t uni для обслуживания N процессов (последовательно) всех N пользователей будет:

tuni = t 1 + t 2 +... + t N.

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

ti (процессор) ≪ t i (выполнение)

, где

ti (процессор) - это время, которое процесс я затрачиваю на использование ЦП, и. t i (выполнение) - общее время выполнения процесса; то есть время циклов ЦП плюс циклы ввода / вывода, которые должны выполняться (выполняться) до завершения процесса.

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

∑ j = 1 N t j (p r o c e s s o r) < t i ( e x e c u t i o n) {\displaystyle \sum _{j=1}^{N}t_{j\,(\mathrm {processor})}\ sum _ {{j = 1}} ^ {{N}} t _ {{j \, ({\ mathrm {processor}})}} <t _ {{i \, ({\ mathrm {выполнение}} \!)}}

Следовательно, в системах с единым программированием процессор простаивает значительную часть времени. Чтобы преодолеть эту неэффективность, мультипрограммирование теперь реализовано в современных операционных системах, таких как Linux, UNIX и Microsoft Windows. Это позволяет процессору переключаться с одного процесса, X, на другой, Y, всякий раз, когда X участвует в фазе ввода-вывода своего выполнения. Поскольку время обработки намного меньше времени выполнения одного задания, общее время обслуживания всех N пользователей с помощью системы мультипрограммирования может быть уменьшено примерно до:

tmulti = max (t 1, t 2,..., t N)
Создание процесса

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

  • Инициализация системы.
  • Выполнение системного вызова создания процесса запущенным процессом.
  • Пользовательский запрос на создать новый процесс.
  • Запуск пакетного задания.

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

Создание процессов в UNIX и Linux осуществляется с помощью системных вызовов fork () или clone (). Создание процесса состоит из нескольких этапов. Первым шагом является проверка того, имеет ли родительский процесс достаточные полномочия для создания процесса. После успешной проверки родительский процесс копируется почти полностью, с изменениями только уникального идентификатора процесса, родительского процесса и пользовательского пространства. Каждый новый процесс получает свое собственное пространство пользователя.

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

Для завершения процесса существует множество причин:

  • Пакетное задание выдает команду остановки
  • Пользователь выходит из системы
  • Процесс выполняет сервисный запрос для завершения
  • Условия ошибки и сбоя
  • Нормальное завершение
  • Превышено ограничение по времени
  • Память недоступна
  • нарушение границ; например: попытка доступа к (несуществующему) 11-му элементу 10-элементного массива
  • Ошибка защиты; например: попытка записи в файл только для чтения
  • Арифметическая ошибка ; например: попытка деления на ноль
  • Превышение времени; например: процесс ждал события
  • I / O сбой
  • Недопустимая инструкция дольше указанного максимума; например: когда процесс пытается выполнить данные (текст)
  • Привилегированная инструкция
  • Данные неправильное использование
  • Операционная система вмешательство; например: для разрешения тупиковой ситуации
  • Родительский процесс завершается, поэтому дочерние процессы завершаются (каскадное завершение)
  • Родительский запрос
Модель управления процессами с двумя состояниями

Основная ответственность операционной системы заключается в управлении выполнением процессов. Сюда входит определение шаблона чередования для выполнения и распределения ресурсов для процессов. Одна из частей разработки ОС - описать поведение, которое мы хотим, чтобы каждый процесс демонстрировал. Самая простая модель основана на том факте, что процесс либо выполняется процессором, либо нет. Таким образом, можно считать, что процесс находится в одном из двух состояний: РАБОТАЕТ или НЕ РАБОТАЕТ. Когда операционная система создает новый процесс, этот процесс изначально помечается как НЕ РАБОТАЕТ и помещается в очередь в системе в состоянии НЕ РАБОТАЕТ. Затем процесс (или его часть) существует в основной памяти и ожидает в очереди возможности для выполнения. По прошествии некоторого периода времени текущий процесс RUNNING будет прерван и переведен из состояния RUNNING в состояние NOT RUNNING, что сделает процессор доступным для другого процесса. Затем диспетчерская часть ОС выберет из очереди НЕЗАПУСКАЮЩИХСЯ процессов один из ожидающих процессов для передачи процессору. Затем выбранный процесс переименовывается из состояния НЕ РАБОТАЕТ в состояние РАБОТАЕТ, и его выполнение либо начинается, если это новый процесс, либо возобновляется, если это процесс, который был прерван ранее.

С помощью этой модели мы можем идентифицировать некоторые элементы дизайна ОС:

  • Необходимость представлять и отслеживать каждый процесс.
  • Состояние процесса.
  • Постановка в очередь НЕРАБОТАЮЩИХ процессов
Модель управления процессами с тремя состояниями

Хотя модель управления процессами с двумя состояниями является вполне допустимой конструкцией для операционной системы, отсутствие состояния ЗАБЛОКИРОВАНО означает, что процессор простаивает, когда активный процесс переключается с циклов ЦП на циклы ввода-вывода. Такая конструкция не позволяет эффективно использовать процессор. Модель управления процессами с тремя состояниями предназначена для преодоления этой проблемы путем введения нового состояния, называемого состоянием ЗАБЛОКИРОВАНО. Это состояние описывает любой процесс, который ожидает события ввода-вывода. В этом случае событие ввода-вывода может означать использование какого-либо устройства или сигнал от другого процесса. В этой модели есть три состояния:

  • РАБОТАЕТ: процесс, который в данный момент выполняется.
  • ГОТОВ: процесс, который стоит в очереди и готов к выполнению, когда будет предоставлена ​​возможность.
  • ЗАБЛОКИРОВАНО : Процесс, который не может выполняться до тех пор, пока не произойдет какое-либо событие, такое как завершение операции ввода-вывода.

В любой момент процесс находится в одном и только одном из трех состояний. Для однопроцессорного компьютера только один процесс может находиться в состоянии РАБОТА в любой момент. В состояниях READY и BLOCKED может быть много процессов, и с каждым из этих состояний будет связана очередь для процессов.

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

  • РАБОТАЕТ → ГОТОВ Наиболее частой причиной этого перехода является то, что запущенный процесс достиг максимально допустимого времени для непрерывного выполнения; т.е. происходит тайм-аут. Другими причинами могут быть наложение уровней приоритета, определяемых политикой планирования, используемой для низкого уровня Планировщик, и переход процесса с более высоким приоритетом в состояние ГОТОВ.
  • RUNNING → BLOCKED Процесс переводится в состояние BLOCKED, если он запрашивает что-то, чего он должен ждать. Запрос к ОС обычно имеет форму системного вызова (т. Е. Вызова из запущенного процесса функции, которая является частью кода ОС). Например, запрос файла с диска или сохранение раздела кода или данных из памяти в файл на диске.
Описание процесса и управление

Каждый процесс в системе - это представлен структурой данных, называемой блоком управления процессом (PCB) или дескриптором процесса в Linux, который выполняет ту же функцию, что и паспорт путешественника. Плата содержит основную информацию о задании, в том числе:

  • Что это такое
  • Куда оно направляется
  • Какая часть его обработки была завершена
  • Где это сохранено
  • Сколько он «потратил» на использование ресурсов

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

Состояние процесса : указывает текущий статус процесса; ГОТОВ, РАБОТАЕТ, ЗАБЛОКИРОВАН, ГОТОВ ПРИОСТАНОВИТЬ, ЗАБЛОКИРОВАНО ПРИОСТАНОВИТЬ.

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

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

Режимы процессора

Современные процессоры включают в себя бит режима, чтобы определить возможности выполнения программы в процессоре. Этот бит может быть установлен в режим ядра или пользовательский режим. Режим ядра также обычно называют режимом супервизора, режимом мониторинга или кольцом 0. В режиме ядра процессор может выполнять каждую инструкцию в своем аппаратном репертуаре, тогда как в пользовательском режиме он может выполнять только подмножество инструкций. Инструкции, которые могут выполняться только в режиме ядра, называются командами ядра, привилегированными или защищенными, чтобы отличать их от команд пользовательского режима. Например, инструкции ввода-вывода являются привилегированными. Таким образом, если программа application выполняется в пользовательском режиме, она не может выполнять свой собственный ввод-вывод. Вместо этого он должен запросить у ОС выполнение ввода-вывода от своего имени. Система может логически расширить бит режима, чтобы определить области памяти, которые будут использоваться, когда процессор находится в режиме ядра по сравнению с пользовательским режимом. Если бит режима установлен в режим ядра, процесс, выполняющийся в процессоре, может получить доступ либо к ядру, либо к пользовательскому разделу памяти. Однако, если установлен пользовательский режим, процесс может ссылаться только на пространство пользовательской памяти. Мы часто ссылаемся на два класса памяти: пользовательское пространство и системное пространство (или ядро, супервизор или защищенное пространство). В общем, бит режима расширяет права защиты операционной системы. Бит режима устанавливается инструкцией прерывания пользовательского режима, также называемой инструкцией вызова супервизора. Эта инструкция устанавливает бит режима и выполняет переход в фиксированное место в системном пространстве. Поскольку в системное пространство загружается только системный код, через ловушку можно вызывать только системный код. Когда ОС завершила вызов супервизора, она сбрасывает бит режима в режим пользователя перед возвратом.

Концепция системы ядра

Части ОС, критичные для ее правильной работы, выполняются в режиме ядра, в то время как другое программное обеспечение (например, стандартное системное программное обеспечение), и все прикладные программы выполняются в пользовательском режиме. Это фундаментальное различие обычно является неопровержимым различием между операционной системой и другим системным программным обеспечением. Часть системы, выполняющаяся в состоянии супервизора ядра, называется ядром или ядром операционной системы. Ядро работает как надежное программное обеспечение, что означает, что при разработке и внедрении оно предназначалось для реализации механизмов защиты, которые нельзя было скрыто изменить с помощью действий ненадежного программного обеспечения, выполняющегося в пространстве пользователя. Расширения ОС выполняются в пользовательском режиме, поэтому ОС не полагается на правильность этих частей системного программного обеспечения для правильной работы ОС. Следовательно, фундаментальное дизайнерское решение для любой функции, которая должна быть включена в ОС, заключается в том, нужно ли ее реализовывать в ядре. Если он реализован в ядре, он будет выполняться в пространстве ядра (супервизора) и иметь доступ к другим частям ядра. Это программное обеспечение также будет доверять другим частям ядра. Если функция реализована для выполнения в пользовательском режиме, у нее не будет доступа к структурам данных ядра. Однако преимущество состоит в том, что для вызова функции обычно требуются очень ограниченные усилия. Хотя функции, реализованные в ядре, можно легко реализовать, механизм перехвата и аутентификация во время вызова обычно относительно дороги. Код ядра выполняется быстро, но при реальном вызове возникают большие накладные расходы. Это тонкий, но важный момент.

Запрос системных служб

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

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

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

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

См. Также
Ссылки
  1. ^«Взгляд в ядро ​​Linux - Глава 2: Создание процесса»
Источники
  • Операционная система, включающая Windows и UNIX, Колин Ричи. ISBN 0-8264-6416-5
  • Операционные системы, Уильям Столлингс, Прентис Холл, (4-е издание, 2000 г.)
  • Мультипрограммирование, описание процессов и управление
  • Операционные системы - современная перспектива, Гэри Натт, Эддисон Уэсли, (2-е издание, 2001 г.).
  • Модели управления процессами, планирование, UNIX System V Release 4:
  • Современные операционные системы, Эндрю Таненбаум, Прентис Холл, (2-е издание, 2001 г.).
  • Концепции операционных систем, Silberschatz Galvin Gagne (http://codex.cs.yale.edu/avi/os-book / OS9 / slide-dir / ), John Wiley Sons, (6-е издание, 2003 г.)
Последняя правка сделана 2021-06-02 07:27:13
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте