ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 17.06.2021

Просмотров: 203

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
  • файловый API, очень похожий на интерфейс файловых системных вызовов в Unix;

  • переменные среды;

  • переназначение ввода-вывода;

  • и даже конвейеры (последовательности задач, в которых поток стандартного вывода предыдущей задачи является потоком стандартного ввода следующей), реализуемые через промежуточный файл.

По одной из легенд, нежелание Microsoft реализовать в DOS вытесняющую многозадачность обусловлено не столько технической некомпетентностью, сколько соглашением с фирмой SCO — в соответствии с ним, передавая права на торговую марку Xenix, Microsoft обязалась не разрабатывать и не продавать функциональных эквивалентов UNIX. Такое соглашение существовало в действительности: через много лет, в 1997 г., SCO отсудила у Microsoft принадлежавшую последней долю своих акций и ряд других обязательств (упоминание Microsoft в списке держателей авторских прав, поддержку бинарной совместимости с Xenix/286) на том основании, что Microsoft рекламировала Windows NT как замену и даже "убийцу" UNIX и, таким образом, нарушала соглашение. Со времен DOS 3.30 архитектура системы не подверглась сколько-нибудь заметным изменениям [Панкратов 2001]. Так, DOS 7, входящая в состав Windows 98/ME в качестве вторичного загрузчика, отличается от 3.30 только поддержкой файловой системы FAT32. Digital Research не смотрела на это развитие безучастно. К концу 80-х система DR DOS, основанная на исходных текстах оригинальной СР/М, обеспечивала полную программную совместимость с MS DOS и включала в себя все новшества не только версии 3.30, но и более поздних версий. Ряд полезных идей, впервые реализованных в DR DOS, такие, как загрузка в верхнюю память, условные операторы в CONFIG.SYS и упакованная файловая система, появились в MS DOS лишь на одну или две версии позже, а некоторые идеи — например, экранный редактор командной строки (возможность, знакомая пользователям командных процессоров DCL, bash и 4DOS/4OS2/4NT) и загрузка из расширенного раздела — не были реализованы в MS DOS и Windows 95/98/ME никогда. Ближе к середине 90-х стало очевидно, что дни DOS как платформы сочтены (впрочем, мало кто ожидал в то время, что в той или иной форме эта платформа сможет прожить до самого конца столетия). В 1993 г. Digital Research вместе с авторскими правами на DR DOS была приобретена фирмой Novell. В 1995 г., вскоре после того, как собрание акционеров выгнало Р. Нурду с поста СЕО, авторские права на этот продукт были переданы созданной им компании Caldera. Несколько позднее Caldera опубликовала исходные тексты системы на условиях GPL под называнием Caldera OpenDOS [www.caldera.com]. С тех пор эта система широко используется в составе DOS-эмуляторов различных дистрибутивов Linux.

Win16

Вскоре после анонса Apple Macintoch в 1984 г., Microsoft выпустила электронную таблицу Excel и текстовый процессор Word для этой системы. Автор не может подтвердить это официальными данными, но трудно избавиться от впечатления, что основной задачей при разработке Win 16 было максимальное облегчение переноса приложений Мае на IBM PC. Версии Windows 2.x—3.x воспроизводят почти все характерные черты Mac OS.


  • Событийно-ориентированную кооперативно многозадачную архитектуру

  • Единое адресное пространство

  • Сборку программ в момент загрузки с использованием DLL П "Ручечное" управление памятью

  • И даже соглашение о вызовах у процедур системного API: параметры помещаются в стек, начиная с первого, стек очищается вызываемой процедурой

