Операционная система OS/2

Аннотация

Создание операционной системы/2 (OS/2) является результатом попытки согласовать требования фирмы IBM и ее клиентов к новой операционной системе для различных моделей PS 2 с учетом совместимости с огромным количеством существующих ДОС-приложений. Разработка OS/2 представляла собой серьезную проблему удовлетворения этих требований и эффективного использования аппаратных средств. В этой статье обсуждаются характеристики системы.

Операционная система/2 (OS/2) является новой операционной системой фирмы IBM для созданного ею семейства персональных компьютеров PS/2 на базе микропроцессоров Intel 80286 и 80386. Ввиду того, что новые операционные системы являются дорогостоящими как в разработке, так и при установке и адаптации , в последнее время утвердилась тенденция совершенствования существующих систем вместо создания новых. OS/2 представляет собой попытку реализации новой системы, которая удовлетворяла бы нужды растущего рынка и одновременно сократила затраты на разработку как для IBM, так и для ее клиентов. Основной целью разработки OS/2 является создание преемника для одного из наиболее удачных программных продуктов для персональных компьютеров, дисковой операционной системой (DOS), которая полностью поддерживает аппаратные ресурсы процессора 80286, без отказа от совместимости с ДОС. OS/2 устраняет множество ограничений, присущих ДОС, но позволяет использовать большинство пркладных программ, работающих в ДОС. В таблице 1 проводится сравнение основных характеристик для ДОС и OS/2.

Состав OS/2

OS/2 работает на моделях 50,60 и 80 Персональной системы/2 фирмы IBM. Она также работает на персональных компьютерах АТ и ХТ модели 286. Поскольку IBM аннонсировала две версии стандартной редакции для OS/2, в этой статье обсуждаются общие характеристики для обеих версий OS/2.

Характеристики системы

OS/2 должна обеспечивать множество системных функций (см. таблицу 2). Ряд свойств является характерным для существующих операционных систем и, где это возможно, OS/2 реализует их стандартным образом, используя технику, описанную для более ранних систем. Тем не менее, два аспекта побудили разработчиков OS/2 использовать новые методы во многих областях для удовлетворения запросов, предьявляемых к системе. Первая группа требований связана по своей природе с архитектурой:

-OS/2 должна обеспечивать возможность использования огромного множества существующих приложений ДОС;

-OS/2, также как и ДОС, является однопользовательской системой, которая создана для PS. Она ориентирована на обеспечение интерактивного режима, и не занимает слишком много места в памяти или на диске. Эти требования совместно с архитектурными особенностями процессора 80286 привели к разработке структуры системы, характерной для OS/2;

-OS/2 также должна эффективно использовать большой обьем физической памяти, доступной для процессоров 80286 и 80386.

Ввиду архитектурных особенностей процессора 80286 (описанных ниже), эти требования находятся в противоречии друг с другом. Разрешение этого противоречия в работающей системе является значительным достижением системы OS/2. Другим набором требований являются требования, часто встречающиеся при созданиии малых систем:

-OS/2 должна обеспечивать полный набор свойств операционной системы, которые присущи большим микро- и миникомпьютерным системам.

-OS/2 также должна работать, не расходуя слишком много ресурсов для того чтобы ее можно было устанавливать на РС. Как и всегда при таких требованиях, результатом является компромисc между сложностью, трудоемкостью реализации свойств и простотой при меньшей стоимости их обеспечения.

Требования к архитектуре при создании OS/2

Для того чтобы понять конфликт между двумя группами требований к архитектуре OS/2, важно понимать архитектуру аппаратной части семейства процессоров фирмы Интел и окружения, которое используется для ДОС-приложений.

Архитектура процессора 80286

Использование большого обьема памяти процессоров Интел 80286 и 80386 делают необходимым применение их более развитых и несовместимых особенностей. Ввиду того, что OS/2 является операционной системой для 80286, которая рассматривает процессор 80386 также, как если бы он был 80286 процессором, будет использоваться понятие 80286 для ссылки на общие характеристики обоих типов процессоров. Для получения дальнейшей информации о процессоре Интел 80286 см.ссылки 1 и 2.

