Управление процессами (вычисления)
Операционные системы |
---|
![]() |
Общие особенности |
Процесс — это выполняемая программа и неотъемлемая часть любой современной операционной системы (ОС). ОС должна выделять ресурсы процессам , позволять процессам совместно использовать и обмениваться информацией, защищать ресурсы каждого процесса от других процессов и обеспечивать синхронизацию между процессами. Чтобы удовлетворить этим требованиям, ОС должна поддерживать структуру данных для каждого процесса, которая описывает состояние и владение ресурсами этого процесса и которая позволяет ОС осуществлять контроль над каждым процессом.
Мультипрограммирование [ править ]
может быть загружено несколько экземпляров программы . В любой современной операционной системе в память одновременно Например, одну и ту же программу могут выполнять несколько пользователей, при этом каждый пользователь будет иметь отдельные копии программы, загруженные в память. В некоторых программах можно загрузить одну копию в память, при этом несколько пользователей имеют к ней общий доступ, так что каждый из них может выполнять один и тот же программный код. Такая программа называется реентерабельной . [ соответствующий? ] Процессор в любой момент может выполнять только одну инструкцию из одной программы, но несколько процессов могут поддерживаться в течение определенного периода времени, назначая каждый процесс процессору через определенные промежутки времени, в то время как остальные временно становятся неактивными. Ряд процессов, выполняемых в течение определенного периода времени, а не одновременно, называется параллельным выполнением . [ нужна ссылка ]
Многопрограммная . или многозадачная ОС — это система, выполняющая множество процессов одновременно Мультипрограммирование требует, чтобы процессор был выделен каждому процессу на определенный период времени и освобожден от его выделения в соответствующий момент. Если процессор освобождается во время выполнения процесса, это должно быть сделано таким образом, чтобы его можно было перезапустить позже как можно проще.
У ОС есть два возможных способа восстановить контроль над процессором во время выполнения программы, чтобы ОС могла выполнить освобождение или выделение:
- Процесс выдает системный вызов (иногда называемый программным прерыванием ); например, возникает запрос ввода-вывода с запросом на доступ к файлу на жестком диске.
- Происходит аппаратное прерывание ; например, на клавиатуре была нажата клавиша или истек таймер (используется при вытесняющей многозадачности ).
Остановка одного процесса и запуск (или перезапуск) другого процесса называется переключением контекста или изменением контекста. Во многих современных операционных системах процессы могут состоять из множества подпроцессов. Это вводит понятие потока . Поток можно рассматривать как подпроцесс ; то есть отдельная, независимая последовательность выполнения внутри кода одного процесса. Потоки становятся все более важными при проектировании распределенных и клиент-серверных систем, а также в программном обеспечении, работающем на многопроцессорных системах.
Как эффективность мультипрограммирование повышает
Общей чертой, наблюдаемой среди процессов, связанных с большинством компьютерных программ, является то, что они чередуют циклы ЦП и циклы ввода-вывода . В течение той части времени, которая необходима для циклов ЦП, процесс выполняется; т.е. занимает процессор. В течение времени, необходимого для циклов ввода-вывода, процесс не использует процессор. Вместо этого он либо ожидает выполнения ввода/вывода, либо фактически выполняет ввод/вывод. Примером этого является чтение или запись в файл на диске. До появления компьютеры мультипрограммирования работали как однопользовательские системы. Пользователи таких систем быстро осознали, что большую часть времени, пока компьютер был предоставлен одному пользователю, процессор простаивал; например, когда пользователь вводил информацию или отлаживал программы. Ученые-компьютерщики заметили, что общую производительность машины можно улучшить, если позволить другому процессу использовать процессор всякий раз, когда один процесс ожидает ввода/вывода. В системе уни-программирования , если бы N пользователи выполняли программы с индивидуальным временем выполнения t 1 , t 2 , ..., t N , то общее время t uni для обслуживания N процессов (последовательно) всех N пользователей было бы:
- т уни знак равно т 1 + т 2 + ... + т N .
Однако, поскольку каждый процесс потребляет как циклы ЦП, так и циклы ввода-вывода, время, в течение которого каждый процесс фактически использует ЦП, составляет очень небольшую часть общего времени выполнения процесса. Итак, для процесса i :
- t i (процессор) ≪ t i (выполнение)
где
t i (процессор) — это время, которое я затрачиваю на использование ЦП, а
t i (выполнение) — общее время выполнения процесса; т.е. время, в течение которого циклы ЦП плюс циклы ввода-вывода должны быть выполнены (выполнены) до завершения процесса.
Фактически, обычно сумма всего процессорного времени, используемого N процессами, редко превышает небольшую долю времени выполнения любого из процессов;
Поэтому в системах уни-программирования процессор значительную часть времени простаивает. , реализовано мультипрограммирование Чтобы преодолеть эту неэффективность, в современных операционных системах, таких как Linux , UNIX и Microsoft Windows . Это позволяет процессору переключаться с одного процесса X на другой Y всякий раз, когда X участвует в фазе ввода-вывода его выполнения. Поскольку время обработки намного меньше времени выполнения одного задания, общее время обслуживания всех N пользователей мультипрограммной системой можно сократить примерно до:
- т multi = max( т 1 , т 2 , ..., т N )
Создание процесса [ править ]
![]() | Возможно, этот раздел содержит оригинальные исследования . ( Ноябрь 2023 г. ) |
Операционным системам необходимы некоторые способы создания процессов. В очень простой системе, предназначенной для запуска только одного приложения (например, контроллера в микроволновой печи), возможно, можно будет иметь все процессы, которые когда-либо потребуются, при запуске системы. Однако в системах общего назначения необходим какой-то способ создания и завершения процессов по мере необходимости во время работы.
Существует четыре основных события, которые вызывают создание процесса:
- Инициализация системы.
- Выполнение системного вызова создания процесса запущенным процессом.
- Запрос пользователя на создание нового процесса.
- Запуск пакетного задания.
При загрузке операционной системы обычно создается несколько процессов. Некоторые из них являются приоритетными процессами, которые взаимодействуют с пользователем (человеком) и выполняют за него работу. Другие являются фоновыми процессами , которые не связаны с конкретными пользователями, а имеют определенную функцию. Например, один фоновый процесс может быть предназначен для приема входящих электронных писем, большую часть дня он находится в режиме ожидания, но внезапно оживает при поступлении входящего электронного письма. Другой фоновый процесс может быть предназначен для приема входящего запроса на веб-страницы, размещенные на компьютере, и пробуждения при поступлении запроса для обслуживания этого запроса.
Создание процессов в UNIX и Linux осуществляется с помощью системных вызовов fork() или clone(). Создание процесса состоит из нескольких этапов. Первым шагом является проверка того, имеет ли родительский процесс достаточные полномочия для создания процесса. После успешной проверки родительский процесс копируется почти полностью, с изменениями только уникального идентификатора процесса, родительского процесса и пользовательского пространства. Каждый новый процесс получает свое собственное пользовательское пространство. [1]
Создание процесса в Windows осуществляется с помощью системного вызова CreateProcessA(). Новый процесс запускается в контексте безопасности вызывающего процесса, но в остальном работает независимо от вызывающего процесса. Существуют методы изменения контекста безопасности, в котором запускаются новые процессы. Новым процессам присваиваются идентификаторы, по которым можно получить доступ. Предусмотрены функции для синхронизации вызывающих потоков с вновь созданными процессами. [2] [3]
Завершение процесса [ править ]
![]() | Возможно, этот раздел содержит оригинальные исследования . Список объединяет непосредственные причины завершения процесса и ближайшие причины (например, «выход пользователя») без их дифференциации. ( Ноябрь 2023 г. ) |
Причин прекращения процесса множество:
- Ошибка пакетного задания, инструкция по остановке
- Пользователь выходит из системы
- Процесс выполняет запрос службы на завершение
- Ошибки и неисправности
- Нормальное завершение
- Лимит времени превышен
- Память недоступна
- Нарушение границ; например: попытка доступа к (несуществующему) 11-му элементу массива из 10 элементов.
- Ошибка защиты; например: попытка записи в файл, доступный только для чтения
- Арифметическая ошибка; например: попытка деления на ноль
- Превышение времени; например: процесс ждал события дольше указанного максимума
- - вывода Сбой ввода
- Неверная инструкция; например: когда процесс пытается выполнить данные (текст)
- Привилегированная инструкция
- данных Неправомерное использование
- Вмешательство операционной системы ; например: разрешить тупик
- Родитель завершается, поэтому дочерние процессы завершаются (каскадное завершение)
- Родительский запрос
Модель управления процессами с двумя состояниями [ править ]
![]() | Эта статья , возможно, содержит оригинальные исследования . ( Ноябрь 2023 г. ) |
Основная ответственность операционной системы заключается в контроле выполнения процессов . Это включает в себя определение шаблона чередования для выполнения и выделения ресурсов процессам. Одной из частей проектирования ОС является описание поведения, которое мы хотели бы видеть в каждом процессе. Самая простая модель основана на том факте, что процесс либо выполняется процессором, либо нет. Таким образом, можно считать, что процесс находится в одном из двух состояний: ВЫПОЛНЯЕТСЯ или НЕ ВЫПОЛНЯЕТСЯ . Когда операционная система создает новый процесс, этот процесс изначально помечается как НЕ ЗАПУСКАЕТСЯ и помещается в очередь в системе в состоянии НЕ ЗАПУСКАЕТСЯ . Затем процесс (или некоторая его часть) существует в основной памяти и ожидает в очереди возможности для выполнения. Через некоторый период времени текущий ВЫПОЛНЯЮЩИЙСЯ процесс будет прерван и переведен из состояния ВЫПОЛНЕН в состояние НЕ ВЫПОЛНЕН , что сделает процессор доступным для другого процесса. Затем диспетчерская часть ОС выберет из очереди НЕ ЗАПУСКАЮЩИЕСЯ процессы, один из процессов, ожидающих передачи процессору. Затем выбранный процесс переименовывается из состояния НЕ ВЫПОЛНЯЕТСЯ в состояние ВЫПОЛНЯЕТСЯ , и его выполнение либо начинается, если это новый процесс, либо возобновляется, если это процесс, который был прерван ранее.
Из этой модели мы можем выделить некоторые элементы дизайна ОС:
- Необходимость представлять и отслеживать каждый процесс.
- Состояние процесса.
- Очередь НЕЗАПУСКАЕМЫХ процессов
Модель управления процессами с тремя состояниями [ править ]
![]() | Эта статья , возможно, содержит оригинальные исследования . ( Ноябрь 2023 г. ) |
Хотя модель управления процессами с двумя состояниями является вполне приемлемой для операционной системы, отсутствие состояния BLOCKED означает, что процессор простаивает, когда активный процесс переходит от циклов ЦП к циклам ввода-вывода . Такая конструкция не обеспечивает эффективного использования процессора. Модель управления процессами с тремя состояниями предназначена для решения этой проблемы путем введения нового состояния, называемого состоянием «БЛОКИРОВАНО» . Это состояние описывает любой процесс, ожидающий события ввода-вывода. В этом случае событие ввода-вывода может означать использование какого-либо устройства или сигнала другого процесса. Три состояния в этой модели:
- ВЫПОЛНЯЕТСЯ: Процесс, который выполняется в данный момент.
- ГОТОВНОСТЬ: процесс, который стоит в очереди и готов к выполнению, когда представится такая возможность.
- ЗАБЛОКИРОВАНО: процесс, который не может выполняться до тех пор, пока не произойдет какое-либо событие, например завершение операции ввода-вывода.
В любой момент времени процесс находится в одном и только одном из трех состояний. Для однопроцессорного компьютера только один процесс может находиться в состоянии ВЫПОЛНЕНИЕ в любой момент времени. может находиться множество процессов В состояниях READY и BLOCKED , и каждому из этих состояний будет соответствовать очередь для процессов.
Процессы, входящие в систему, должны изначально перейти в состояние ГОТОВНОСТЬ процессы могут перейти только , в состояние ВЫПОЛНЕНИЕ через состояние ГОТОВНОСТЬ . Процессы обычно покидают систему из состояния ВЫПОЛНЕНИЕ . Для каждого из трех состояний процесс занимает место в основной памяти. Хотя причина большинства переходов из одного состояния в другое может быть очевидна, некоторые из них могут быть не столь ясными.
- ВЫПОЛНЕНИЕ → ГОТОВНОСТЬ Наиболее распространенной причиной этого перехода является то, что запущенный процесс достиг максимально допустимого времени для непрерывного выполнения; т.е. происходит тайм-аут. Другими причинами могут быть наложение уровней приоритета, определенных политикой планирования низкого уровня , используемой для планировщика , и переход процесса с более высоким приоритетом в состояние ГОТОВО.
- ВЫПОЛНЕНИЕ → ЗАБЛОКИРОВАНО Процесс переводится в состояние ЗАБЛОКИРОВАНО , если он запрашивает что-то, чего ему приходится ждать. Запрос к ОС обычно имеет форму системного вызова (т. е. вызова работающего процесса функции, которая является частью кода ОС). Например, запрос файла с диска или сохранение участка кода или данных из памяти в файл на диске.
Описание процесса и контроль [ править ]
Каждый процесс в системе представлен структурой данных, называемой блоком управления процессом (PCB) или дескриптором процесса в Linux .
Идентификация процесса : каждый процесс уникально идентифицируется идентификатором пользователя и указателем, соединяющим его с его дескриптором.
Статус процесса : указывает текущий статус процесса; ГОТОВО , РАБОТАЕТ , ЗАБЛОКИРОВАНО , ГОТОВО ПРИОСТАНОВИТЬ , ЗАБЛОКИРОВАНО ПРИОСТАНОВИТЬ .
Состояние процесса : содержит всю информацию, необходимую для указания текущего состояния задания.
Бухгалтерский учет : содержит информацию, используемую в основном для целей выставления счетов и измерения производительности. Он указывает, какие ресурсы использовал процесс и как долго.
Режимы процессора [ править ]
![]() | Возможно, этот раздел содержит оригинальные исследования . Терминология кажется противоречивой. Судя по всему, текст подразумевает, что он хотя бы частично относится к x86, но использует термины, которые обычно не используются применительно к этой архитектуре. Утверждение о том, что ОС меняет режим защиты при программном прерывании, скорее всего, неверно. ( Ноябрь 2023 г. ) |
Современные процессоры включают бит режима, определяющий возможность выполнения программы в процессоре. Этот бит может быть установлен в режим ядра или пользовательский режим . Режим ядра также часто называют режимом супервизора , режимом монитора или кольцом 0 .
В режиме ядра процессор может выполнять каждую инструкцию из своего аппаратного репертуара, тогда как в пользовательском режиме он может выполнять только подмножество инструкций. Инструкции, которые могут выполняться только в режиме ядра, называются инструкциями ядра, привилегированными или защищенными, чтобы отличить их от инструкций пользовательского режима. Например, инструкции ввода-вывода являются привилегированными. Таким образом, если прикладная программа выполняется в пользовательском режиме, она не может выполнять собственный ввод-вывод . Вместо этого он должен запросить ОС выполнить ввод-вывод от его имени.
Архитектура компьютера может логически расширить бит режима. [ непонятно ] для определения областей памяти, которые будут использоваться, когда процессор находится в режиме ядра, а не в пользовательском режиме. Если бит режима установлен в режим ядра, процесс, выполняющийся в процессоре, может получить доступ либо к ядру, либо к пользовательскому разделу памяти. Однако если установлен пользовательский режим, процесс может ссылаться только на пространство пользовательской памяти. Мы [ ВОЗ? ] часто относятся к двум классам пользовательского пространства памяти и системного пространства (или ядра, супервизора или защищенного пространства). В общем, бит режима расширяет права защиты операционной системы. [ непонятно ] Бит режима устанавливается инструкцией прерывания пользовательского режима, также называемой инструкцией вызова супервизора . [ оригинальное исследование? ] Эта инструкция устанавливает бит режима и переходит в фиксированное место в системном пространстве. Поскольку в системное пространство загружается только системный код, через ловушку можно вызвать только системный код. [ непонятно ] Когда ОС завершает вызов супервизора, перед возвратом она сбрасывает бит режима в пользовательский режим. [ оригинальное исследование? ]
Концепция системы ядра [ править ]
![]() | Этот раздел может потребовать редактирования . ( Ноябрь 2023 г. ) |
Части ОС, критически важные для ее правильной работы, выполняются в режиме ядра , тогда как другое программное обеспечение (например, общее системное программное обеспечение) и все прикладные программы выполняются в пользовательском режиме . Это фундаментальное различие обычно является неопровержимым различием между операционной системой и другим системным программным обеспечением . Часть системы, выполняющаяся в состоянии супервизора ядра, называется ядром операционной системы . Ядро работает как доверенное программное обеспечение, а это означает, что при его разработке и реализации оно предназначалось для реализации механизмов защиты, которые не могли быть скрыто изменены действиями ненадежного программного обеспечения, выполняющегося в пользовательском пространстве. Расширения ОС выполняются в пользовательском режиме , поэтому ОС не полагается на правильность этих частей системного программного обеспечения для правильной работы ОС. Следовательно, фундаментальное проектное решение для любой функции, которая будет включена в ОС, заключается в том, нужно ли ее реализовывать в ядре. Если он реализован в ядре, он будет выполняться в пространстве ядра (супервизора) и иметь доступ к другим частям ядра. Другие части ядра также будут доверять этому программному обеспечению. Если функция реализована для выполнения в пользовательский режим , он не будет иметь доступа к структурам данных ядра. Однако преимущество состоит в том, что для вызова функции обычно требуются очень ограниченные усилия. Хотя функции, реализованные в ядре, можно легко реализовать, механизм перехвата и аутентификация во время вызова обычно относительно дороги. Код ядра выполняется быстро, но при фактическом вызове возникают большие издержки производительности. Это тонкий, но важный момент.
Запрос системных услуг [ править ]
Существует два метода, с помощью которых программа, выполняющаяся в пользовательском режиме, может запросить службы ядра :
Операционные системы разработаны с использованием одного или другого из этих двух средств, но не обоих одновременно. Во-первых, предположим, что пользовательский процесс хочет вызвать определенную функцию целевой системы. При подходе с системным вызовом пользовательский процесс использует инструкцию-ловушку. Идея состоит в том, что системный вызов должен выглядеть как обычный вызов процедуры прикладной программы; ОС . предоставляет библиотеку пользовательских функций с именами, соответствующими каждому фактическому системному вызову Каждая из этих функций-заглушек содержит ловушку для функции ОС. Когда прикладная программа вызывает заглушку, она выполняет инструкцию ловушки, которая переключает ЦП в режим ядра , а затем разветвляется (косвенно через таблицу ОС [ жаргон ] ), к точке входа функции, которую необходимо вызвать. Когда функция завершается, она переключает процессор в пользовательский режим , а затем возвращает управление пользовательскому процессу; таким образом имитируя обычный возврат процедуры. [ нужна ссылка ]
При подходе передачи сообщений пользовательский процесс создает сообщение, описывающее желаемую услугу. Затем он использует функцию доверенной отправки для передачи сообщения доверенному ОС процессу . Функция отправки служит той же цели, что и ловушка; то есть он тщательно проверяет сообщение, переключает процессор в режим ядра, а затем доставляет сообщение процессу, реализующему целевые функции. Тем временем пользовательский процесс ожидает результата запроса службы с операцией получения сообщения. Когда процесс ОС завершает операцию, он отправляет сообщение обратно пользовательскому процессу.
Различие между двумя подходами имеет важные последствия в отношении относительной независимости поведения ОС от поведения процесса приложения и итоговой производительности. Как правило, операционную систему , основанную на интерфейсе системных вызовов , можно сделать более эффективной, чем системы, требующие обмена сообщениями между отдельными процессами. Это так, даже если системный вызов должен быть реализован с помощью инструкции-ловушки; то есть, несмотря на то, что ловушка относительно дорога в исполнении, она более эффективна, чем метод передачи сообщений, при котором обычно возникают более высокие затраты, связанные с мультиплексированием процессов , формированием и копированием сообщений. Подход с системными вызовами обладает интересным свойством: не обязательно наличие какого-либо процесса ОС. Вместо этого процесс, выполняющийся в пользовательском режиме, переходит в режим ядра , когда он выполняет код ядра, и переключается обратно в пользовательский режим, когда он возвращается из вызова ОС. С другой стороны, если ОС спроектирована как набор отдельных процессов, обычно легче спроектировать ее так, чтобы она получала контроль над машиной в особых ситуациях, чем если бы ядро представляло собой просто набор функций, выполняемых пользователями. процессы в режиме ядра. Даже операционная система, основанная на процедурах, обычно считает необходимым включить хотя бы несколько системные процессы называемые демонами ( в UNIX ) для обработки ситуаций, когда машина в противном случае простаивает, например, для планирования и управления сетью. [ нужна ссылка ]
См. также [ править ]
Ссылки [ править ]
- ^ «Краткий обзор ядра Linux - Глава 2: Создание процесса»
- ^ «Функция CreateProcessA (Processthreadsapi.h) — приложения Win32» . 9 февраля 2023 г.
- ^ «Создание процессов — приложений Win32» . 9 февраля 2023 г.
Источники [ править ]
- Операционная система, объединяющая Windows и UNIX, Колин Ритчи. ISBN 0-8264-6416-5
- Операционные системы, Уильям Столлингс, Прентис Холл (4-е издание, 2000 г.)
- Мультипрограммирование, описание и управление процессами
- Операционные системы – современный взгляд, Гэри Натт, Аддисон Уэсли (2-е издание, 2001 г.).
- Модели управления процессами, планирование, UNIX System V, выпуск 4:
- Современные операционные системы, Эндрю Таненбаум, Прентис Холл (2-е издание, 2001 г.).
- Концепции операционной системы, Silberschatz & Galvin & Gagne ( http://codex.cs.yale.edu/avi/os-book/OS9/slide-dir/ ), John Wiley & Sons, (6-е издание, 2003 г.)