Ядро системы было собрано в виде загрузочного модуля DOS (win.exe). После загрузки этот модуль брал на себя управление памятью и осуществлял загрузку собственных и пользовательских модулей формата NE (так называемые сегментированные модули). DOS, однако, сохранялась в оперативной памяти и использовалась в качестве дисковой подсистемы. Первые версии системы были совершенно неудовлетворительными не только с точки зрения надежности, но и по производительности. Довольно большие требования к ресурсам не позволяли запустить сколько-нибудь ресурсоемкое приложение в 640К ОЗУ, системы же с большим объемом памяти были в то время редкостью. Больший объем памяти был доступен только на машинах IBM PC AT с процессором 80286. На таких компьютерах обращения к DOS требовали переключения в реальный режим процессора и поэтому происходили очень медленно. Значительный прорыв в эксплуатационных характеристиках Windows 3.x обеспечил процессор 80386, на котором можно было создать для DOS виртуальный 8086. Это позволило избежать переключений режима процессора на каждом системном вызове и резко повысило производительность. Еще большее повышение производительности было достигнуто в Windows 3.11 с появлением так называемого 32-разрядного доступа к диску — собственной дисковой подсистемы, которая работала целиком в защищенном режиме. Тем не менее, надежность даже этих версий системы оставляла желать много лучшего. В Win 16 впервые была реализована технология, без упоминания которой описание этой системы было бы не полным — не только потому, что это одна из немногих оригинальных концепций, впервые реализованных в системах семейства СР/М, но и потому, что эта технология оказала значительное влияние на современные методики разработки прикладного программного обеспечения. Речь идет о технологии COM (Common Object Model — общая объектная модель). Идея, лежащая в основе СОМ, довольно проста и решает весьма насущную проблему: точки входа DLL не хранят сведений не только о семантике соответствующих процедур, но даже о количестве и типах параметров, передаваемых этим процедурам. Различные системы программирования используют разные соглашения о способе передачи параметров — заголовок DLL не хранит информации и об этом. Отсутствие перечисленных сведений затрудняет взаимодействие между подсистемами, реализованными на разных языках, и делает невозможным синтаксическую проверку допустимости вызова внешних процедур из интерпретируемых языков. СОМ предполагает снабжение DLL внешним описателем, который перечисляет все процедуры, реализуемые данной DLL, и типы данных, используемые этими процедурами. Описание формируется на специальном языке IDL (Interface Definition Language — язык описания интерфейса), который затем компилируется в двоичное представление, используемое объектными средами и интерпретирующими системами программирования. Современные системы программирования выполняют автоматическую генерацию IDL и "болванок"(заготовок) кода, реализующего данный интерфейс, на конкретном языке программирования. IDL является довольно простым языком, на котором можно описывать объекты — структуры данных, с которыми ассоциированы наборы процедур-методов. Поля структур (атрибуты) могут принадлежать одному из нескольких скалярных типов (целое число, число с плавающей точкой, дата и время, строка — последний тип в большинстве компилируемых ЯВУ не является скалярным). Допустимы также атрибуты, являющиеся объектами других классов. Методы объекта в качестве параметров могут получать как значения скалярных типов, так и объекты, и используют стандартное соглашение о вызовах — тем самым облегчается взаимодействие подсистем, реализованных на разных языках программирования. Объектно-ориентированный стиль описания интерфейсов является популярной методологией описания и разработки сложных программных систем, поэтому, несмотря на многочисленные недостатки технологии СОМ (например, не поддерживается контроль версии интерфейса и наследование) она была хорошо принята сообществом разработчиков. Впрочем, заявленная в начале работ над этой технологией цель — переход от монолитных приложений к компонентным средам, составляемым из взаимозаменяемых объектов СОМ — достигнута не была. Достижению этой цели не способствовала также техническая политика Microsoft, состоявшая в низкокачественной и неполной документации и хаотических сменах флагманской объектной среды (версии OLE, ActiveX, OCX и т. д.).


OS/2 1.x