Процессор 80286 расширяет адресное пространство процессора 8086/8088, который используется во многих персональных компьютерах, путем добавления нового режима работы, который называется защитным режимом. 80286 может работать также в режиме 8086/8088, который называется для 80286 реальным режимом. 80286 может переключаться между реальным и защитным режимами под управлением программы. Переключение с реального на защитный режим относительно просто и может осуществляться крайне быстро. Несмотря на то, что точный механизм изменяется при переходе от одной машины к другой, переход от защитного режима к реальному режиму на 80286 (но не на 80386) всегда требует сброса процессора. Эта операция относительно медленная и осуществляется аппаратно на устройстве, внешнем по отношению к процессору.

Подобно процессору 8086/8088, процессор 80286 делит память на группы адресов, которые называются сегментами. Сегменты ограничены по длине величиной 64 К (кроме 80386), так как процессор может работать со смещениями 16 бит. Хотя 80386 работает с 32-разрядными смещениями, OS/2 не использует это свойство. В дальнейшем 32-разрядный режим для 80386 обсуждаться не будет.

В защитном режиме сегменты описываются структурами данных, которые называются дескрипторами. Дескриптор сегмента задает начальный адрес сегмента в физической памяти, его длину, режим использования и атрибуты защиты. Дескрипторы, которые может поддерживать и обрабатывать операционная система и которые необходимы для реализации ее стратегии управления памятью, собраны в таблицы. Существует единая глобальная таблица дескрипторов — ГТД (Global Descriptor Table-GDT), а также множество локальных таблиц дескрипторов (Local Descriptor Table-LDT). Эти таблицы доступны в любой момент времени: GDTR и LDTR являются аппаратными регистрами, которые указывают на GDT и текущую LDT соответственно. Адрессация производится косвенно через GDT или текущую LDT. 16-разрядные значения в сегментных регистрах не являются более адресами, которыми они были в реальном режиме, а становятся индексами, которые называются селекторами. Селекторы осуществляют индексацию дескрипторов в GDT и LDT. Процессор вычисляет адрес ячейки, к которой осуществляется доступ, путем суммирования базового адреса сегмента и значения смещения. Результат получается 24-битовым, что позволяет адресовать до 16 Мб.

Процессоры 80286 и 80386 обеспечивают четыре уровня защиты, называемые Protection Rings . Уровни пронумерованы, причем наибольший приоритет имеет уровень 0, а наименьший — уровень 3. Приоритет связан с сегментами, и уровень приоритета сегмента хранится в его дескрипторе. Текущий уровень приоритета машины является уровнем приоритета текущего выполняемого програмного сегмента.

Некоторые команды, относящиеся к состоянию процессора, определяются как приоритетные и могут выполнятся только на уровне 0. Другие команды, относящиеся к операциям ввода/вывода, классифицируются как доверительные и требуют приоритетного доступа, который называется IOPL. Для того чтобы использовать эти команды, текущий уровень приоритета должен быть по крайней мере таким же, как минимальный приоритет, глобально установленный для этих доверительных команд. См. страницу 10-5 [1] для получения списка этих команд.

Процессор обеспечивает строгое правило перехода с одного уровня приоритета на уровень с большим приоритетом, связываемое с селектором. Когда программа вызывает селектор, используя команду FAR CALL, и селектор указывает на более приоритетный программный сегмент, процессор автоматически переключает уровень приоритета. При переключении уровня приоритета процессор автоматически копирует параметры, специфицированные при вызове, в стек, используемый на новом уровне приоритета.

Существует аппаратно реализованная модель задач, встроенная в 80286 и использующая Task State Segment — TSS (cегмент состояния задачи), для описания состояния задачи и стеков, которые она использует. Для того чтобы приоритетный переход в защитном режиме происходил корректно, необходим TSS. Аппаратный регистр, называемый TR, хранит адрес текущего TSS.

