Лекции по дисциплине системы реального времени тема аппаратнопрограммные средства и комплексы реального времени
Скачать 1.67 Mb.
|
Лекция 2.2. Управление задачами 1. Переключение контекста. 2. Прерывания. 1. Переключение контекста 32 Рассмотрим сущность понятия «переключение контекста». Контекст задачи - это набор данных, задающих состояние процессо- ра при выполнении задачи. Он обычно совпадает с набором регистров, дос- тупных для изменения прикладной задачи. В системах с виртуальной памя- тью может включать регистры, отвечающие за трансляцию виртуального адреса в физический (обычно доступны на запись только операционной сис- теме). Переключение задач - это переход процессора от исполнения одной задачи к другой. Может быть инициировано: 1. Планировщиком задач (например, освободился ресурс и в очередь готовых задач попала ожидавшая его приоритетная задача), 2. Прерыванием (аппаратным прерыванием, например, запрос на об- служивание от внешнего устройства), 3. Исключением (программным прерыванием, например, системный вызов). Поскольку контекст полностью определяет, какая задача будет вы- полняться, то часто термины «переключение задач» и «переключение кон- текста» употребляют как синонимы. Диспетчер (dispatcher) - это модуль (программа), отвечающий за пере- ключение контекста. При переключении задач диспетчеру необходимо: 1) корректно остановить работающую задачу, для этого необходимо: а) выполнить инструкции текущей задачи, уже загруженные в процессор, но еще не выполненные (современные процессоры имеют внутри себя конвейеры инструкций, куда могут загружаться более 10 инструкций, некоторые из которых могут быть сложными, например, записать в память 32 регистра), обычно это делается аппаратно; б) сохранить в оперативной памяти регистры текущей задачи; 2) найти, подготовить и загрузить затребованную задачу (обработчик прерываний - в этом случае требуется еще установить источник прерывания); 3) запустить новую задачу, для этого: а) восстановить из оперативной памяти регистры новой задачи (со- храненные ранее, если она до этого уже работала); б) загрузить в процессор инструкции новой задачи (современные про- цессоры начинают выполнять инструкции только после загрузки конвейера), эта фаза делается аппаратно. Каждая из этих стадий вносит свой вклад в задержку при переключе- нии контекста. Поскольку любое приложение реального времени должно обеспечить выдачу результата в заданное время, то эта задержка должна быть мала, детерминирована и известна. Это число является одной из важнейших характеристик ОСРВ. 2. Прерывания Прерывания являются основным источником сообщения внешним устройствам о готовности данных или необходимости передачи данных. По 33 самому назначению систем реального времени, прерывания являются одним из основных объектов в ОСРВ. Время реакции на прерывание - это время переключения контекста от текущей задачи к процедуре обработки прерывания. В многозадачных сис- темах время ожидания прерывания (события) может быть использовано другой задачей. Прерывание может произойти во время обработки систем- ного вызова и во время критической секции. Рассмотрим суть понятия прерывания. Прерывания представляют собой механизм, позволяющий координи- ровать параллельное функционирование отдельных устройств вычисли- тельной системы и реагировать на особые состояния, возникающие при работе процессора. Таким образом, прерывание - это принудительная передача управления от выполняемой программы к системе (а через нее - к соответствующей программе обработки прерывания), происходящая при возникновении определенного события. Идея прерываний была предложена в середине 50-х годов и можно без преувеличения сказать, что она внесла наиболее весомый вклад в развитие вычислительной техники. Основная цель введения прерываний - реализация асинхронного режима работы и распараллеливание работы отдельных устройств вычислительного комплМекесхаа.низм прерываний реализуется аппаратно-программными средствами. Структуры систем прерывания (в зависимости от аппаратной архитектуры) могут быть самыми разными, но все они имеют одну общую особенность - прерывание непременно влечет за собой изменение порядка выполнения команд процессором. Механизм обработки прерываний независимо от архитектуры вычис- лительной системы включает следующие элементы: 1. Установление факта прерывания (прием сигнала на прерывание) и идентификация прерывания. 2. Запоминание состояния прерванного процесса. Состояние процесса определяется, прежде всего, значением счетчика команд (адресом следующей команды, который, например, в i80x86 определяется регистрами CS и IP – указателем команды, содержимым регистров процессора и может включать также спецификацию режима, например, режим пользовательский или привилегированный) и другую информацию. 3. Управление аппаратно передается подпрограмме обработки преры- вания. В простейшем случае в счетчик команд заносится начальный адрес подпрограммы обработки прерываний, а в соответствующие регистры - информация из слова состояния. В более развитых процессорах осуществляется достаточно сложная процедура определения начального адреса соответствующей подпрограммы обработки прерывания, и не менее сложная процедура инициализации рабочих регистров процессора. 4. Сохранение информации о прерванной программе, которую не уда- лось спасти на шаге 2 с помощью действий аппаратуры. В некоторых вы- числительных системах предусматривается запоминание довольно большого объема информации о состоянии прерванного процесса. 34 5. Обработка прерывания. Эта работа может быть выполнена той же подпрограммой, которой было передано управление на шаге 3, но в ОС чаще всего она реализуется путем последующего вызова соответствующей подпрограммы. 6. Восстановление информации, относящейся к прерванному процессу (этап, обратный шагу 4). 7. Возврат в прерванную программу. Шаги 1 - 3 реализуются аппаратно, а шаги 4 - 7 - программно. На рис. 1 показано, что при возникновении запроса на прерывание ес- тественный ход вычислений нарушается и управление передается программе обработки возникшего прерывания. При этом средствами аппаратуры сохраняется (как правило, с помощью механизмов стековой памяти) адрес той команды, с которой следует продолжить выполнение прерванной про- граммы. После выполнения программы обработки прерывания управление возвращается прерванной ранее программе посредством занесения в указа- тель команд сохраненного адреса команды. Однако такая схема используется только в самых простых программных средах. В мультипрограммных системах обработка прерываний происходит по более сложным схемам. Главными функциями механизма прерываний являются: - распознавание или классификация прерываний; - передача управления соответственно обработчику прерываний; - корректное возвращение к прерванной программе. Рисунок 1. - Обработка прерывания 35 Переход от прерываемой программы к обработчику и обратно должен выполняться как можно быстрее. Одним из быстрых методов является ис- пользование таблицы, содержащей перечень всех допустимых прерываний и адреса соответствующих обработчиков. Для корректного возвращения к прерванной программе перед передачей управления обработчику прерываний содержимое регистров процессора запоминается либо в памяти с прямым доступом, либо в системном стеке. Прерывания, возникающие при работе вычислительной системы, разделяются на два основных класса: внешние (асинхронные) и внутренние (синхронные). Внешние прерывания вызываются асинхронными событиями, кото- рые происходят вне прерываемого процесса, например: прерывания от таймера; прерывания от внешних устройств (прерывания по вводу/выводу); прерывания по нарушению питания; прерывания с пульта оператора вычислительной системы; прерывания от другого процессора или другой вычислительной сис- темы. Внутренние прерывания вызываются событиями, которые связаны с работой процессора и являются синхронными с его операциями. Примерами являются следующие запросы на прерывания: при нарушении адресации (в адресной части выполняемой команды указан запрещенный или несуществующий адрес, обращение к отсутствующему сегменту или странице при организации механизмов виртуальной памяти); при наличии в поле кода операции незадействованной двоичной ком- бинации; при делении на нуль; при переполнении или исчезновении порядка; при обнаружении ошибок четности, ошибок в работе различных уст- ройств аппаратуры средствами контроля. Могут существовать прерывания при обращении к супервизору ОС -в некоторых компьютерах часть команд может использовать только ОС, а не пользователи. Соответственно в аппаратуре предусмотрены различные режимы работы, и пользовательские программы выполняются в режиме, в котором эти привилегированные команды не исполняются. При попытке использовать команду, запрещенную в данном режиме, происходит внутреннее прерывание, и управление передается супервизору ОС. К привилегированным командам относятся и команды переключения режима работа центрального процессора. Наконец, существуют собственно программные прерывания.Эти прерывания происходят по соответствующей команде прерывания, то есть по этой команде процессор осуществляет практически те же действия, что и при обычных внутренних прерываниях. Данный механизм был специально вве- ден для того, чтобы переключение на системные программные модули про- 36 исходило не просто как переход в подпрограмму, а точно таким же образом, как и обычное прерывание. Этим обеспечивается автоматическое переключе- ние процессора в привилегированный режим с возможностью исполнения любых команд. Сигналы, вызывающие прерывания, формируются вне процессора или в самом процессоре; они могут возникать одновременно. Выбор одного из них для обработки осуществляется на основе приоритетов, приписанных каждому типу прерывания. Очевидно, что прерывания от схем контроля процессора должны обладать наивысшим приоритетом (если аппаратура работает неправильно, то не имеет смысла продолжать обработку информации). На рис. 2 изображен обычный порядок обработки прерываний в зависимости от типа прерываний. Учет приоритета может быть встроен в технические средства, а также определяться операционной системой, то есть кроме аппаратно реализованных приоритетов прерывания большинство вычислительных машин и комплексов допускают программно-аппаратное управление порядком обработки сигналов прерывания. Второй способ, дополняя первый, позволяет применять различные дисциплины обслуживания прерываний. Наличие сигнала прерывания не обязательно должно вызывать преры- вание исполняющейся программы. Процессор может обладать средствами за- щиты от прерываний: отключение системы прерываний, маскирование (за- прет) отдельных сигналов прерывания. Программное управление этими сред- ствами (существуют специальные команда для управления работой системы прерываний) позволяет операционной системе регулировать обработку сиг- налов прерывания, заставляя процессор обрабатывать их сразу по приходу, откладывать их обработку на некоторое время или полностью игнорировать. Обычно операция прерывания выполняется только после завершения выполнения текущей команды. Поскольку сигналы прерывания возникают в произвольные моменты времени, то на момент прерывания может существо- вать несколько сигналов прерывания, которые могут быть обработаны только последовательно. Чтобы обработать сигналы прерывания в разумном порядке им присваиваются приоритеты. Сигнал с более высоким приоритетом обра- батывается в первую очередь, обработка остальных сигналов прерывания от- кладывается. 37 Рисунок 2. - Распределение прерываний по уровням приоритета Программное управление специальными регистрами маски (маскиро- вание сигналов прерывания) позволяет реализовать различные дисциплины обслуживания: с относительными приоритетами, то есть обслуживание не прерывается даже при наличии запросов с более высокими приоритетами. После окончания обслуживания данного запроса обслуживается запрос с наивысшим приоритетом. Для организации такой дисциплины необходимо в программе обслуживания данного запроса наложить маски на все остальные сигналы прерывания или просто отключить систему прерываний; с абсолютными приоритетами, то есть всегда обслуживается прерывание с наивысшим приоритетом. Для реализации этого режима необходимо на время обработки прерывания замаскировать все запросы с более низким приоритетом. При этом возможно многоуровневое прерывание, то есть прерывание программ обработки прерываний. Число уровней прерывания в этом режиме изменяется и зависит от приоритета запроса; по принципу стека, или, как иногда говорят, по дисциплине LСFS (lаst соmе first sегvеd - последним пришел - первым обслужен), то есть запросы с более низким приоритетом могут прерывать обработку прерывания с более высоким приоритетом. Дли этого необходимо не накладывать маски ни на один сигнал прерывания и не выключать систему прерываний. Следует особо отметить, что для правильной реализации последних двух дисциплин нужно обеспечить полное маскирование системы прерываний при выполнении шагов 1-4 и 6-7. Это необходимо для того, чтобы не потерять запрос и правильно его обслужить. Многоуровневое прерывание должно происходить на этапе собственно обработки прерывания, а не на этапе перехода с одного процесса на другой. Управление ходом выполнения задач со стороны ОС заключается в организации реакций на прерывания, в организации обмена информацией (данными и программами), предоставлении необходимых ресурсов, в дина- 38 мике выполнения задачи и в организации сервиса. Причины прерываний оп- ределяет ОС (модуль, который называют супервизором прерываний), она же и выполняет действия, необходимые при данном прерывании и в данной си- туации. Поэтому в состав любой ОС реального времени, прежде всего, вхо- дят программы управления системой прерываний, контроля состояний задач и событий, синхронизации задач, средства распределения памяти и управления ею, а уже потом средства организации данных (с помощью файловых систем и т. д.). Cовременная ОС реального времени должна вносить в аппаратно-программный комплекс нечто большее, нежели просто обеспечение быстрой реакции на прерывания. При появлении запроса на прерывание система прерываний иденти- фицирует сигнал и, если прерывания разрешены, управление передается на соответствующую подпрограмму обработки. Из рис.1 видно, что в подпро- грамме обработки прерывания имеются две служебные секции. В первой секции осуществляется сохранение контекста прерванной задачи, который не смог быть сохранен на 2-м шаге, и последняя, заключительная секция, в которой, наоборот, осуществляется восстановление контекста. Чтобы система прерываний не среагировала повторно на сигнал запроса на прерывание, она обычно автоматически «закрывает» (отключает) прерывания, поэтому необходимо потом в подпрограмме обработки прерываний вновь включать систему прерываний. Установка рассмотренных режимов обработки прерываний осуществляется в конце первой секции подпрограммы обработки. Таким образом, на время выполнения центральной секции прерывания разрешены. На время работы заключительной секции подпрограммы обработки система прерываний должна быть отключена, и после восстановления контекста вновь включена. Поскольку эти действия необходимо выполнять практически в каждой подпрограмме обработки прерываний, во многих операционных системах первые секции подпрограмм обработки прерываний выделяются в специальный системный программный модуль, называемый супервизором прерываний. Супервизор прерываний, прежде всего, сохраняет в дескрипторе теку- щей задачи рабочие регистры процессора, определяющие контекст прерывае- мого вычислительного процесса. Далее он определяет ту подпрограмму, ко- торая должна выполнить действия, связанные с обслуживанием текущего за- проса на прерывание. Перед тем как передать управление этой подпрограмме, супервизор прерываний устанавливает необходимый режим обработки прерывания. После выполнения подпрограммы обработки прерывания управление вновь передается супервизору, на этот раз уже на тот модуль, который занимается диспетчеризацией задач. И уже диспетчер задач, в свою очередь, в соответствии с принятым режимом распределения процессорного времени восстановит контекст той задачи, которой будет решено выделить процессор. В данном случае нет непосредственного возврата в прерванную ранее программу прямо из самой подпрограммы обработки прерывания. Для прямого непосредственного возврата достаточно адрес возврата сохранить в стеке, что и делает аппаратура процессора. При 39 этом стек легко обеспечивает возможность возврата в случае вложенных прерываний, поскольку он всегда реализует дисциплину (последним пришел – первым обслужен). Рисунок 3. - Обработка прерывания с использованием супервизора прерываний Однако если бы контекст процессов сохранялся в стеке, как это обычно реализуется аппаратурой, а не в описанных выше дескрипторах задач, то не было бы возможности гибко подходить к выбору той задачи, которой нужно передать процессор после завершения работы подпрограммы обработки прерывания. Это только общий принцип. В конкретных процессорах и в конкретных ОС могут существовать некоторые отступления от рассмотренной схемы и/или дополнения к ней. Например, в современных процессорах часто имеются специальные аппаратные возможности для сохранения контекста прерываний. Лекция 2.3. Управление системными ресурсами 1. Однопроцессорная и распределенная архитектуры. 2. Функции операционных систем в среде реального времени. 3. Управление процессором и состояния процесса. 4. Стратегии выбора процесса. 1. Однопроцессорная и распределенная архитектуры Рассмотрим распределенные системы (distributed systems), которые по своей природе больше подходят для управления сложными процессами. К основным преимуществам распределенных систем относятся: - экономичность; - надежность (при отказе нескольких процессоров остальные продол- жают работать); - возможность подобрать аппаратные средства в соответствии с кон- кретными требованиями. 40 Говоря о распределенной системе, необходимо иметь в виду, каким способом достигается распределение ресурсов. Одна крайность - когда един- ственным общим ресурсом является сеть, соединяющая ЭВМ, каждая из ко- торых работает независимо и лишь обменивается сообщениями с остальны- ми. Другая крайность - реально распределенная сетевая операционная систе- ма, предоставляющая пользователю гомогенную среду, не зависящую от ап- паратной платформы. Пользователь может вводить произвольные команды, а операционная система находит наиболее подходящий способ и место их вы- полнения. Распределенные системы используются в управлении процессами, по- скольку эти приложения являются принципиально распределенными и такая архитектура обеспечивает более полное соответствие между аппаратными и программными средствами и управляемым объектом. Сложный технологиче- ский процесс можно разбить на несколько уровней, на каждом из которых собираются и обобщаются (агрегируются) данные, передающиеся на более высокие уровни. Такой тип распределенной системы более экономичен, чем централизованная система с одним процессором, она надежна в том смысле, что отказ одного из компонентов не нарушает работу других (при условии, что система хорошо структурирована), и ее можно построить таким образом, чтобы она в максимальной степени соответствовала управляемому процессу. Однако чисто аппаратный подход к надежности не решает всех про- блем. В распределенной системе процессы, исполняющиеся на разном обо- рудовании, зависят и друг от друга, и от коммуникаций. Если процесс или оборудование в одном узле перестанет работать или возникнут проблемы с коммуникациями, то остановится исполнение не только конкретного процес- са, но и процессов, зависящих от него, потому, например, что они ждут отве- та на свои вопросы. По сравнению с централизованными - распределенные системы требу- ют принципиально иных программных средств, поскольку такие системы тесно связаны сетью. Сетевая операционная система должна управлять как ресурсами отдельных ЭВМ, так и всей сети. Поэтому функции операционной системы нельзя отделять от функциональных свойств сети, а работа сети ока- зывает заметное влияние на работу распределенной системы. Фактически се- тевые операционные системы имеют многоуровневую структуру, аналогично стеку коммуникационных протоколов. Главным различием между однопроцессорной и распределенной архи- тектурами является способ обмена информацией между процессами. Эта процедура наиболее важна при мультипрограммировании и программирова- нии в реальном времени. В однопроцессорной конфигурации обмен данными между процессами происходит через общую локальную память, очередность доступа к которой регулируется многозадачной операционной системой. В отличие от этого, в распределенной системе нет общей памяти как таковой, и процессы обмениваются информацией с помощью сообщений. Если один процесс должен передать информацию другому, то он формирует 41 сообщение и обращается к услугам операционной системы для передачи его по назначению. Этот принцип взаимодействия лежит в основе одной из наиболее важ- ных концепций распределенных операционных систем - модели "клиент- сервер". В этой модели процесс либо запрашивает услуги - клиент, либо пре- доставляет их - сервер. Очевидно, что один и тот же процесс может быть как клиентом, так и сервером. "Услуга" - это некоторая законченная (замкнутая) операция, в частности выполнение расчетов, прием внешних данных, опера- ция с устройством, например, вывод изображения на экран. В определенном смысле модель "клиент-сервер" можно рассматривать как расширенный ва- риант обращения к подпрограмме, при котором сервер играет роль подпро- граммы или системной процедуры. Модель "клиент-сервер" основана на обмене сообщениями между про- граммами. Если клиент и сервер исполняются на разных ЭВМ, а сообщения передаются через сеть, то система является распределенной. Чем больше вычислительные ресурсы процедур клиента и сервера и чем больше сложных функций они могут выполнять независимо, тем меньше число сообщений и, соответственно, нагрузка на сеть. Фактически важным преимуществом распределенных систем является то, что ресурсоемкие вы- числения можно выполнять локально и в результате уменьшить объем тра- фика, поскольку передается только информация, относящаяся к более высо- кому абстрактному уровню, чем локальные вычисления, то ecть некоторый итог локальных операций. Иными словами, в хорошо спроектированной сис- теме сообщения содержат информацию о цели ("установить опорное значе- ние х = 78.2"), а не о том, какие шаги следует для этого предпринять ("каково значение х в данный момент?", "х = 63", "увеличить на 16", "каково х сей- час?", "х = 79", уменьшить на 1", и т. д.). Промежуточные шаги выполняются локально при условии, что программное обеспечение спроектировано соответствующим образом. 2. Функции операционных систем в среде реального времени Операционная система (ОС, Operating System - OS) - это сложный про- граммный продукт, предназначенный для управления аппаратными и про- граммными ресурсами вычислительной системы. Она предоставляет каждо- му процессу виртуальную (логическую) среду, включающую в себя время процессора и память. "Виртуальная среда" - это концептуальное понятие. Ее характеристики могут, как совпадать, так и не совпадать с параметрами ре- ального оборудования. Многозадачность сейчас доступна почти на всех типах ЭВМ, и ее под- держка является одной из основных характеристик таких операционных сис- тем, как UNIX и Windows NT и выше. В первую очередь многозадачность должна обеспечивать распределение и защиту ресурсов. Первоначальной це- лью создания многозадачных систем, или систем разделения времени (time- sharing systems), было желание обеспечить одновременный доступ несколь- ких пользователей к дорогим вычислительным ресурсам и, соответственно, разделить между ними эксплуатационные расходы, то есть повысить эконо- 42 мическую эффективность оборудования. В системах реального времени це- лью многозадачного режима является изоляция друг от друга разных опера- ций и распределение рабочей нагрузки между отдельными программными модулями. Единственным "пользователем" в этом случае является управляе- мая система. В системах разделения времени, или многопользовательских системах, большое внимание уделяется защите и изоляции пользователей друг от друга с помощью паролей, управления доступом, учета использования ресурсов и т. д. Системы реального времени в этом смысле имеют меньше ограничений, поскольку разработчик всегда знает, что делает каждый модуль. В ситуациях, когда ценится каждая миллисекунда машинного времени, его нельзя тратить на дополнительные расходы по контролю доступа, поэтому файловые системы и механизмы защиты не являются важными компонентами операционных систем реального времени. Многопользовательские системы должны быть, в определенном смысле, "справедливыми", поскольку даже в режиме большой нагрузки нельзя допускать дискриминации ни одного пользователя. Наоборот, в приоритетных системах реального времени процессы четко разграничены с точки зрения права доступа к ресурсам процессора. В распределенной среде операционная система дополнительно выпол- няет функции сопряжения программ с сетью и управления обменом данными и сообщениями между ЭВМ. В сетевых операционных системах каждая ЭВМ имеет высокую степень автономности. Общесистемные требования к обмену информацией позволяют взаимодействовать процессам, даже если они рабо- тают под управлением разных операционных систем, при условии, что каж- дая из них обладает необходимыми сетевыми возможностями. 3. Управление процессором и состояния процесса Основными объектами в многозадачной среде являются процессы или задачи, описываемые своим контекстом. На одном процессоре в любой мо- мент времени может исполняться только одна задача. Контекст исполняемой задачи всегда можно "заморозить", сохранив содержимое регистров процес- сора. При остановке текущей задачи процессор продолжает исполнение дру- гих задач. Таким образом, процессор есть ограниченный ресурс, который распределяется между всеми задачами. На одном процессоре для организации многозадачного режима выпол- нение каждой задачи разбивается на несколько коротких интервалов (рис.1). Процессор выполняет часть первой задачи, затем второй, третьей и т. д. Вре- менной интервал, выделенный для каждой задачи, составляет, например, 10 миллисекунд. Внешний эффект разделения процессорного времени между задачами состоит в параллельном выполнении n задач. Когда n задач выполняются в системе параллельно каждая из них в среднем монопольно "располагает" процессором с производительностью 1/n, т. е. работает (развивается) на вир- туальном процессоре, производительность которого в n раз меньше, чем у реального физического процессора. Если вместо одного используется не- 43 сколько процессоров, то это просто другая реализация того же самого логи- ческого принципа. В первом случае процессы разделены во времени, во вто- ром – в пространстве. Если исключить накладные расходы на планирование и межзадачное взаимодействие, то при выполнении n процессов на k одинако- вых процессорах каждому процессу в среднем выделяется виртуальный про- цессор с производительностью, равной k/n части от производительности од- ного физического процессора. Рисунок 1. - Принцип организации многозадачного режима: а - внешний эффект; б - распределение времени процессора Простейшая многозадачная однопроцессорная система состоит из процедуры, сохраняющей контекст текущего процесса в стеке или в определенной области памяти и восстанавливающей контекст другого процесса, исполнение которого возобновляется с того места, где он был прерван. Системная программа, выбирающая один из готовых для исполнения процессов, называется планировщиком (scheduler). Стратегии выбора достаточно разнообразны и меняются от одной операционной системы к другой, однако чаще всего используется какой-либо механизм на основе приоритетов. Планировщик работает как один из процессов, который автоматически получает управление после каждого прерывания текущего процесса. Операции по переключению процессов критичны по времени и должны осуществляться с максимальной эффективностью. На процессорах, первоначально не разработанных для многозадачного режима, процедура сохранения и восстановления контекста - переключение процессов - реализуется длинной последовательностью стандартных инструкций процессора. В набор команд процессора, спроектированного для работы в многозадачном режиме, входят специальные инструкции для сохранения и восстановления контекста. Переменные процесса не входят в состав контекста, и сохранять их специально нет необходимости, поскольку они хранятся в памяти, выделенной процессу и защищенной операционной системой от доступа других процессов. Планировщик вызывается обычно после обработки каждого прерыва- ния. Если используется стратегия переключения процессов на основе кванто- вания времени (рис. 1), необходимо иметь внешний по отношению к процес- сору интервальный таймер, вырабатывающий прерывания по истечении 44 кванта времени (time slice), выделенного процессу. При возникновении пре- рывания исполнение текущего процесса приостанавливается и проверяется, должен ли быть прерван текущий процесс и загружен новый. Принудитель- ная приостановка текущего процесса для передачи управления другому про- цессу называется вытеснением (preemption). Продолжительность кванта времени влияет на производительность системы. При коротком кванте улучшается общее время обслуживания ко- ротких процессов. Если величина кванта сопоставима с временем, необходимым для переключения процессов, то большая часть ресурсов процессора будет уходить на планирование и переключение. Если величина кванта слишком большая, увеличивается время ожидания процессов и, соответственно, время реакции. Процесс исполняется до тех пор, пока не произойдет одно из следую- щих событий: - истек выделенный ему квант времени; - процесс заблокирован, например, ждет завершения операции вво- да/вывода; - процесс завершился; - вытеснен другим процессом, имеющим более высокий приоритет, например обработчиком прерываний. В многозадачной среде процесс может находиться в одном из трех со- стояний (рис. 2). • Готов (ready). Процесс может начать исполнение, как только освобо- дится процессор. • Исполнение (running, executing). Процесс исполняется в данный мо- мент, т. е. процессор исполняет его код. • Ожидание, заблокирован (waiting, locked). Для продолжения работы процессу не хватает какого-либо ресурса, за исключением ЦП, либо он ждет наступления внешнего события. Рисунок 2. - Состояния процесса На рис. 2 также показаны возможные переходы из одного состояния в другое: 1. От "Загрузочный модуль на диске" к "Готов". Программа загружается (load) в оперативную память, настраиваются относительные 45 адреса (relocation), выдёляются рабочие области для данных, кучи и стека с соответствующими указателями и создается контекст процесса. 2. От "Готов" к "Исполнение". Планировщик выбирает первый в очереди готовых процессов и передает ему управление. 3. От "Исполнение" к "Готов". Процесс либо исчерпал свой квант вре- мени, либо появился готовый для исполнения процесс с более высоким при- оритетом. 4. От "Исполнение" к "Ожидание". Для дальнейшего развития процесс должен ждать наступления какого-либо внешнего события (завершения опе- рации ввода/вывода или освобождения ресурса, например доступа к памяти, заблокированной другим процессом, или сигнала от другого процесса и т. п.). Иногда процесс переводится в состояние ожидания до истечения некоторого интервала времени с помощью явной инструкции в его программе. 5. От "Ожидание" к "Готов". Когда ожидаемое событие произошло или истекло заданное время, процесс переводится в состояние "Готов" и помещается в очередь готовых процессов, откуда затем выбирается планировщиком. 6. После выполнения последней инструкции программы операционная система удаляет процесс из памяти и освобождает все выделенные ему ре- сурсы, включая память. 4. Стратегии выбора процесса Существует несколько возможных стратегий выбора готовых процес- сов из очереди. Для определения той или иной стратегии необходимо прини- мать во внимание несколько противоречащих друг другу факторов - общее время, необходимое для решения задачи, ограничение на время реакции, важность и т. п. Рассмотрим две стратегии аналогичные тем, которые приме- няются при арбитраже шины. Наиболее простой стратегией выбора является циклический (round- robin) метод - процессы выбираются последовательно один за другим в фик- сированном порядке и через равные интервалы времени. Основное достоин- ство метода - простота, однако, поскольку процессам с различными требова- ниями выделяются равные ресурсы процессора, некоторые из них обслужи- ваются неадекватно своим потребностям. Более сложный принцип выбора основан на приоритетах (priorities). При каждом переключении планировщик передает управление готовому процессу с наивысшим приоритетом. Приоритет присваивается процессу в момент его создания и остается постоянным в течение всего времени - стати- ческий приоритет (static priority). Такой приоритет, как правило, определяет- ся на основе информации, предоставленной пользователем. Планирование на основе статических приоритетов может привести к неприятным ситуациям. Процесс с наивысшим приоритетом, если он не на- ходится в состояния ожидания, будет всегда выбираться для исполнения и практически полностью занимать процессор. Нетривиальным является также выбор между процессами с одинаковым приоритетом. Для исключения по- добной ситуации применяется какой-либо алгоритм динамического назначе- 46 ния приоритетов (dynamic priority allocation). Haпример, планировщик сни- жает приоритет исполняемого процесса на фиксированную величину. В ре- зультате его приоритет будет ниже, чем у другого готового процесса, кото- рый затем и выбирается для исполнения. Таким образом, обеспечивается вы- полнение всех процессов. Через некоторое время ожидающим процессам возвращаются номинальные значения их приоритетов. Этот метод обеспечи- вает исполнение процессов даже с низким приоритетом и гарантирует, что процесс с высоким начальным приоритетом не будет непрерывно занимать процессор. Разница в первоначально назначенных приоритетах приводит к тому, что процессы с более высокими приоритетами будут получать управление чаще, чем другие. Процессы, обращение к которым происходит более интен- сивно и/или время реакции которых ограничено, получают в начальный мо- мент более высокие приоритеты; менее важным процессам, для которых до- пустима отложенная реакция, присваиваются более низкие приоритеты. Планирование процессов, основанное на приоритетах, работает хоро- шо, только если разные процессы имеют неодинаковые приоритеты. При- своение наивысших приоритетов всем процессам не повышает скорость ис- полнения, так как это не увеличивает быстродействие процессора, - каждый процесс будет ждать в очереди до тех пор, пока все остальные не будут вы- полнены. Система, в которой всем процессам присвоены одинаковые при- оритеты, работает по циклическому принципу. Наилучшие результаты дости- гаются в системе реального времени, если относительные приоритеты тща- тельно выбраны и сбалансированы. |