Параллельно с развитием Win 16, во второй половине 80-х Microsoft занималась разработкой еще одной операционной системы, в данном случае совместно с фирмой IBM. OS/2 создавалась как ОС для новой серии машин IBM Personal System/2, основанных на процессоре 80286. Архитектура системы представляет собой самое полное из известных автору воплощение идей, которые имел в виду Intel, разрабатывая этот процессор. Весьма ограниченный успех этой системы обусловлен, по-видимому, несостоятельностью идей Intel, а не качеством их воплощения. Система использует сегментированную виртуальную память и сборку в момент загрузки. Формат загрузочных модулей и DLL тот же самый, что в Win 16 — NE. Однако система имеет раздельные адресные пространства — задачи не имеют доступа к сегментам данных и приватным сегментам DLL других задач. Сегменты кода — разделяемые и защищены от записи. К сожалению, 80286 не обрабатывал сегментных отказов, поэтому виртуальная память использовалась лишь для защиты задач друг от друга, но не для сегментной подкачки [Коган/Роусон 1989, Лафо/Нортон 1991]. OS/2 реализует вытесняющую многозадачность, многопоточность в пределах одной задачи и богатый набор примитивов взаимоисключения (семафоры как двоичные, так и счетчики, очереди сообщений). Ядро — кооперативно многозадачное с управляемыми сообщениями асинхронными драйверами. Одной из отличительных особенностей системы является мощный механизм обработки исключений, аналогичный используемым в MVS-OS/390-z/OS и VMS. Одной из главных задач при разработке системы было максимальное облегчение переноса программного обеспечения (как прикладного, так и системного, включая и драйверы устройств) из MS DOS. Эта цель была в основном достигнута: все системные вызовы DOS имели полные функциональные эквиваленты в OS/2, и достаточно аккуратно написанные программы для DOS могли быть перенесены в OS/2 1.x простой перекомпиляцией. Впрочем, оказалась неразрешимой другая, более важная задача — обеспечение бинарной совместимости. Процессор 80286 в защищенном режиме не имел возможности исполнять программы для реального режима 8086. Для исполнения бинарных модулей DOS была нужна полноценная копия DOS и переключение режима процессора. Таким образом, в системе могла исполняться только одна сессия DOS, а во время ее работы вся активность приложений OS/2 полностью прекращалась. Из-за этого недостатка OS/2 1.x имела успех лишь в качестве серверов файлов и печати в сетях NETBIOS (LAN Manager и серверов приложений: Lotus Notes, Sybase и др). Бинарная несовместимость с DOS могла быть преодолена только с использованием возможностей процессора 80386. Существовали и другие показания к переходу на этот процессор: например, возможность страничной подкачки. Кроме того, используемая в х86 плоская модель памяти упрощает программирование, снимает ограничение в 64Кбайт на переменную и дает много других преимуществ. В этот момент между партнерами возникли серьезные разногласия в вопросе о том, как следует переходить на новый процессор. Предложенная фирмой Microsoft архитектура новой 32-разрядной версии системы, (OS/2 New Technology) оказалась абсолютно неприемлемой для IBM. Камнем преткновения стал вопрос о том, как следует организовывать взаимодействие между 16-разрядным кодом, использующим сегментированную память, и 32-разрядным, использующим линейное адресное пространство. На самом деле, адреса в обеих моделях памяти имеют длину 32 бита, но в 16-разрядной модели адрес разбит на селектор сегмента и смещение в нем. Это разбиение накладывает серьезные ограничения на указательную арифметику. Задача преобразования 16-разрядного указателя 80286 в 32-разрядный достаточно проста; задача же обратного преобразования требует нетривиальных вычислений и в общем случае во время исполнения неразрешима. Предложение Microsoft состояло в том, чтобы сохранить бинарную совместимость с программами для OS/2 1.x и дать им возможность обращаться к новым 32-разрядным DLL и системным модулям, но не предоставлять возможности для 32-разрядных приложений обращаться к старым 16-разрядным DLL. Это решение требовало полной переделки всех сервисных подсистем (включая графическую подсистему Presentation Manager), ядра ОС и подсистемы ввода-вывода (т. е. всех драйверов) в 32-разрядную модель памяти. Переделка драйверов требовала отказа от совместимости с существующими драйверами устройств, файловых систем и сетевых протоколов для OS/2 1.x. IBM предложила более элегантное решение, требовавшее, однако, переделки компилятора: предлагалось научить компилятор при вызове из 32-разрядного кода 16-битной процедуры генерировать специальный код, осуществляющий преобразование "плоского" указателя в сегментированный для всех параметров-указателей (пример П.1). Компилятор должен был принимать решение о необходимости такого преобразования на основе прототипа вызываемой функции.


Пример П.1. Код, порождаемый компилятором IBM Visual Age C++ при вызове 16-разрядной функции

104 /*

105 * открыть обработчик

106 *для мыши

107 */

108 MouOpenfNULL,&hmou) ; sub esp,038h