Interrupt Descriptor Table — IDT (таблица описателей прерываний) используется для векторизации обработчиков этих прерываний. Эта таблица размещается не так, как таблица векторов прерываний в реальном режиме, расположенная в младших адресах памяти, и содержит дескрипторы для специальных типов селекторов. Выбор этой таблицы осуществляется специальным регистром IDTR, который позволяет ей располагаться в произвольном месте физической памяти снимая ограничение на расположение только в младших адресах, как это имело место в таблице векторов прерывания в реальном режиме.

Программное окружение ДОС

Среда ДОС очень тесно связано с деталями аппаратного обеспечения, имеющегося в оригинальной IBM PC на основе процессора 8088. Она полностью открыта, и прикладной программист всегда имеет полную свободу управления машиной. Несмотря на то, что это значительное преимущество во многих случаях, трудно бывает осуществить переход к более развитой архитектуре и реализовать совместное выполнение нескольких прикладных программ на одной и той же системе.

ДОС и программы ДОС работают только в реальном режиме. Несмотря на то, что существует прерывание BIOS, которое переводит машину в защитный режим, его использование очень ограничено и имеет специализированный характер: например, нет системного обслуживания ДОС, доступного в защитном режиме. BIOS сам по себе также подразумевает операции реального режима. Программы ДОС, написанные на языке ассемблера, в общем случае используют сегментные регистры для базирования и выполняют вычисления над значениями, содержащимися в них. Аналогичные действия в защитном режиме обычно приводят к нарушению защиты. Сегментные регистры не могут использоваться в качестве базовых регистров в программах защитного режима, поскольку их значения являются индексами, а не адресами.

Программная среда ДОС выделяет для адресации программы область максимум 640 Кб. Несмотря на то, что процессор в реальном режиме может адресовать до 1 Мб, значения адресов от 640 К до 1 М зарезервированы для ПЗУ BIOS и видеобуферов. Многие из интерфейсов, которые в основном используются ДОС-программами, поддерживаются не в ДОС, а в BIOS. ДОС-программы написаны для комбинации интерфесов ДОС и BIOS. Программное окружение ДОС предоставляет программисту полный доступ к возможностям аппаратуры. Программа может выполнять инструкции В/В низкого уровня, запрещать и разрешать прерывания, и выполнять собственную обработку прерываний. Буфер памяти, отведенный для экрана дисплея, непосредственно доступен, и программы могут сохранять экран путем запоминания информации в соответствующем месте памяти.

В прошлом было предложено и реализовано множество альтернатив для режима защиты. Эти альтернативы, конечно, увеличивали адаптивность ДОС, но все эти решения были ограничены двумя важными факторами. Во-первых, они являются внешними решениями, отличными от архитектуры процессора и обычной тенденции разработки для систем, основывающихся на семействе процессоров фирмы Интел. Они требуют специальной аппаратуры, обычно располагаемой на шине или плате памяти, которая увеличивает общую стоимость машины. Во-вторых, все они являются схемами отображения. Несмотря на увеличение объема физической памяти, которая может присоединяться к машине, они не увеличивают фактически адресуемую память, которую имеет программа. Программист должен разделять команды и данные на секции, которые не должны адресоваться вместе и затем должен правильно управлять аппаратурой для обеспечения корректного отображения каждой секции в любой момент времени. Эта процедура является сложной, в особенности при использовании языков высокого уровня. По этим соображениям OS/2 использует защитный режим для расширения адресуемого пространства прикладных программ.

Структура системы

Ввиду того, что OS/2 выполняет прикладные программы реального режима в реальном режиме, а прикладные программы защитного режима в защитном режиме, а также поскольку в защитном режиме архитектура процессора 80286 требует использования нескольких уровней защиты для осуществления ограничения по приоритетам, структура системы OS/2 организована таким образом, чтобы поддерживать эти свойства.

Использование режимов

Многие части системы OS/2 разработаны для выполнения как в реальном, так и в защитном режиме; сюда относятся:

— управление устройствами

— управление прерываниями

— переключение режимов

— переключение контекста.

