Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы и ответы по ОС.doc
Скачиваний:
37
Добавлен:
27.08.2019
Размер:
3.35 Mб
Скачать

21. Графическая подсистема и её место в ос на примере x11/Cocoa/WinApi. Достоинства и недостатки различных подходов.

В случае использования операционной системы на рабочей станции, особенно при запуске графически емких приложений, возможно, лучше, когда графическая система входит в ядро - в этом случае она может быстрее работать. А при работе на сервере предпочтительней отделение графической системы от ядра ОС, так как она загружает память и процессор. В случае Unix/Linux графическую систему можно просто отключить, к тому же, если системный администратор ее все-таки хочет использовать, в Linux есть несколько графических оболочек на выбор, некоторые из них (например, WindowMaker) достаточно слабо загружают машину. Эта же особенность Unix-образных операционных систем позволяет запускать эти ОС на машинах с весьма скромными объемами ОЗУ и т.п. В случае Windows же графическая система слишком тесно интегрирована в ОС, поэтому она должна запускаться даже на тех серверах, на которых она вовсе не нужна.

Windows

Особое по значению и важности место в ядре системы Windows занимает модуль графического интерфейса - Win32k.sys. Фактически - это часть подсистемы Win32, отвечающая за прорисовку и управление графическим интерфейсом. Этот модуль расположен в ядре специально для того, чтобы существенно повысить производительность графических операций ввода/вывода. Однако размещение столь критической части в ядре накладывает чрезвычайно строгие требования к корректности его исполнения. Фактически, ошибка в коде Win32k.sys приведет к краху системы. Разработчики Windows уделяют огромное внимание этому модулю, и именно он наиболее тщательно протестирован. Опыт эксплуатации систем Windows показывает, что код Win32k.sys работает абсолютно корректно и не содержит фатальных ошибок. Однако некорректный драйвер видеосистемы может все испортить.

Unix/Linux

В отличие от операционных системах Windows, где графическая система интегрирована в ядро в Unix/Linux графическая система существует отдельно от ядра и функционирует как обычное приложение.

X Window System — оконная система, обеспечивающая стандартные инструменты и протоколы для построения графического интерфейса пользователя. Используется в UNIX-подобных ОС. X Window System обеспечивает базовые функции графической среды: отрисовку и перемещение окон на экране, взаимодействие с мышью и клавиатурой.

X Window System не определяет деталей интерфейса пользователя — этим занимаются менеджеры окон, которых разработано множество. По этой причине внешний вид программ в среде X Window System может очень сильно различаться. В X Window System предусмотрена сетевая прозрачность: графические приложения могут выполняться на другой машине в сети, а их интерфейс при этом будет передаваться по сети и отображаться на локальной машине пользователя. В контексте X Window System термины «клиент» и «сервер» имеют непривычное для многих пользователей значение: «сервер» означает локальный дисплей пользователя (дисплейный сервер), а «клиент» — программу, которая этот дисплей использует (она может выполняться на удалённом компьютере).

Система X Window System была разработана в Массачусетском технологическом институте (MIT) в 1984 году. Нынешняя (по состоянию на июнь 2006 года) версия протокола — X11 — появилась в сентябре 1987 года.

В этом примере X-сервер принимает ввод с клавиатуры и мыши и производит вывод на экран. На пользовательской рабочей станции выполняются веб-браузер и эмулятор терминала. Программа обновления системы работает на удалённом сервере, но управляется с машины пользователя. Обратите внимание, что удалённое приложение работает так же, как если бы оно выполнялось локально.

Mac OS X

Mac OS X использует три наиболее совершенные современные графические технологии: Quartz, OpenGL, QuickTime. Графическая система вынесена из ядра и реализована в режиме пользователя. Основой графической системы является - Quartz.

Quartz–это основная часть Mac OS X, отвечающая за графику и работу с окнами. Quartz состоит из двух частей: Core Graphics Services и Core Graphics Rendering. Модуль Core Graphics Services отвечает за создание и управление окнами, выполняет роль сервера окон, обеспечивает низкоуровневую обра­ботку событий и управление курсорами. Для доступа к буферу кадра и устройствам ввода/вывода используется I/O Kit Framework.