push Oh

mov eax,offset FLAT:hmou call _DosFlatToSel push eax

push 08h

push eax

mov eax,offset FLAT: MOU16OPEN

call _DosFlatToSel

xchg eax, dword ptr[esp]

push Oh

call __EDC3216

add esp,04ch

Сведений о ходе переговоров история не сохранила, однако по косвенным признакам они были весьма бурными. По причинам, изложенным в главе 10, решение об отказе от поддержки существующих драйверов и DLL было абсолютно неприемлемо для IBM. Почему переделка компилятора не устраивала Microsoft, менее понятно. Автор не располагает достоверными сведениями на этот счет, но есть ряд косвенных оснований предполагать, что взаимодействие между подразделениями Microsoft оставляет желать много лучшего, так что создатели ОС попросту не имели возможности (или даже права) выдвигать столь сложное требование к разработчикам компилятора. Возможно, что на результат переговоров повлияли и какие-то другие, например, сугубо политические или даже психологические факторы. Важно отметить, впрочем, что никаких реальных проблем реализация данного требования не представляла: практически все 32-разрядные компиляторы для OS/2 2.x — Zortech C++, Watcom C++, IBM C/Set (позднее IBM Visual Age for C++) — с успехом выполняют преобразование указателей. Так или иначе, переговоры не только проходили бурно, но и закончились разводом. Дальнейшая судьба OS/2 — это совсем другая история, или, точнее сказать, две разные истории.

IBM OS/2

Первая 32-разрядная версия OS/2 2.0 широко использовала прием, описанный в примере П.1, и представляла собой сочетание 32- и 16-разрядных подсистем. Так, подсистема ввода-вывода была полностью 16-разрядной и, тем самым, обеспечивала полную совместимость со старыми драйверами и другими модулями ядра. Тем не менее, система в полной мере использовала преимущества, предоставляемые новым процессором, такие, как страничная подкачка и режим виртуального 8086 [Минаси/Камарда 1996]. Реализованный в OS/2 2.x эмулятор DOS является одним из крупнейших достижений в сфере разработки виртуальных машин — фирма IBM имеет немалый опыт создания, поддержки и эксплуатации систем виртуальных машин для System/370-390 — и, безусловно, он остается лучшим в мире эмулятором DOS на момент написания книги (в связи с общим снижением интереса к приложениям DOS, вполне возможно, что этот эмулятор останется таковым навсегда). Для сравнения, эмулятор DOS в Windows NT/2000/XP уступает ему как по возможностям настройки, так и по универсальности; сессия DOS в Windows 95/98/ME не является эмулятором — запущенное в этой сессии приложение имеет возможность модифицировать критичные для системы данные и проблемы в этом приложении часто приводят к необходимости перезапуска всей ОС, иногда даже холодного. Про эмуляторы DOS в SVR4/X86 и Linux автор может сказать лишь словами поэта:

Иных не стану поминать Они под солнцем хладным зреют Бумаги даже замарать И то, как надо, не умеют. С. Есенин