Программа, которая может выполняться в обоих режимах, называется двухрежимной. Драйверы устройств, поставляемые совместно с OS/2, также являются двухрежимными. Ядро же системы OS/2, включая управление виртуальной памятью и файловую систему, реализовано в виде только защитных кодов. Системное обслуживание низкого уровня позволяет определить текущий режим машины и убедится в том, что она работает в нужном режиме.

В OS/2 сделана попытка минимизировать количество переключений режимов, которая реализована на критических путях, таких как обслуживание устройств и прерываний, ввиду того, что переключение режимов происходит относительно медленно, в особенности при переходе от защитного режима к реальному.

Это привело к решению использовать двухрежимный код для драйверов устройств. Проводя сравнение, можно отметить, что обслуживание, такое как распределение сегментов, которое используется только в защитном режиме, написано как программа только защитного режима. Хотя оно и используется в программах реального режима, файловая система реализована как программа только защитного режима для сокращения объема памяти до величины менее 640 Кб, (одно из требований системы OS/2). Когда файловая система используется программами реального режима, имеется два переключателя режимов, один от реального режима к защитному при его вызове и один — из защитного режима к реальному режиму при возврате.

Слой уровня защиты

OS/2 использует три из четырех уровней защиты процессора 80286.

Программыа операционной системы уровня 0 состоят из двух категорий. Основные обсуживающие программы системы собраны вместе для образования программы, которая называется ядро (kernel). Программы, которые используются для обслуживания устройств, являются индивидуально загружаемыми и называются драйверами устройств. Как ядро, так и драйверы устройств выполняются на уровне 0, так как они требуют максимального уровня системного приоритета для обработки прерывания.

Подсистемы представляют собой обслуживающие и дополнительные программы, которые не требуют аппаратного приоритета. Как прикладные программы, так и подсистемы выполняются на уровне 3. Сегменты уровня 2 используются подсистемами и прикладными программами для кодов, которые выполняют команды, приоритетного ввода/вывода. Это позволяет программам выполнять операции В/В, которые не требуют обслуживания прерываний.

Ядро реализовано как единый монитор с одним входом и одним выходом. Ядро системы OS/2 не реализует приоритетного прерывания обслуживания; если программа выполняется в ядре, то она не будет прервана для выполнения другой программы. Тем не менее, программа может быть прервана, находясь в ядре, с тем чтобы программа прерывания могла выполниться и осуществить функцию, которую необходимо выполнить за относительно малый промежуток времени, такую как очистка буфера В/В. Такая структура ядра обеспечивает простоту реализации и приемлемые характеристики для однопользовательских интерактивных систем типа OS/2, которые, однако, не являются системами реального времени. При подобном подходе существенным является то, что длительность интервала времени, занимаемого при каждом системном вызове в ядре, поддерживается на минимальном уровне.

Реализация большой памяти

Программы в OS/2 выполняются как процессы. В частности, каждый процесс имеет свою адресную оболочку. Разные аспекты процесса рассмотрены в разделе мультипрограммирования и многозадачности. Ядро состоит из одного программного сегмента и одного сегмента данных в младших адресах памяти ниже 640 Кб и нескольких програмных сегментов и сегментов данных в старших адресах памяти выше 1 Мб. Сегменты в нижней части памяти образуют компакт. Это значит , что эти сегманты могут адресоваться одним и тем же значением в сегментном регистре в реальном и защитном режиме. Компакт (tiling) осуществляется путем преобразования виртуального адреса сегмента, расположенного в нижней части адресного пространства в физический адрес и занесения этого значения в поле базового адреса дескриптора, селектор которого соответствует значению сегмента исходного виртуального адреса реального режима. Компакт позволяет двухрежимным программам корректно работать независимо от текущего режима машины. Драйверы устройств и часть ядра, расположенная в нижней области памяти, входят в компакт.

Управление физической памятью

