Реализация понятия последовательного процесса в ос

Чтобы ОС могла управлять процессами, она должна располагать полной информацией о них. Для этого на каждый процесс заводится специальная информационная структура, называемая дескриптором процесса (описателем задач, блоком управления задачей). В общем случае дескриптор процесса содержит следующую информацию:
— идентификатор процесса (PID);
— тип (класс) процесса, по которому супервизор определяет правила обслуживания;
— приоритет процесса, по которому супервизор предоставляет ресурсы;
— переменную состояния (готов к работе, в состоянии выполнения, ожидание устройства ввода/вывода и т.д.);
— защищенную область памяти, в которой хранятся регистры процессора, если процесс прерывается, не закончив работу. Эта область называется контекстом задачи;
— информацию о ресурсах, которыми процесс владеет или имеет право пользоваться;
— место (или адрес) памяти для общения с другими процессами;
— параметры времени запуска;
— в случае отсутствия системы управления файлами – адрес задачи на диске в ее исходном состоянии и адрес на диске, куда она выгружается из оперативной памяти.

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

Процессы и треды

Для реализации «мультизадачности» было введено понятие «легковесных» процессов, которые в настоящее время получили названия потоки или треды (нити).
Понятие процесс в плоскости ОС подчеркивает их обособленность:
— у каждого процесса свое виртуальное адресное пространство;
— каждому процессу выделяются свои ресурсы – файлы, семафоры и т.д.

Обособленность процессов нужна для защиты процессов друг от друга, т.к. они, используя общие ресурсы вычислительной системы, постоянно конкурируют друг с другом. Процессы не связаны между собой и могут принадлежать различным пользователям, разделяющим одну вычислительную систему. ОС считает процессы несвязанными и независимыми.
В самих процессах также имеется внутренний параллелизм, использование которого позволяет повысить производительность вычислительной системы. Например, некоторые операции, выполняемые приложением, могут требовать большого количества процессорного времени, в этом случае пользователь долго будет ждать результата. Если программные модули, выполняющие такие длительные операции, оформить в виде самостоятельных «подпроцессов» (легковесных или облегченных потоков, тредов, «задач»), то у пользователя появляется возможность параллельно выполнять несколько операций в рамках одного процесса. Для этих задач ОС не создает полноценной виртуальной машины:
— задачи не имеют собственных ресурсов;
— находятся в том же виртуальном адресном пространстве, что и данный процесс;
— могут пользоваться теми же файлами, виртуальными устройствами и прочими ресурсами.

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

Прерывания