Система имеет объектно-ориентированный пользовательский интерфейс, основанный на компонентах SOM (System Object Model). Еще одной, менее известной, но не менее важной на взгляд автора, уникальной особенностью IBM OS/2, является возможность установки пользовательской программой собственного обработчика страничных отказов. Данная особенность уникальна — во всяком случае, среди известных автору промышленно используемых ОС, и позволяет реализовать в пользовательском адресном пространстве функции, которые в других ОС могут исполняться только модулями ядра. Так, свободно распространяемая библиотека ЕМХ использует этот механизм для реализации полного функционального аналога системного вызова fork ОС семейства Unix; известен ряд реализаций отображения файлов в адресное пространство памяти. Развитие системы сопровождалось постепенной заменой 16-разрядных подсистем на 32-разрядные. В версии 4.5 — Warp Server for e-Business — была наконец-то реализована 32-разрядная подсистема ввода-вывода, и это позволило перенести в OS/2 сугубо 32-разрядный код журнальной файловой системы jfs, первоначально разработанной для IBM AIX. В версии 4.0 появился, а в версии 4.5 был включен в стандартную комплектацию стек TCP/IP, совместимый с BSD 4.4, с поддержкой IPSec и фильтрации пакетов [redbooks.ibm.com sg245393]. Первые версии системы отличались большими по тем временам требованиями к ресурсам (для нормальной работы требовалось около 16 Мбайт ОЗУ, по меркам начала 90-х — чрезвычайно много), и поэтому тоже имели успех преимущественно в качестве серверов. Некоторые мелкие улучшения позволили в версии 3.0 снизить минимальные требования до 8 Мбайт. Параллельно шло снижение цен на оперативную память, поэтому шансы OS/2 на получение массового признания в качестве ОС для настольного компьютера все возрастали и достигли максимума примерно в 1995—1996 гг. 203ак 86 В это время, однако, подразделение персональных систем IBM увлеклось другим проектом, на который сообщество пользователей OS/2 также возлагало большие надежды — OS/2 for PPC. Дело в том, что в описываемый период и среди пользователей, и среди производителей вычислительных систем преобладала точка зрения, что Intel исчерпал резервы повышения производительности своих процессоров и не может ни поднять тактовую частоту ЦПУ выше 60—80 Мгц, ни значительно повысить количество операций, исполняемых за один такт. Единственной перспективой повышения производительности представлялись RISC-архитектуры, в том числе — разрабатываемый совместно компаниями IBM, Apple и Motorola микропроцессор архитектуры PowerRISC. Первые процессоры с такой системой команд были разработаны фирмой IBM для рабочих станций и серверов серии RS/6000, но реализовались на нескольких микросхемах. Однокристальный процессор и соответствующие микросхемы окружения (адаптеры системной и периферийной шин и т. д.) должны были резко снизить стоимость системы, переведя ее из категории рабочих станций в персональные компьютеры. IBM рассчитывала воспроизвести успех IBM PC, опубликовав полные спецификации и, таким образом, привлечь производителей клонов новой архитектуры, получившей название Power PC. Для этой системы была начата разработка новой версии OS/2. Бинарная совместимость с существующим кодом на новом процессоре была, конечно же, невозможна, поэтому IBM с легким сердцем пошла на пересмотр архитектуры. Новая система должна была стать полностью 32-разрядной и микроядерной, совместимой с OS/2-x86 лишь на уровне исходного кода приложений. К несчастью, пока новая система разрабатывалась, Intel все-таки посрамил скептиков и преодолел барьеры в 60, а затем и 100 Мгц, и выпустил новое семейство суперскалярных микропрограммируемых ядер — сначала двухкристальные сборки Pentium Pro и Pentium II (на самом деле, тот же Pro, только с более удачной конструкцией корпуса) и, наконец, однокристальный Pentium III. Новое ядро позволило исполнять по несколько команд за такт и, таким образом, перейти второй якобы непреодолимый для х86 барьер. Для проекта PowerPC это было крахом. Хотя система по-прежнему превосходила машины на основе х86 как по абсолютной производительности, так и по отношению производительности к цене, теперь разница была не настолько велика, чтобы оправдать для конечного пользователя переход на новую архитектуру и отказ от старых приложений. Микропроцессоры Power имели успех в составе новой линии персональных компьютеров Apple (PowerMac) и рабочих станций, но не смогли составить конкуренции на рынке PC. Эталонная реализация спецификаций РРС была выпущена и изготавливалась небольшими сериями, вышли версии Linux, Solans и Windows NT 4.0 для новой архитектуры, но коммерческого успеха машина не имела и не могла оправдать разработку полностью новой ОС. Работы по OS/2 for PPC были свернуты. Разочарование руководства IBM было столь сильным, что были также прекращены работы по другим перспективным технологиям — объектной модели SOM (System Object Model) и стандарту OpenDOC. Чувствуя потерю интереса к системе со стороны ее поставщиков, многие разработчики приложений отказапись от ее поддержки. К моменту написания книги слухи о смерти OS/2 сильно преувеличены. В 2001 г. был выпущен совместный продукт IBM и Serenity Systems — eComstation [www.ecomstation.com], клиентская версия системы, основанная на ядре версии 4.5. Тем не менее, очевидно, что система вытеснена на периферию сферы внимания пользователей и разработчиков программного обеспечения для х86.