Основную работу по построению двумерных изображений (2D-Rendering), как текстовых, так и графических, выполняют модули библиотеки Core Graphics Rendering, которые ориентированы на работу с векторной графикой. Ма­тематическая природа векторной графики позволяет использовать не только пиксельные сетки, но и нецелочисленные системы координат, задавать удоб­ные и понятные единицы измерения: сантиметры, дюймы и так далее. Внут­ренней моделью для представления векторной графики является Portable Document Format (PDF). Хотя PDF берет свое начало от PostScript'a, у него есть целый ряд преимуществ: он лучше работает с цветом, имеет возможность внутреннего сжатия данных, независим от компьютерной платформы и шрифтов, установленных на компьютере, является в некотором роде декла­ративным, а не полнофункциональным языком программирования, то есть не требует серьезной поддержки времени выполнения (runtime support).

Core Graphics Rendering можно рассматривать как некоторый «черный ящик», который преобразует все, что в него поступает, в PDF-формат и затем уже этот внутренний PDF – во все другие форматы, которые нужны,— эк­ранный bitmap, данные для растровых принтеров, PostScript. Можно также использовать и сам PDF как есть. Это происходит автоматически, когда вы­зывается функция Preview при печати документов.

Вот некоторые характеристики системы Quartz:

  • Глубина цвета (Color depth, Bit depth);

  • Минимальное разрешение;

  • Сглаживание (anti-aliasing);

  • Доступ к буферу видеокадра;

  • Velocity Engine;

  • Ускорение 2D- графики.

OpenGL–компьютерный стандарт для работы с ЗD-графикой. Широко ис­пользуется при написании игр, создании компьютерной анимации, в систе­мах автоматизированного проектирования, в медицинских исследованиях. Поддержка технологии OpenGL реализована в виде одной из Rendering-би­блиотек того же уровня, что и Core Graphics Rendering модуля Quartz.

QuickTime–это среда мультимедийных технологий. Эффективно работает с видео, звуком, анимацией, графикой, текстом, музыкой, с круговыми панорамами, а также с видеопотоками и потоками данных. QuickTime

22. Внутренний интерфейс ядра ОС. Причины ограничения множества функций, доступных для модулей / драйверов. Недостатки и достоинства стабильного / настабильного внутреннего интерфейса ядра (см. Stable API Nonsense).

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

Причины ограничения множества функций, доступных для модулей / драйверов

(Далее на примере линукс)

В линукс часть кода, исполняемая в kernel space, выносится в модули с целью уменьшения размера ядра, так как часть такого кода, например драйверы, может не использоваться (напр - при сборке ядра есть возможность определить в конфигурации, попадет ли подсистема/драйвер и т.п. в модуль или прилинкуется к ядру статически). Ядро линукс хранит таблицы символов ядра, для хранения символов (имеется в виду данных и функций), к которым имеют доступ модули ядра, эти символы экспортируются с помощью макросов EXPORT_SYMBOL или EXPORT_SYMBOL_GPL (символы могут экспортироваться для любых модулей или только для модулей под лицензией GPL). Причины ограничения множества функций и данных, доступных для модулей и драйверов ядра: соображения безопасности данных ядра (модули могут быть сторонними и им не вполне доверяют) и лицензия.

Недостатки и достоинства стабильного / настабильного внутреннего интерфейса ядра. Stable API Nonsence

(Далее использовался http://lxr.linux.no/linux/Documentation/stable_api_nonsense.txt)

Линукс не имеет двоичного интерфейса ядра по следующим причинам:

  1. В зависимости от версии компилятора С может меняться выравнивание структур и способ включения функций (например, функция может размещена как inline)

  2. В зависимости от опций, с которыми собирается ядро, могут меняться а) поля, включаемые в структуры; б) некоторые функции могут быть совсем не реализованы, напр. некоторые спин-локи заменяются nop-ами при отсутсвии поддержки SMP (многопроцессорности); в) выравнивание памяти в ядре

  3. Линукс поддерживает несколько архитектур, и бинарники драйверов, выполняемые на 1 архитектуре, не смогут выполняться на другой

Более того, разннобразие опций увеличивается большим количеством дистрибутивов и релизов.

Стабильный внутренний интерейс ядра

Линукс не имеет стабильного внутреннего интерфейса ядра.

Недостаток этого - те драйверы для линукс, которые не включены в основное дерево исходников, не переносимы между версиями, их надо все время переписывать.

Ядро линукс непрерывно совершенствуется и дописывается, находятся и исправляются ошибки, в результате могут меняться поля и названия структур, параметры и имена функций (в качестве примера можно привести внутриядерные usb-интерфейсы, которые переживали переработку трижды). В противоположность этому, разработчики ОС с закрытыми исходниками вынуждены поддерживать старые интерфейсы, что не способствует совершенствованию системы.

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

Также из ядра периодически удаляется неиспользуемый код для поддержания наибольшей компактности ядра.

132