OS/2 управляет памятью таким образом, что доступным может быть больший объем памяти, чем фактически имеет машина. Это свойство, известное как превышение памяти, дает пользователю большую свободу, поскольку система может выполнять программы, которые больше по объему, чем размер физической памяти, имеющийся в машине. Сегменты, которые активно не используются, могут перекачиваться на жесткий диск. Система восстанавливает их, когда в этом возникает необходимость. Так как все области памяти, используемые сегментом, должны быть непрерывными, OS/2 перемещает в основной памяти сегменты таким образом, чтобы максимизировать объем свободной физической памяти. Это размещение называется компрессия или перемещение сегментов. Программные сегменты не перекачиваются, поскольку они могут перезагружаться с исходных дисков. OS/2 использует подкачку сегментов вместо разбивки на страницы, так как процессор 80286 не имеет аппаратуры для страничного механизма, но имеет аппаратные средства, необходимые для осуществления сегментации.

Мультипрограммирование и многозадачность

Система мультипрограммирования позволяет организовать одновременное выполнение нескольких прикладных программ. Многозадачная система распределяет время процессора между несколькими программами, давая каждой из них малый период времени процессора. OS/2 реализует оба аспекта — мультипрограммирование и многозадачность.

Сеансы. OS/2 реализует мультипрограммирование путем поддержки до 16 одновременно выполняемых сеансов. Ввиду того, что система использует четыре из этих сеансов для (а) среды ДОС, (b) для пользовательских оболочек, (с) скрытых сеансов открепленных процессов и (d) для обработчика тяжелых сбоев, пользователь может запускать до 12 одновременно выполняемых сеансов.

OS/2 обслуживает видеобуфер таким образом, что дисплей может использоваться несколькими прикладными программами в параллельном режиме. Каждая сеанс имеет один логический дисплей, клавиатуру и мышь.

Механизм диспетчеризации

Этот механизм в OS/2 является программным в отличие от аппаратного механизма, определенного в архитектуре процессора 80286. Поскольку единицей диспетчеризации является нить, система переключает PDTA, когда она переходит на нить, которая не находится в текущем процессе. Необходимо также изменить содержимое полей стека TSS для отображения корректных стеков каждой нити системы. При операциях переключения процессов физический адрес поля в дескрипторе LDT в GDT изменяется для указания новой текущей LDT, а регистр LDTR перезагружается для переключения LDT. Операция переключения процесса в основном завершается, когда аппаратный указатель стека (SS:SP) перезагружается новым значением для стека ядра и PDTA. Переключение нитей представляет собой тоже самое, что и переключение процессов, за исключение того, что PDTA и LDT остаются неизменными, в то время как стековые поля в TSS корректируются.

Решение использовать программный механизм диспетчеризации основано на двух основных предпосылках. Во-первых, так как система иногда работает в реальном режиме, то аппаратный механизм диспетчеризации не всегда доступен. Даже когда идет работа в реальном режиме, система должна отслеживать текущую выполняемую программу. Во-вторых, механизм диспетчеризации является очень тонким. Он сохраняет в памяти и восстанавливает только те объекты, которые абсолютно необходимы для правильного выделения и освобождения ресурсов. В результате на выполнение программного переключения контекста в OS/2 тратится меньшее число машинных циклов по сравнению с тем количеством, которое потребовалось бы для переключения TSS в процессоре 80286.

В OS/2 реализован режим квантования времени. Нить выполняется за относительно короткий промежуток времени перед тем, как супервизор получит управление. Он может выяснить, что существуют другая нить, которая должна выполняться. В этом случае выполнение текущей нити приостанавливается, ее состояние сохраняется и происходит диспетчеризация другой нити. Планировщик OS/2 реализует многоуровневую схему приоритета с динамическим изменением приоритета и круговой параллельной диспетчеризацией внутри одного уровня приоритета. Динамическое изменение приоритета меняет приоритет нитей на основе их текущей активности. Это сделано прежде всего для повышения совершенства системы и для обеспечения незамедлительных ответов системы на интерактивные действия пользователя. Параллельная круговая диспетчеризация внутри уровня приоритета обеспечивает то, что если существует более одной нити на одном и том же уровне приоритета, то все нити этого уровня имеют равные шансы на выполнение.


При использовании материалов сайта ссылка обязательна! (Copyright by www.avs-info.ru 2006)