Рассматривается новая версия ОС UNIX - System V Release 4.2 (SVR4.2). Именно с этой версией связываются самые большие надежды на внедрение операционной системы UNIX на рынок IBM-совместимых компьютеров. Основное внимание уделено отличиям данной версии от предыдущих выпусков System V - способам организации пользовательского интерфейса, сетевым возможностям, средствам интернационализации и локализации программ, управлению виртуальной памятью, элементам системы реального времени. Затрагиваются вопросы взаимодействия с локальными сетями NetWare и эмуляции Среды MS-DOS.
"Срочная москва степной телеграф тире узун-кулак квч
длинное ухо зпт разнес аулам весть состоявшейся смычке
магистрали рубашкин"
Destiny - это рабочее название SVR4.2.
В переводе с английского - судьба.
Раз Узун-Кулак существует,
должен же кто-нибудь о нем писать?
Подоплека
Когда около трех лет назад корпорация AT&T произвела на свет божий (неизвестно, в муках или без) фирму UNIX System Laboratories (USL), новорожденная компания получила в качестве стартового капитала два программных продукта - операционную систему UNIX и систему управления распределенными транзакциями TUXEDO.
Для такого гиганта, как AT&T, рыночный успех системы UNIX не имел сколько-нибудь заметного финансового значения. Напротив, фирма USL с первых шагов должна была действовать энергично - чтобы выжить. Ей были предприняты шаги в различных направлениях - отстаивание авторских прав на ОС UNIX, установление партнерских отношений с производителями UNIX-подобных систем, выпуск собственного журнала и другие. Но главной целью было провозглашено внедрение на рынок IBM-совместимых компьютеров, общее число которых приближается к ста миллионам. Впервые компания USL отступила от правил - создавать только исходные тексты ОС UNIX и продавать лицензии на их использование другим фирмам, которые собственно и выполняли портирование на конкретные аппаратные платформы. Проект создания бинарной версии ОС UNIX для IBM-совместимых компьютеров получил название Destiny - судьба. Говорят, что некоторых сотрудников USL запирали в рабочих кабинетах и выпускали только после того, как они закончат очередной кусок SVR4.2. И вот, 16 июня 1992 года состоялось торжественное представление UNIX System V Release 4.2 (SVR4.2), на котором присутствовали представители крупнейших компаний - производителей программного обеспечения.
Понимая, сколь остра конкуренция на рынке программного обеспечения, фирма USL пошла на сотрудничество с компанией Novell. (Трудно сказать, рассчитало ли руководство USL все последствия этого шага.) Было учреждено совместное предприятие - Univel. Идея состояла в том, чтобы объединить мощь ОС UNIX с каналами сбыта Novell и ее авторитетом в области локальных сетей. (Готовность Novell пойти на сотрудничество с USL, видимо, объяснялась грядущим пришествием Windows NT, которому следовало что-то противопоставить.)
Получив в свое распоряжение SVR4.2, фирма Univel обеспечила совместимость этой версии с локальными сетями NetWare и электронной почтой MHS. В результате на свет появилась версия OC UNIX, получившая название UnixWare. Именно с этой версией имел возможность ознакомиться автор данной статьи; естественно, о ней и пойдет речь. Попутно отметим, что подавляющая часть локальных сетей в нашей стране - от Novell (быть может, акционеры фирмы сожалеют, что народная любовь не нашла должного отражения в финансовых отчетах), и с этой точки зрения особый интерес представляет как раз UnixWare.
После появления UnixWare сложилась довольно странная ситуация - продукт порожденного предприятия грозил составить сильную конкуренцию любым детищам фирм-основателей - SVR4.2 и NetWare. И в декабре 1992 года Novell договаривается с AT&T о покупке ее доли (примерно 80%) акций USL на сумму 336 миллионов долларов. На момент написания статьи формально сделка еще не была доведена до конца, однако не видно причин, которые могли бы этому процессу помешать. (Еще раз упомянем о духе Windows NT, витающем над рынком операционных систем и заставляющем конкурентов принимать превентивные меры.) Трудно сказать, в каких терминах следует теперь описывать родственные отношения USL, Novell и Univel, однако можно надеяться, что после завершения организационной перетряски сбытовая сеть фирмы Novell приступит, наконец, к полномасштабной реализации UnixWare.
Можно довольно долго анализировать организационно-финансовою ситуацию вокруг SVR4.2 (поставщики, цены, экспортные ограничения и т.п.), однако подобный анализ - тема отдельной статьи. Мы же сосредоточимся на программистских аспектах.
Чего тебе надобно, старче?
Естественно, в USL понимали - чтобы внедриться на рынок IBM-совместимых компьютеров, мало просто взять и портировать существующий UNIX System V. Слишком многое изменилось в компьютерном мире за те двадцать лет, что UNIX живет на свете. Во-первых, совсем другим стал пользовательский интерфейс, сам стиль общения с компьютером. Командные строки с многочисленными опциями перешли в разряд анахронизмов. Наивно требовать от современного пользователя умения безошибочно ввести текст типа
Find . -mtime -7 -print | cpio -oavB | vsplit -1 backup -0 /dev/rdsk/fd
(Об умении разъяснить каждый символ этой строки я и не заикаюсь.) А ведь речь идет всего лишь о сохранении файлов, менявшихся в течении последней недели. Современный пользователь настолько обнаглел, что требует графический полиэкранный режим с мышиным интерфейсом в стиле "тащи бросай" (drag and drop по нашему, по-програмистски), выпадающими и выскакивающими (не путать одно с другим!) откуда-то меню и контекстно-зависимой справочной службой. В силу столь необратимых перемен все компоненты UNIX System V, так или иначе видимые пользователю, нуждались в коренной переработке. Эта огромная работа была проделана и в результате пользователю предоставляется современная Среда UNIX Desktop (рабочий стол ОС UNIX).
Во-вторых, в других ветвях ОС UNIX были предложены и реализованы многочисленные улучшения по сравнению и UNIX System V. Имеются в виду линии BSD UNIX (SunOS), HP-UX, AIX и SCO UNIX. Требовалось оприходовать побольше улучшений и, параллельно, в максимально возможной степени обеспечить совместимость с другими UNIX'ами, иначе термин "открытая система" по отношению к UNIX System V рисковал остаться пустым звуком. Думается, пользователь любой разновидности OC UNIX, попав в среду SVR4.2, будет чувствовать себя как дома.
В целом можно сказать, что между ОС UNIX V.3 и SVR4.2 - дистанция огромного размера. Во многом перед нами новая операционная система, вобравшая в себя массу новых возможностей, но не потерявшая цельности и стройности. Рассмотрим же SVR4.2, точнее, ее разновидность UnixWare, поближе.
Только факты
UnixWare поставляется в двух вариантах - как персональная редакция (Personal Edition) и как сервер приложений (Application Server). Персональная редакция допускает одновременную работу не более двух пользователей, для сервера приложений число пользователей не ограничено. Оба варианта поддерживают работу в сети NetWare в качестве клиента (версия NetWare должна быть не ниже 3.11). Точнее говоря, поддерживаются протоколы SPX/IPX, доступ к файловым и почтовым услугам, а также сетевая печать. Кроме этого, сервер приложений поддерживает виртуальные терминалы Novell, обеспечивая тем самым связь между DOS- и UNIX-компьютерами.
В комплект сервера приложений входят средства для поддержки TCP/IP и сетевой файловой системы (NFS). Для персональной редакции данные средства должны закупаться отдельно.
Отдельными продуктами являются также набор для разработки программного обеспечения (SDK), включающий в себя ANSI C компилятор и сопутствующие инструменты, набор для написания драйверов устройств и инструментарий для разработки Motif-приложений. Компилятор является оптимизирующим, на программах класса drystone разница между оптимизированным и обычным вариантом составляет примерно 25%.
В комплект поставки входит пакет DOS Merge или (более развитый) Windows Merge фирмы Locus, позволяющий запускать DOS-приложения. Допускается организация нескольких параллельных DOS-сессий.
Для работы персональной редакции требуется компьютер на базе как минимум 80386 с тактовой частотой не менее 16 МГц и шинной архитектурой ISA, EISA или MCA, не менее 8 Мб оперативной памяти, НЖМД емкостью не менее 80 Мб, НГМД, стример или устройство для чтения оптических дисков, графический адаптер VGA. Для сервера приложений объемы требуемой памяти (оперативной и долговременной) нужно умножить на 1.5.
Перечисленные количественные характеристики являются минимальными в том смысле, что они учитывают только системные запросы. Например, 80 Мб на жестком диске едва-едва хватит для размещения минимального варианта персональной редакции. Так что можно настоятельно рекомендовать процессор 80486 или старше, тактовую частоту не ниже 33 МГц, 16 ОЗУ, НЖМД не менее чем на 300 Мб и графический адаптер SVGA.
Естественно, для работы в сети требуются соответствующие платы. UnixWare поддерживает широкий спектр Ethernet-контроллеров, некоторые платы token-ring и платы семейства NE2000.
В заключение раздела укажем, что SVR4.2 совместима по выполняемым файлам с предыдущими версиями UNIX System V для той же аппаратной платформы, с SCO UNIX, XENIX и Interactive UNIX.
Друг познается в беде
Итак, мы держим в руках поставочный комплект UnixWare с двузначным порядковым номером. Он состоит из трех дискет и стримерной ленты (еще на одной ленте располагаются дополнительно закупленные продукты). Система и дополнительные продукты могут быть поставлены также на оптических дисках.
Мы подержали в руках поставочный комплект. Теперь предстояло решить, что с ним делать. Собственно, проблема была только в одном - требовался стример. Все остальное, в том числе компьютер с процессором 80486 и SCSI-контроллером, имелось.
IBM - совместимый комьютер с SCSI-конроллером и стримером - конфигурация относительно редкая, и опыта работы с ней у нас не было. Мы начали по очереди пробовать те стримеры, которые смогли достать. Первые два не подавали признаков жизни.
Здесь следует сказать о том, как выглядит процедура установки Unix NetWare. Сначала Unix NetWare загружается с дискет, выполняются некоторые подготовительные действия, такие как форматирование жесткого диска, перепись файлов с дискет, после чего приходит пора основной части установки - с ленты или оптического диска. Подготовительные действия занимают около 20 минут, по прошествии которых мы раз за разом выясняли, что прочитать информация с ленты не удается. Так продолжалось два дня - на стримере и на контроллере много разных микропереключателей... Время от времени один из нас робко говорил, что гуманнее было бы в самом начале установке проверять работоспособность необходимого оборудования, но его тут же прерывали и просили не отвлекаться.
Наконец, мы подключили один из стримеров, указанных в руководстве по установке - TDC 3660. И все пошло без проблем! Тут все обрадовались и единодушно решили, что процедура установки очень дружественная. И действительно, эта процедура имеет современный интерфейс, в любой момент времени доступны контекстно-зависимые справки. Вот только клавишу нажимать, даже нечаянно, не рекомендуется - установка тут же прервется.
Установка UnixWare может выполняться в двух режимах - управляемом (ручном) и автоматическом. При использовании автоматического режима программа установки почти не задает вопросов, а формируемые ею значения вполне разумны. Например, по умолчанию размер области подкачки в 1.5 раза превышает объем оперативной памяти, в качестве файловой системы берется Veritas (мы еще вернемся к этому) и т.п. Напротив, при управляемой установке велик риск неудачно ответить хотя бы на один из большого числа вопросов, поэтому, на наш взгляд, разумно воспользоваться автоматическим режимом.
Информация на установочных носителях хранится в упакованном формате, поэтому процедура установки занимает довольно много времени - нам понадобилось около 4 часов, чтобы поставить сервер приложений (после того, как мы справились со всеми привходящими обстоятельствами). Если же считать дополнительные продукты, то общее время составляет часов восемь - полный рабочий день. Так что начинать лучше с утра.
Поскольку программа установки разработана в USL, разные варианты EVR4.2 отличаются в этом аспекте весьма незначительно.
UNIX с человеческим лицом
После входа в систему пользователь UnixWare по умолчанию начинает взаимодействовать со средой, которую мы будем называть рабочий стол (desktop). Менеджер окон этой Среды поддерживает как OFS/Motif, так и Open Look, и пользователь сам может выбрать подходящий интерфейс. Вообще во всей системе поддерживается единая Среда MoOLIT (не путать с булгаковским драмлитом - домом драматурга и литератора), и приложения могут динамически настраиваться на OSF/Motif или Open Look. Вероятно большинство пользователей предпочтут OFS/Motif - он выглядит приятнее, и на Windows похож больше.
Рабочий стол весьма последовательно и полномасштабно поддерживает современный графический полиэкранный интерфейс. Для выполнения подавляющего числа действий достаточно указать мышью на несколько икон или захватить и перетащить икону на другое место. Например, для удаления файла его следует отправить в мусорную корзину, для редактирования - бросить на икону редактора, для печати - на икону принтера и т.п.
Для каталогов введен новый термин - папка (folder), и содержимое папок также отображается в виде икон (файлы подразделяются на несколько видов). Аналогично, сменные устройства (дискеты, ленты) представлены как папки, при входе в которые автоматически распознается тип носителя (дискета может быть DOS'овской) и, если нужно, невидимым для пользователя образом выполняется монтирование. Можно установить режим автоматического преобразования DOS'овских файлов в формат ОС UNIX, и тогда работа с дискетами станет полностью прозрачной.
Графическим интерфейсом снабжены не только пользовательские, но и административные утилиты (выключение системы, установка новых компонентов и т.д.). За счет повышения интеллекта утилит интерфейс с ними упрощен и с содержательной точки зрения. Так, стало гораздо меньше настраиваемых параметров ядра.
Из соображений безопасности у пользователя root по умолчанию остается обычный строчный интерфейс - иначе поломка рабочего стола превращалась бы в катастрофу. Впрочем, по ходу работы можно довольно свободно перемещаться между режимами терминала и рабочего стола.
Рабочий стол позволяет легко убедиться в том, что SVR4.2 - честная многопроцессная система. Откройте десяток икон, запустите в них тетрис, а на фоне делайте еще пару-тройку полезных дел, не забывая поглядывать на экран.
Очень красиво, в том числе и в интерфейсном плане, сделана и эмуляция Среды MS-DOS (может использоваться MS-DOS 5.0 или RD DOS 6.0). Большое впечатление на автора статьи произвело то, что при зависании программы в окне DOS'а нажатие приводит к перезагрузке эмулируемой системы. Как говорится, пустячок, а приятно.
Хороша не та программная система, которая изначально рассчитана на все случаи жизни, а та, которая содержит гибкие и мощные средства настройки. В этом смысле рабочий стол UnixWare - продукт очень высокого класса. Наличие редактора икон в сочетании с возможностью ассоциировать с иконами действия, определяемые пользователем, позволяет снабдить современным интерфейсом собственные программы или старые системные утилиты. Можно сказать, что в рабочем столе последовательно проведен объектноориентированный подход.
В комплект UnixWare входит справочная система Fingertip Librarian. По поводу ее качества существуют разные мнения. Автору статьи она показалась довольно удобной, хотя отсутствие глобального предметного указателя трудно отнести к достоинствам. Естественно, она поддерживает гипертекстовую модель текста с возможностью перемещения по ссылкам.
Стало традицией поставлять вместе с операционными системами текстовые редакторы, практически непригодные для использования. В MS-DOS таким редактором является Edit, которому не по зубам файл размером всего в 300 Кб. Аналогично ведет себя и редактор в UnixWare, что весьма нетипично для ОС UNIX. Так что для реальной работы рекомендуется приобрести самостоятельный продукт, благо выбор их очень широк.
Программирование в среде X Windows традиционно считается занятием неприятным - слишком много функций в разных библиотеках, да и интерфейс у них довольно замысловат. Подобное мнение активно поддерживают многочисленные фирмы, специализирующиеся на производстве виджетов - основных интерфейсных элементов. Вместе с UnixWare поставляется утилита WKSH - графический оконный командный интерпретатор. Он предоставляет свои средства для работы с элементами среды X Windows, реализованные в виде утилит, доступных из командного языка. Эти утилиты почти эквивалентны соответствующим библиотечным функциям, но имеют несколько более простой интерфейс (используются разумные подразумеваемые значения). Интерпретируемость командного языка также существенно упрощает написание и отладку графических программ. В результате WKSH не только сам имеет красивый интерфейс, но и позволяет быстро строить качественные прототипы графических интерфейсных оболочек.
Время, когда интерфейсом OC UNIX пугали непослушных детей, прошло. Теперь основные возможности системы доступны любому новичку на интуитивном уровне.
Немного о файловых системах
Стандартной для UnixWare является файловая система Veritas, отличающаяся исключительной устойчивостью к сбоям. Даже если выключить питание компьютера во время активной работы, это не приведет к видимым потерям. Пользователи предыдущих версий OC UNIX знают, насколько капризны файловые системы других типов, как долго утилита fsck возвращает их в нормальное состояние. Ничем подобным Veritas не страдает, сохраняя при этом высокое быстродействие. Те, кто привык просто выключать свой персональный компьютер, могут не переучиваться, хотя, конечно же, клюнуть перед выключением икону shutdown.
На момент написания статьи в UnixWare входил только базовый уровень системы Veritas. Судя по публикациям, в самое ближайшее время будет доступна полная реализация Veritas'а, с возможностью зеркального отображения дисков и оперативного сохранения информации. Тем самым UnixWare становится системой, которую можно использовать в приложениях, где надежность является критическим фактором.
Разумеется, при желании можно установить файловые системы и других типов - например, быструю файловую систему BSD или классическую s5.
Чуть-чуть о сетях
UnixWare предоставляет два вида сетевых услуг - в технологии NetWare и в технологии internet. Первый вид специфичен для UnixWare, второй является общим свойством всех разновидностей SVR4.2.
О взаимодействии с NetWare было написано в разделе "Только факты". Здесь мы добавим лишь, что в UnixWare не полностью реализован протокол афиширования ресурсов, из-за чего сервер приложений не может быть полноценным сервером (файловым, например) в смысле NetWare. Это крайне досадно, поскольку замещение серверов NetWare было бы самым естественным способом использования UNIX-компьютеров у нас в стране. Механизм виртуальных терминалов и сетевая файловая система, конечно же, не полностью компенсируют отмеченный недостаток. Не приходится, однако, сомневаться, что уже в ближайшее время будет доступна полная реализация протокола афиширования ресурсов.
По части технологии internet ситуация в ОС UNIX стабилизируется довольно давно, и поэтому вполне естественно, что UnixWare предоставляет традиционный спектр пользовательских, программистских и административных средств. Имеются в виду удаленный вход в систему, удаленное выполнение команд, пересылка файлов, удаленный терминал, функции для работы с адресами internet и аналогичные возможности. Короче говоря, в полной мере поддерживается семейство протоколов TCP/IP и сетевая файловая система NFS. Реализационной основой является библиотека транспортного интерфейса (TLI), кроме этого доступны библиотеки сокетов в духе UNIX BSD и механизм удаленного вызова процедур.
Попутно отметим, что SVR4.2 обеспечивает уровень безопасности B2 или (по желанию) C2 как при локальном, так и при удаленном взаимодействии.
Видимо, реализация сетевых средств стала идейной основой общего механизма доступа к услугам (SAF - Service Access Facility). Теперь системный администратор получив в свои руки универсальные и в то же время очень гибкие инструменты для конфигурирования терминальных, сетевых и аналогичных подсистем, выдержанные в объектно-ориентированном стиле. Вообще объектный дух ощущается почти во всех компонентах SVR4.2, что придает ей привлекательный, современный вид.
Интернационализация и локализация
Последние годы характеризуются бурным ростом чувства национального самосознания. Это приходится учитывать специалистам самого разного профиля, в том числе и программимстам. Современная программная система должна общаться с пользователями на их родном языке, должна учитывать другие аспекты национальной среды. Для поддержки разработки и сопровождения подобных программ были введены понятия интернационализации и локализации.
Под интернационализацией понимается преобразование программы к виду, допускающему настройку на национальную среду способом более простым, чем переписывание исходного текста. Локализация - это собственно процесс настройки.
В ОС UNIX национальная среда описывается переменными окружения, значения которых определяют местные правила классификации и преобразования символов, правила записи чисел, времени, даты и денежных величин, сравнения и сортировки цепочек символов, язык, на котором выдаются сообщения.
Иными словами, национальная среда определяет правила, которые будут использоваться в UNIX-библиотеках (и, следовательно, в утилитах и прикладных системах) при работе с объектами, трактовка которых меняется от страны к стране.
Общая идея интернационализации состоит в том, чтобы вынести из программы все, что зависит от национальной Среды, поместить эту информацию в файлы, после чего настройка на конкретную среду сведется к выбору каталогов с подходящими файлами. В этих файлах могут храниться таблицы для классификации и преобразования символов, тексты сообщений, используемые программой и т.д. Правда, прикладной программе придется явно или неявно во время выполнения извлекать национальную информацию из файлов (например, отыскивать текст нужного сообщения).
В принципе существует два подхода к интернационализации/локализации. Один специфичен для UNIX System V, другой соответствует рекомендациям X/Open. Подходы эти близки, оба реализованы в SVR4.2, поэтому мы не будем останавливаться на различиях.
Самое хлопотное дело - выделение текстовых констант из ранее написанных программ и их замена на вызовы функции извлечения текста из файла. Для этого в SVR4.2 имеется утилита exstr. Извлечение и замена текстов производится в два этапа. На первом порождается файл со всеми выделенными текстами и координатами этих текстов в исходных файлах. Затем автор программы может удалить часть выделенных текстов (скажем, вряд ли стоит настраивать на национальную среду текст "w+" в вызове функции fopen). На втором этапе оставшиеся тексты заносятся в файл, а в исходные тексты программ вместо них помещают вызовы функции извлечения. Кроме настройки прикладных программ, интернационализация и локализация имеют еще два аспекта, касающиеся ввода/вывода и Среды MoOLIT. Грубо говоря, хочется, чтобы можно было ввести с клавиатуры национальные символы и увидеть их на экране.
Обычный терминальный ввод/вывод обслуживает драйвер kbd. В SVR4.2 все драйверы переписаны как потоковые, то есть состоящие из модулей, последовательно обрабатывающих информацию. Для локализации такого драйвера достаточно поместить на вершину потока модуль, специфичный для конкретной национальной среды. Естественно, устройство вывода (в данном случае дисплей) должно уметь отображать национальные символы.
В среде MoOLIT ввод является таблично-управляемым (есть файл, в котором написано, во что перекодировать клавиши и их комбинации). Для вывода используется постскриптовские шрифты типа 1, значит для национального языка их нужно иметь. К счастью, можно воспользоваться шрифтами для MS-Windows. Тем самым локализация среды MoOLIT выполняется довольно просто.
В SVR4.2 появились многобайтные символы, которые необходимы, чтобы обеспечить потребности азиатских языков. Чтобы распознать многобайтные символы, требуются специальные символы-переключатели. В кодировке ISO они обозначаются SS1 и SS2 и располагаются в колонке 8. Далее для кодировки символов кириллицы существует международный стандарт ISO 8859/5, и русские символы располагаются там в колонках 11 - 14. Иными словами, использование ставшей фактически национальным стандартом альтернативной кодировки наталкивается сразу на несколько трудностей. Впрочем, использование любой другой кодировки вызовет, очевидно, массу неудобств. Жаль, но в очередной раз нас не удается измерить общим аршином - мы норовим его проглотить.
В заключение раздела - небольшое замечание. В ОС UNIX национальная Среда состоит из фиксированого числа сущностей; нет возможности описать новые сущности и правила работы с ними. В то же время национальных особенностей сколько угодно. Например у нас и у англичан противоположный порядок записи компонентов почтового адреса. В информации о спортивных матчах у нас сначала пишут хозяев, а в Америке - гостей. Существующие средства интернационализации/локализации не позволяют учесть подобную специфику. Видимо, в последующих версиях и в этом месте восторжествует объектно-ориентироованный подход. На наш взгляд, было бы целесообразно предоставить программистам возможность описывать национальные объекты и характер их поведения. Что ж, поживем - увидим.
Управление виртуальной памятью
Управление виртуальной памятью в SVR4.2 - пример обеспечения совместимости с другими версиями ОС UNIX. В данном случае имеется в виду SunOS.
Виртуальная память системы состоит из всех доступных ресурсов памяти. Это локальные и удаленные файловые системы, оперативная память, область подкачки, устройства произвольного доступа. Адресное пространство процесса определяется отображениями на объекты виртуальной памяти.
Установление отображения обеспечивает доступ к объекту путем непосредственной адресации. Например если установлено отображение на файл, к нему (файлу) можно обращаться как к символьному массиву. При изменении элементов массива будет меняться содержимое файла. При изменении элементов массива будет меняться содержимое файла. Подобный стиль работы может оказаться более удобным, чем использование традиционных системных вызовов read/write, особенно если речь идет о реализации объектно-ориентированных систем управления базами данных.
В предыдущих версиях UNIX System V адресное пространство процесса состояло из трех сегментов: сегмента команд, защищенного от записи, сегмента данных и сегмента стека. Сегменты команд могли разделяться между процессами, сегменты данных и стека реализовывались как приватные для каждого процесса. Кроме того, допускалось динамическое образование дополнительных сегментов данных, разделяемых между процессами.
В SVR4.2 адресное пространство процесса - это просто вектор страниц; разделение между различными сегментами весьма условно. Вышеупомянутые сегменты - это просто группы страниц. Разделение памяти между процессами возникает, когда устанавливаются отображения на один и тот же объект (например, на один и тот же файл).
С точки зрения программиста базовым средством работы с виртуальной памятью является системный вызов nmap, имеющий следующее описание:
caddr_t mmap (caddr_t addr, size_t len, int prot, int flags, int fd, off_t off)
Оператор вида
paddr = mmap (addr, len, prot, flags, fd, off);
определяет отображение из адресного пространства процесса [paddr, paddr+len) в адресное пространство объекта [off, off+len). Объект задается дескриптором fd. Значение paddr - реализационно-зависимая функция аргумента addr и флагов.
Параметр prot определяет режим доступа; его значение - комбинация флагов из набора PROT_READ, PROT_WRITE, PROT_EXECUTE с очевидным смыслом. Параметр flags также специфицирует особенности обработки отображенных страниц. Должен быть задан ровно один из флагов MAP_SHARED и MAP_PRIVATE (есть и другие флаги, но для нас это сейчас не существенно). Если указан флаг MAP_SHARED, операции записи будут модифицировать отображенный объект. Если указан флаг MAP_PRIVATE, при первой записи в страницу из данного отображения будет создаваться и модифицироваться ее копия. MAP_PRIVATE используется, например, системным вызовом exec().
Нетрудно сообразить, сколь многочисленны и красивы следствия описанной выше дисциплины работы с виртуальной памятью. Так, разделение сегментов команд и аппарат разделяемых библиотек оказываются тривиальными (хотя и очень полезными) частными случаями. Можно только порадоваться, что столь общее и мощное средство реализовано в SVR4.2.
На дворе - реальное время
Чем мощнее и удобнее инструмент, тем чаще его пытаются использовать не по назначению. UNIX - превосходная система разделения времени, но все чаще и чаще стал задаваться вопрос - нет ли в ОС UNIX возможностей для поддержки систем реального времени? Конечно, существуют специализированные операционные системы реального времени, такие как OS/9 и VxWorks, но инструментальная Среда в них небогата, обычно разработка и отладка ведутся в кросс-режиме, а это не очень удобно.
Основное требование к системе реального времени - гарантировать, что обработка определенных событий будет выполнена в заданный временной промежуток независимо от того, чем в данный момент заняты аппаратура и программы. Чтобы удовлетворить этому требованию, в SVR4.2 все процессы разбиты на три класса в порядке (в порядке возрастания приоритетов): разделения времени, системные процессы и процессы реального времени. Процессы из низшего класса не получат управления, если имеются готовые к выполнению более приоритетные процессы. В частности, если постоянно будут готовы к выполнению процессы реального времени, операционной системе останется наблюдать за происходящим на компьютере со стороны - ничего сделать она не сможет.
Разумеется, в SVR4.2 имеется возможность (она была и в предыдущих версиях) принудительного удержания в физической памяти фрагментов виртуального пространства процессов. Следовательно, можно не бояться непредсказуемых задержек, вызванных подкачкой.
Конечно, три класса процессов - это не все, что требуется, но и степень "жесткости" реального времени бывает разная. Во многих случаях разумное использование процессов реального времени в сочетании с грубой силой современных компьютеров, несомненно, позволит получить удовлетворительный результат.
Заключение
UnixWare - качественно новая операционная система, снимающая многие из имевшихся претензий к UNIX System V и открывающая новые горизонты для использования открытых систем. Современный интерфейс, мощные сетевые средства (для нас особенно существенна интеграция с NetWare), обеспечение по существу любого желаемого уровня защиты от несанкционированного доступа, инструментарий для интернационализации и локализации приложений, наличие процессов реального времени в сочетании с традиционными достоинствами ОС UNIX делают UnixWare уникальной. Для SVR4.2 реализованы тысячи приложений, в том числе, пожалуй, все самые популярные продукты из Среды MS-DOS (не забудем и о возможности эмуляции MS-DOS под UnixWare). Не приходится сомневаться, что большинство отмеченных выше ограничений и недостатков UnixWare будет устранено в ближайших версиях.
Сейчас многие с интересом ожидают появления на рынке Windows NT. Не вызывает сомнений, что в этой системе будет предложено много красивых, плодотворных идей, но несомненно и то, что пройдет немало времени, прежде чем реализация Windows-NT достигнет требуемой степени надежности и документированности. Многопроцессная операционная система - вещь тонкая, и здесь у ОС UNIX имеется такой неубиенный козырь, как многолетние традиции.
Можно с уверенностью утверждать, что конкуренция между ОС UNIX и Windows NT принесет массу пользы компьютерному миру. Возможно, образ врага (конкурента) заставит сторонников различных ветвей ОС UNIX все более активно искать пути к стандартизации. Примечательное событие произошло седьмого марта этого года, когда представители таких крупнейших фирм, как IBM, HP, SCO, SunSoft, USL и Univel договорились о разработке единого окружения операционной системы (COSI). Определены шесть направлений совместных работ - рабочий стол, сетевая Среда (с электронной почтой), средства построения графического интерфейса, Multimedia (как это по-русски?), объектно-ориентированные технологии и системное администрирование. Все это свидетельствует о прочных позициях и хороших перспективах ОС UNIX.
В печати появилось сообщение о том, что Китай выбрал SVR4.2 в качестве основы своей деятельности в области открытых систем. Сторонники других операционных систем рискуют остаться в меньшинстве...
Я взял ее за руку, и мы пошли прочь от унылых развалин; ...,
и широкие просторы, залитые спокойным светом луны,
расстилались перед нами, не омраченные тенью новой
разлуки.