2011. Машбук (1114722), страница 17
Текст из файла (страница 17)
Если адрес принадлежит диапазону, то продолжается56обработка задачи, иначе же в системе возникает прерывание (т.н. прерывание по защитепамяти). Отметим, что предложенная модель в реальной аппаратуре может бытьреализована множеством способов, но главное, что при постановке программы наобработку операционная система (программным способом) задает значения указанныхрегистров границ, а дальнейшая проверка адресов осуществляется аппаратным способом.Рассмотрим следующий круг возникающих при мультипрограммном режимепроблем. Предположим, в нашей мультипрограммной системе (например, терминальномклассе) имеется единственное печатающее устройство, и есть несколько программ,которые выводят свои данные на печать данному устройству. Соответственно, есликаждая программа будет иметь доступ к командам управления конечными физическимиустройствами, то при совместной работе в режиме мультипрограммирования этипрограммы будут вперемешку обращаться к печатающему устройству и печатать на немпорции своих данных, что в итоге приведет к невозможности интерпретациинапечатанной информации.Другим примером может служить только что обсуждавшийся аппарат защитыпамяти.
Значения указанных регистров границ устанавливаются посредствомспециальных машинных команд (ОС настраивает границы, а аппаратура автоматическипроверяет). Представьте ситуацию, когда к указанным командам смогут обращатьсяпроизвольные программы: тогда смысла в аппарате защиты памяти просто не будет —любая программа сможет обойти этот режим подменой своих регистров границ.Рассмотрение представленных примеров должно наводить на мысль, что системадолжна каким-то способом ранжировать команды и в соответствии с этим ранжированиемограничивать доступ пользователей различных категорий к машинным командам.Решением стала аппаратная возможность работы центрального процессора в двухрежимах: в режиме работы операционной системы (или привилегированном режиме,или режиме супервизора) и в пользовательском режиме (или непривилегированномрежиме, еще раньше использовался термин математического режима). В режимеработы ОС процессор может исполнить любую из своих машинных команд.
Если жепрограмма исполняется в пользовательском режиме, то ей доступно для исполнения лишьнекоторое подмножество машинных команд (если же при обработке такой программывстретится недопустимая команда, то в системе возникнет прерывание по запрещеннойкоманде). В частности, в состав запрещённых команд включаются все команды,обеспечивающие управление режимами центрального процессора, управлениефизическими устройствами и т.д.Тогда возникает вопрос, что же должна делать программа, обрабатываемая впользовательском режиме, для печати своих данных, например. Решений здесь можетбыть достаточно много, одним из которых может быть наличие в системе специальныхкоманд, интерпретируемых как обращения к операционной системе (которые в некоторыхсистемах рассматриваются как прерывания, в других системах — не как прерывания; мыбудем рассматривать их как прерывания по обращению к операционной системе).
Тогдапрограмма, работающая в непривилегированном режиме, может вызывать командыобращения к операционной системе, а через параметры передать необходимые данные,которые могут свидетельствовать о желании данной программы распечатать какую-либоинформацию на устройстве печати. Тогда схема организации печати данных наустройстве печати может выглядеть следующим образом. Операционная система получаетот пользователей (т.е. от пользовательских программ) заказы на печать, и для каждой изпрограммы она формирует некоторую таблицу или область памяти, в которой будетаккумулироваться информация, которую необходимо вывести на принтер. Тогда каждыйзапрос программ на печать порции данных не является реальным обращением кустройству печати, но свидетельствует лишь о том, что передаваемая порция данныхдолжна быть распечатана, а ОС их аккумулирует.
Реальная печать будет осуществлятьсяпри возникновении одного из трех событий. Во-первых, программа, посылающая данные57на печать, успешно завершилась. Это означает, что гарантированно она не будет болеепосылать данные на печать. Во-вторых, в программе обнаружилась фатальная ошибка, чтоведет к безусловному завершению этой программы, что опять-таки гарантируетотсутствие будущих запросов данной программы на печать. И, в-третьих, операционнаясистема может получить (от некоторого виртуального оператора – т.н.
планировщика)команду разгрузить буфер печати данной конкретной программы.И, наконец, ещё одна серьезная проблема, которая может возникнуть приорганизации мультипрограммного режима, связана с появлением в выполняемой втекущий момент программе семантической ошибки — программа зациклилась.Соответственно, если в этом цикле не встречаются команды, которые могут привести ктем или иным прерываниям, то в этом случае вся вычислительная система «зависает»:никакие новые задачи не ставятся на счет и пр. Решение данной проблемы может бытьдовольно простым: необходима функция управления временем.
Это означает, чтооперационная система должна контролировать время использования центральногопроцессора программами пользователей. Для этих целей компьютеру требуетсяпрерывание по таймеру. Резюмируя, можно сказать, что для реализациимультипрограммного режима необходимо наличие аппарата прерываний, и этот аппарат,как минимум, должен включать в себя аппарат прерывания по таймеру.
В этом случаезацикленная программа автоматически будет периодически прерываться, управлениепериодически будет передаваться операционной системе (ОС может, например, считатьвремя, которое текущий процесс использовал за последний сеанс работы с ЦП). Это даствозможность операционной системе принять решение – поставить на счет другуюпрограмму либо снять со счета (например, по команде пользователя) эту зависшуюпрограмму. Существуют две стратегии работы со временем.
Первая стратегия (котораяиспользуется в Windows, в «ширпотребовской» Unix) состоит в том, что любой процессберёт время ЦП до тех пор, пока его не убьют. Тем не менее, при этой стратегиизацикленная программа не будет никому мешать, т.к. ОС будет периодически получатьуправление и переключать процессы. Другая стратегия (которая обычно применяется длявысокопроизводительных машин) основывается на том, что процесс предварительнооговаривает, сколько времени ему может потребоваться. Если процесс пытаетсяпревысить это время, то ОС считает, что процесс зациклился.Задание для размышления – попробовать смоделировать корректнуюмультипрограммную систему, которая будет работать, имея аппарат защиты памяти,специальный режим и только прерывание по таймеру.
Например, вместо того, чтобыиметь прерывание по завершению обмена, можно периодически (по таймеру) простосчитывать какие-то регистры и их анализировать.Итак, требуются три аппаратных средства компьютера, необходимых дляподдержки мультипрограммного режима: аппарат защиты памяти, специальные режимыисполнения команд и аппарат прерываний, состоящий, как минимум, из аппаратапрерывания по таймеру. Отметим, что специальных режимов может быть больше двух:т.е.
часть команд доступна всем программам, часть команд могут выполняться лишь взащищенном режиме, еще часть — в более защищенном режиме, и т.д.Может возникнуть резонный вопрос, как происходит включение режимасупервизора. Ответ здесь будет зависеть от архитектуры конкретной системы. Например,в некоторых архитектурах считается, что операционная система занимает некотороепредопределенное адресное пространство физической памяти. И если управлениепопадает на эту область, то включается режим операционной системы.
А вот выключениережима операционной системы может происходить программно: например, операционнаясистема, запуская процесс, может предварительно программным способом установить егов непривилегированный режим.581.2.6.2 Проблемы, возникающие при исполнении программРассмотрим круг проблем, которые, так или иначе, возникают при исполнениипрограмм. Эти проблемы приводят к снижению эффективности системы.Вложенные обращения к подпрограммам (Рис.
45). Несколько лет назадпроводились исследования, которые анализировали распределение времени исполненияпрограммы на разных компонентах программного кода, и выяснилось, что в системах,рассчитанных не только (и не столько) на выполнение математических вычислений(например, в системах обработки текстовой информации), порядка 70% времени тратитсяна обработку входов и выходов из подпрограмм. Это объясняется тем, что при обращениик подпрограмме необходимо зафиксировать адрес возврата, сформировать параметры,передаваемые вызываемой подпрограмме, как-то сохранить регистровый контекст (т.е.сохранить содержимое тех регистров, которые использовались в программе на данномтекущем уровне).g:.........CALL f(x).........Сохранение/восстановлениерегистров, используемых вподпрограмме g.Рис. 45.
Вложенные обращения к подпрограммам.Накладные расходы при смене обрабатываемой программы. Это аналогичнаяпроблема, связанная со сменой обрабатываемых программ (или процессов): операционнаясистема должна сохранить контексты процессов. К этому необходимо добавить, что всовременных компьютерах количество одновременно обрабатываемых процессов оченьвелико, что лишь увеличивает объем возникающих накладных расходов.Перемещаемость программы по ОЗУ. Рассмотрим процесс полученияисполняемого кода программы (Рис. 46).