Прерывания – механизм, позволяющий координировать параллельное функционирование отдельных устройств вычислительной системы и реагировать на особые ситуации, возникающие при работе процессора. Прерывания – принудительная передача управления от выполняемой программы к системе, происходящее при возникновении определенного события.
Основная цель введения прерываний – реализация асинхронного режима работы и распараллеливание работы отдельных устройств вычислительного комплекса.
Механизм прерываний реализуется аппаратно-программным способом. Прерывание всегда влечет за собой изменение порядка выполнения команд процессором.
Механизм обработки прерываний включает следующие шаги:
1) установление факта прерывания и его идентификация;
2) запоминание состояния прерванного процесса (счетчика команд, содержимого регистров процессора, спецификации режима и др.);
3) аппаратная передача управления подпрограмме обработки прерываний;
4) сохранение информации о прерванной программе, которую не удалось сохранить на шаге 2 с помощью действий аппаратуры, иногда большого объема информации;
5) обработка прерываний;
6) восстановление информации, относящейся к прерванному процессу;
7) возврат в прерванную программу.
Шаги 1 – 3 реализуются аппаратно, а шаги 4 –7 программно.
Главные функции механизма прерываний:
— распознавание или классификация прерываний;
— передача управления на обработку прерываний;
— корректное возвращение к прерванной программе.
Прерывания, возникающие при работе вычислительной системы, можно разделить на два основных класса:
— внешние (асинхронные);
— внутренние (синхронные).
Внешние прерывания вызываются асинхронными событиями, которые происходят вне прерываемого процесса, например:
— прерывания от таймера;
— прерывания от внешнего устройства (прерывания по вводу/выводу);
— прерывания по нарушению питания;
— прерывания с пульта оператора вычислительной системы;
— прерывания от другого процессора или другой вычислительной системы.
Внутренние прерывания вызываются событиями, которые связаны с работой процессора и являются синхронными с его операциями, например:
— нарушение адресации;
— наличие в поле адреса несуществующей инструкции;
— деление на нуль;
— переполнение или исчезновение порядка;
— ошибка четности;
— ошибка в работе различных аппаратных устройств.
Собственно программные прерывания происходят по соответствующей команде прерывания, то есть по этой команде процессор производит те же действия, что и при обычных внутренних прерываниях. Данный механизм введен для того, чтобы переключение на системные программные модули происходило не как переход в подпрограмму, а как обычное прерывание. Этим обеспечивается автоматическое переключение процессора в привилегированный режим с возможностью выполнения всех команд.
Сигналы, вызывающие прерывания, формируются в процессоре или вне его, они могут возникнуть одновременно. Выбор одного их них происходит на основе приоритетов, установленных для каждого их них. Наивысшим приоритетом обладают прерывания от схем контроля процессора. Учет приоритетов может быть встроен в технические средства или может определяться операционной системой. Программно-аппаратное управление порядком обработки сигналов прерывания позволяет применять различные дисциплины обслуживания прерываний.
Распределение прерываний по уровню приоритета (от низкого к высокому):
— программные прерывания;
— прерывания от внешних устройств: терминалов;
— прерывания от внешних устройств: сетевого оборудования;
— прерывания от внешних устройств: магнитных дисков;
— прерывания от системного таймера;
— прерывания от средств контроля процессора.
Процессор может обладать средствами защиты от прерываний:
— отключение системы прерываний;
— маскирование (запрет) отдельных видов прерываний.
Программное управление средствами защиты от прерываний позволяет ОС регулировать обработку сигналов прерывания:
— обрабатывать сразу при поступлении;
— откладывать обработку на некоторое время;
— полностью игнорировать.
Обычно операция прерывания выполняется только после завершения выполнения текущей команды.
Сигналы прерывания возникают в произвольные моменты времени, поэтому к моменту обработки может накопиться несколько сигналов. Сигналам прерывания присваиваются приоритеты, в первую очередь обрабатывается сигнал с более высоким приоритетом.
Программное управление специальными регистрами маски (маскирование сигналов прерывания) позволяет реализовать различные дисциплины обслуживания:
— с относительными приоритетами, обслуживание не прерывается даже при наличии запросов с более высоким приоритетом. В программе обслуживания данного запроса следует наложить маски на все остальные сигналы прерывания или просто отключить систему прерываний;
— с абсолютными приоритетами, обслуживается прерывание с наибольшим приоритетом. В программе обслуживания прерываний следует наложить маски на сигналы прерывания с более низким приоритетом. Возможно многоуровневое прерывание, то есть прерывание программы обработки прерывания, число уровней меняется и зависит от приоритета запроса;
— по принципу стека (последним пришел – первым обслужен), запросы с более низким приоритетом могут прервать обработку прерывания с более высоким приоритетом. В программе обслуживания прерываний не следует накладывать маски ни на один сигнал прерывания и отключать систему прерываний.
Управление ходом выполнения задач со стороны ОС заключается:
— в организации реакций на прерывание;
— в организации обмена информацией;
— в предоставлении необходимых ресурсов;
— в динамике выполнения задачи;
— в организации сервиса.
Причины прерываний определяет ОС (супервизор прерываний) и выполняет действия, необходимые при данном прерывании и в данной ситуации.
При появлении запроса на прерывание система прерываний идентифицирует сигнал и, если прерывание разрешено, управление передается на соответствующую подпрограмму обработки прерываний.
Подпрограмма обработки прерываний состоит их трех секций:
1) отключение прерываний, сохранение контекста прерванной программы, установка режима работы системы прерываний;
2) собственно тело программы обработки прерываний;
3) восстановление контекста прерванной ранее программы, установка прежнего режима работы системы прерываний.
1-я и 3-я секции подпрограммы обработки прерываний – служебные, сохраняют и восстанавливают контекст задач. Поскольку эти действия необходимо выполнять практически в каждой подпрограмме обработки прерывания, во многих ОС первые секции подпрограмм обработки прерываний выделяются в специальный системный модуль – супервизор прерываний.
Супервизор прерываний выполняет следующие действия:
— сохраняет в дескрипторе текущей задачи рабочие регистры процессора, определяющие контекст прерванной задачи;
— определяет программу, обслуживающую текущий запрос на прерывание;
— устанавливает необходимый режим обработки пребывания;
— передает управление подпрограмме обработки прерывания.
После выполнения подпрограммы обработки прерывания управление передается супервизору в модуль управления диспетчеризацией задач. Диспетчер задач производит:
— выбор готовой к выполнению задачи (в соответствии с дисциплиной обслуживания)
— восстановление контекста задачи;
— установка прежнего режима работы системы прерываний;
— передачу управления выбранной задаче.
Из подпрограммы обработки прерывания нет возврата непосредственно в прерванную программу. Если бы контекст прерванной задачи сохранялся в стеке, а не в дескрипторе задачи, то не было бы возможности гибко выбирать на обслуживание задачу, после завершения подпрограммы обработки прерывания.
В конкретных процессорах и ОС могут быть изменения и дополнения к рассмотренной дисциплине обслуживания прерываний.

Основные виды ресурсов

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

Лекция 2: Процессы


Похожие статьи.

Понравилась статья? Поделиться с друзьями: