Курынин Р.В., Машечкин И.В., Терехин А.Н. - Конспект лекций по ОС (1114685), страница 16
Текст из файла (страница 16)
На рисунке проиллюстрированаситуация, когда при запуске обмена для Программы 1 на счет ставится Программа 2, котораявыполняется до некоторого момента времени t2, после чего она приостанавливается по тем илииным причинам, и запускается Программа 3. После завершения обмена на обработку вновьставится Программа 1, сменяя Программу 3 в момент времени t3.Программа 3Программа 2Программа 1Программа 1t1t2t3время обмена Программы 1(операции ввода-вывода)Рис.
43.Мультипрограммный режим.54Естественно, для предложенного подхода возникает вопрос, какие аппаратные средстванеобходимы для корректного функционирования указанной системы. Под корректнымфункционированиеммыбудемпонимать,чтовнезависимостиотстепенимультипрограммирования (от количества обрабатываемых в системе программ) результат работыконкретной программы не зависит от наличия и деятельности других программ.
Чтобы понять,какие требования предъявляются подобным системам, разберем сначала, какие трудности ипроблемы могут возникнуть при мультипрограммном режиме.Первая проблема, которая может возникнуть, — это влияние программ друг на друга.Очень нежелательна ситуация, когда одна программа может обратиться в адресное пространстводругой программы и считать оттуда данные (поскольку все-таки необходимо обеспечиватьконфиденциальность информации), и уж совсем плоха ситуация, когда другая программа можетчто-то записать в чужое адресное пространство. Соответственно, для корректногомультипрограммирования система должна обеспечивать эксклюзивное владение программвыделенными им участками памяти.
Если возникает задача обеспечения множественного доступак памяти, то это должно осуществляться с согласия владельца этой памятью. Итак, первоетребование к системе — это наличие т.н. аппарата защиты памяти. Сразу отметим, что режимзащиты памяти нельзя делать чисто программным способом, поскольку если данный режим будетобеспечивать операционная система (т.е. каждый раз сравнивать получаемый исполнительныйадрес, не вышел ли он за границы дозволенного программе диапазона адресов), топроизводительность вычислительной системы в целом будет крайне низкой.Реализация аппарата защиты памяти может быть достаточно простой: в процессоре могутбыть специальные регистры (регистры границ), в которых устанавливаются границы диапазонадоступных для исполняемой задачи адресов оперативной памяти.
Соответственно, когдаустройство управления в центральном процессоре вычисляет очередной исполнительный адрес(это может быть адрес следующей команды или же адрес необходимого операнда),автоматически проверяется, принадлежит ли полученный адрес заданному диапазону. Если адреспринадлежит диапазону, то продолжается обработка задачи, иначе же в системе возникаетпрерывание (т.н. прерывание по защите памяти).
Отметим, что предложенная модель вреальной аппаратуре может быть реализована множеством способов, но главное, что припостановке программы на обработку операционная система (программным способом) задаетзначения указанных регистров границ, а дальнейшая проверка адресов осуществляетсяаппаратным способом.Рассмотрим следующий круг возникающих при мультипрограммном режиме проблем.Предположим, в нашей мультипрограммной системе имеется единственное печатающееустройство, и есть несколько программ, которые выводят свои данные на печать данномуустройству. Соответственно, если каждая программа будет иметь доступ к командам управленияконечных физических устройств, то при совместной работе в режиме мультипрограммированияэти программы будут вперемешку обращаться к печатающему устройству и печатать на немпорции своих данных, что в итоге приведет к невозможности интерпретации напечатаннойинформации.Другим примером может служить только что обсуждавшийся механизм защиты памяти.Значения указанных регистров границ устанавливаются посредством специальных машинныхкоманд.
Представьте ситуацию, когда к указанным командам смогут обращаться произвольныепрограммы: тогда смысла в аппарате защиты памяти просто не будет — любая программа сможетобойти этот режим подменой своих регистров границ.Рассмотрение представленных примеров должно наводить на мысль, что система должнакаким-то способом ранжировать и в соответствии с этим ранжированием ограничивать доступпользователей различных категорий к машинным командам.
Решением стала аппаратнаявозможность работы центрального процессора в двух режимах: в режиме работы операционнойсистемы (или привилегированном режиме, или режиме супервизора) и в пользовательскомрежиме (или непривилегированном режиме, еще раньше использовался терминматематического режима). В режиме работы ОС процессор исполняет абсолютно все команды,55представленные в программе.
Если же программа исполняется в пользовательском режиме, то ейдоступны для исполнения лишь некоторое подмножество машинных команд (если же приобработке такой программы встретится недопустимая команда, то в системе возникнетпрерывание по запрещенной команде).Тогда возникает вопрос, что должна делать программа, обрабатываемая в пользовательскомрежиме, для печати, например, своих данных. Решений здесь может быть достаточно много,одним из которых может быть наличие в системе специальных команд, интерпретируемых какобращения к операционной системе (которые в некоторых системах рассматриваются какпрерывания, в других системах — не как прерывания; мы будем рассматривать их как прерыванияпо обращению к операционной системе).
Тогда программа, работающая в непривилегированномрежиме, может вызывать команды обращения к операционной системе, а через параметры,положим, передавать необходимые данные, которые могут свидетельствовать о желании даннойпрограммы распечатать какую-то информацию на устройстве печати. Тогда схема организациипечати данных на устройстве печати может выглядеть следующим образом. Операционнаясистема получает от пользователей (т.е.
от пользовательских программ) заказы на печать, и длякаждой из программы она формирует некоторую таблицу или область памяти, в которой будетаккумулироваться информация, которую необходимо вывести на принтер. Тогда каждый запроспрограмм на печать порции данных не является реальным обращением к устройству печати, носвидетельствует лишь о том, что передаваемая порция данных должна быть распечатана, а ОС ихаккумулирует. Реальная печать будет осуществляться при возникновении одного из трех событий.Во-первых, программа, посылающая данные на печать, успешно завершилась. Это означает, чтогарантированно она не будет более посылать данные на печать. Во-вторых, в программеобнаружилась фатальная ошибка, что ведет к безусловному завершению этой программы, чтоопять-таки гарантирует отсутствие будущих запросов данной программы на печать.
И, в-третьих,операционная система может получить (от некоторого виртуального оператора, т.н.планировщика) команду разгрузить буфер печати данной конкретной программы.И, наконец, еще одна серьезная проблема, которая может возникнуть при организациимультипрограммного режима, связана с тем, что в выполняемой в текущий момент программевстретилась семантическая ошибка — программа зациклилась. Соответственно, если в этом циклене встречаются команды, которые могут привести к тем или иным прерываниям, то в этом случаевся вычислительная система «зависает»: никакие новые задачи не ставятся на счет и пр. Решениеданной проблемы может быть довольно простым: необходима функция управления временем.
Этоозначает, что операционная система должна контролировать время использования центральногопроцессора программами пользователя. Для этих целей компьютеру требуется прерывание потаймеру. Резюмируя, можно сказать, что для реализации мультипрограммного режиманеобходимо наличие аппарата прерываний, и этот аппарат, как минимум, должен включать в себяаппарат прерывания по таймеру. В этом случае зацикленная программа будет периодическипрерываться, управление периодически будет попадать операционной системе, что даствозможность поставить на счет другую программу либо снять со счета (например, по командепользователя) эту зависшую программу.Итак, требуются три аппаратных средства компьютера, необходимых для поддержкимультипрограммного режима: аппарат защиты памяти, специальные режимы исполнения команд иаппарат прерываний, состоящий, как минимум, из аппарата прерывания по таймеру.
Отметим, чтоспециальных режимов может быть больше двух: т.е. часть команд доступна всем программам,часть команд могут выполняться лишь в защищенном режиме, еще часть — в более защищенномрежиме, и т.д.Может возникнуть резонный вопрос, как происходит включение режима супервизора.Ответ здесь будет зависеть от архитектуры конкретной системы. Например, в некоторыхархитектурах считается, что операционная система занимает некоторое предопределенноеадресное пространство физической памяти. И если управление попадает на эту область, товключается режим операционной системы. А вот выключение режима операционной системы56может происходить программно: например, операционная система, запуская процесс, можетпредварительно программным способом установить его в непривилегированный режим.1.2.6.2Проблемы, возникающие при исполнении программРассмотрим круг проблем, которые, так или иначе, возникают при исполнении программ.Вложенные обращения к подпрограммам (1.2.6.2).
Несколько лет назад проводилисьисследования, которые анализировали распределение времени исполнения программы на разныхкомпонентах программного кода, и выяснилось, что в системах, рассчитанных не только (и нестолько) для выполнения математических вычислений (например, в системах обработки текстовойинформации), порядка 70% времени тратится на обработку входов и выходов из подпрограмм. Этообъясняется тем, что при обращении к подпрограмме необходимо зафиксировать адрес возврата,сформировать параметры, передаваемые вызываемой подпрограмме, как-то сохранитьрегистровый контекст (т.е.