Гордеев А.В. Операционные системы (2-е изд., 2004) (1186250), страница 71
Текст из файла (страница 71)
К сожалению, в рядеслучаев восстановление может стать невозможным, например исходные данные,поступившие с каких-либо датчиков, могут измениться, тогда предыдущие значения будут безвозвратно потеряны.Контрольные вопросы и задачи1. Что такое тупиковое состояние? Приведите несколько примеров возникновения тупиковой ситуации.2. Что является причиной возникновения тупиков на ресурсах типа SR? Перечислите условия, при которых возникает тупик.3.
Приведите пример графа повторно используемых ресурсов. Что позволяет сделать эта модель Холта?4. Приведите пример теоретико-множественного описания сети Петри.5. Что такое маркировка сети Петри? Что представляет собой пространство возможных состояний сети Петри?6. Приведите пример графического представления сети Петри.7. Что следует предпринять для реализации стратегии предотвращения тупиковых ситуаций? Какие реальные проблемы при этом возникают?8.
Что представляет собой «обход тупика»? Приведите алгоритм банкира Дейкстры. Почему на практике невозможно воспользоваться алгоритмом банкирадля борьбы с тупиковыми ситуациями?9. Что такое «опасное состояние»? Приведите пример опасного состояния на модели состояний системы.10. Опишите метод обнаружения тупика посредством редукции графа повторноиспользуемых ресурсов.И. Опишите алгоритм обнаружения тупика по наличию замкнутой цепочки запросов.Глава 9. Архитектураоперационных системКак комплекс системных управляющих и обрабатывающих программ (см.
главу 1),операционная система представляет собой очень сложный конгломерат взаимосвязанных программных модулей и структур данных, которые должны обеспечивать надежное и эффективное выполнение вычислений. Большинство потенциальных возможностей операционной системы, ее технические и потребительскиепараметры — все это во многом определяется архитектурой системы — ее структурой и основными принципами построения.В-главе 1 мы упомянули несколько наиболее распространенных классификаций.Очевидно, что системы, ориентированные на диалог, должны иметь иные стратегию обслуживания и дисциплину диспетчеризации, чем системы пакетной обработки.
Диалоговое взаимодействие предполагает реализацию развитой интерфейсной подсистемы, обеспечивающей взаимодействие пользователя с компьютером.Это отличие сказывается и на особенностях построения систем. Очевидно, что длядиалоговых операционных систем необходимо предусмотреть множество механизмов, которые позволят пользователям эффективно управлять своими вычислениями.Аналогично, и системы, реализующие мультизадачный режим работы, отличаются по своему строению от однозадачных систем. Если система допускает работунескольких пользователей, то желательно иметь достаточно развитую подсистем,информационной безопасности. А это, в свою очередь, налагает определенные трбования и на идеологию построения операционной системы, и на выбор конкр еных механизмов, помогающих реализовать защиту информационных ресурсовввести ограничения на доступ к другим видам ресурсов.
Поскольку операционнсистемы помимо функций организации вычислений и организации интерф епользователя предоставляют интерфейсы для взаимодействия программ с ° п е р ооционной системой, мы в этой главе рассмотрим и интерфейсы прикладного гграммирования.Основные принципы построения операционных систем279Основные принципы построенияоперационных системСреди множества принципов построения операционных систем перечислим несколько наиболее важных: принцип модульности, принцип виртуализации, принципымобильности (переносимости) и совместимости, принцип открытости, принцип генерации операционной системы из программных компонентов и некоторые другие.Принцип модульностиОперационная система строится из множества программных модулей.
Под модулем в общем случае понимают функционально законченный элемент системы,выполненный в соответствии с принятыми межмодульными интерфейсами. Посвоему определению модуль предполагает легкий способ его замены другим приналичии заданных интерфейсов. Способы обособления составных частей операционной системы в отдельные модули могут быть существенно разными, но чащевсего разделение происходит именно по функциональному признаку. В значительной степени разделение системы на модули определяется используемым методомпроектирования системы (снизу вверх или наоборот).Особо важное значение при построении операционных систем имеют привилегированные, повторно входимые и реентерабельные модули, ибо они позволяют более эффективно использовать ресурсы вычислительной системы.
Как мы уже знаем (см. главу 1), свойство реентерабельности может быть достигнуто различнымиспособами, но чаще всего используются механизмы динамического выделения памяти под переменные для нового вычислительного процесса (задачи). В некоторых системах реентерабельность программы получают автоматически. Этого можнодостичь благодаря неизменяемости кодовых частей программ при исполнении, атакже автоматическому распределению регистров, автоматическому отделениюкодовых частей программ от данных и помещению последних в системную областьпамяти, которая распределяется по запросам от выполняющихся задач.
Естественно, что для этого необходима соответствующая аппаратная поддержка. В другихслучаях это достигается программистами за счет использования специальных системных модулей.Принцип модульности отражает технологические и эксплуатационные свойствасистемы. Наибольший эффект от его использования достижим в случае, когда принцип распространен одновременно на операционную систему, прикладные программы и аппаратуру. Принцип модульности является одним из основных в UNIXсистемах.0всех операционных системах можно выделить некоторую часть наиболее важных управляющих модулей, которые должны постоянно находиться в оператив°и памяти для более скорой реакции системы на возникающие события и болееФфективной организации вычислительных процессов. Эти модули вместе с неторьгми системными структурами данных, необходимыми для функционироваяоперационной системы, образуют так называемое ядро операционной систе' Т а к как это действительно ее самая главная, центральная часть, основа системы.280Глава 9, Архитектура операционных СИСТЙИ.При формировании состава ядра требуется удовлетворить двум противоречивымтребованиям.
В состав ядра должны войти наиболее часто используемые системные модули. Количество модулей должно быть таким, чтобы объем памяти, занимаемый ядром, был не слишком большим. В его состав, как правило, входят модули по управлению системой прерываний, средства по переводу программ изсостояния счета в состояние ожидания, готовности и обратно, средства по распределению основных ресурсов, таких как оперативная память и процессор. В главе 1мы уже упоминали, что операционные системы могут быть микроядерными и макроядерными (монолитными). В микроядерных операционных системах само ядроочень компактно, а остальные модули вызываются из ядра как сервисные. При этомсервисные модули могут размещаться и в оперативной памяти. В противоположность микроядерным в макроядерных операционных системах главная супервизорная часть включает в себя большое количество модулей.
Более подробно о микроядерных и макроядерных операционных системах см. далее.Помимо программных модулей, входящих в состав ядра и постоянно располагающихся в оперативной памяти, может быть много других системных программныхмодулей, которые получают название транзитных. Транзитные программные модули загружаются в оперативную память только при необходимости и в случаеотсутствия свободного пространства могут быть замещены другими транзитнымимодулями. В качестве синонима термина «транзитный» можно использовать термин «диск-резидентный».Принцип особого режима работыЯдро операционной системы и низкоуровневые драйверы, управляющие работойканалов и устройств ввода-вывода, должны работать в специальном режиме работы процессора. Это необходимо по нескольким причинам.
Во-первых, введениеспециального режима работы процессора, в котором должен исполняться толькокод операционной системы, позволяет существенно повысить надежность выполнения вычислений. Это касается выполнения как управляющих функций самойоперационной системы, так и прикладных задач пользователей. Категорическинельзя допускать, чтобы какая-нибудь прикладная программа могла вмешиваться(преднамеренно или в связи с появлением ошибок вычислений) в вычисления,связанные с супервизорной частью операционной системы. Во-вторых, ряд функций должен выполняться исключительно централизованно, под управлением операционной системы. К этим функциям мы, прежде всего, должны отнести функции,связанные с управлением процессами ввода-вывода данных.