Учебно-практическое пособие Москва 2009

Вид материалаУчебно-практическое пособие

Содержание


Характеристики современных операционных систем
Объектно-ориентированный дизайн
Обзор операционной системы Windows 2000
Однопользовательская многозадачность
Организация операционной системы
Уровень аппаратных абстракций
Драйверы устройств
Диспетчер ввода-вывода
Диспетчер объектов
Монитор безопасности обращений
Диспетчер процессов и потоков
Диспетчер кэша
Графические модули
Специальные процессы системной поддержки
Потоки и симметричная многопроцессорность
Объекты Windows 2000
Классы объектов и экземпляры
Объекты управления
Традиционные системы UNIX
Подобный материал:
1   2   3   4   5   6   7   8



ХАРАКТЕРИСТИКИ СОВРЕМЕННЫХ ОПЕРАЦИОННЫХ СИСТЕМ

Год за годом происходит эволюция структуры и возможностей операционных систем. В последнее время в состав новых операционных систем и новых версий уже существующих операционных систем вошли некоторые структурные элементы, которые внесли большие изменения в природу этих систем. Современные операционные системы отвечают требованиям постоянно развивающегося аппаратного и программного обеспечения. Они способны управлять работой многопроцессорных систем, работающих быстрее обычных машин, высокоскоростных сетевых приспособлений и разнообразных запоминающих устройств, число которых постоянно увеличивается. Из приложений, оказавших влияние на устройство операционных систем, следует отметить мультимедийные приложения, средства доступа к Internet, а также модель клиент/сервер.

Неуклонный рост требований к операционным системам приводит не только к улучшению их архитектуры, но и к возникновению новых способов их организации. В экспериментальных и коммерческих операционных системах были опробованы самые разнообразные подходы и структурные элементы, большинство из которых можно объединить в следующие категории.
  • Архитектура микроядра.
  • Многопоточность.
  • Симметричная многопроцессорность.
  • Распределенные операционные системы.
  • Объектно-ориентированный дизайн.

Отличительной особенностью большинства операционных систем на сегодняшний день является большое монолитное ядро. Ядро операционной системы обеспечивает большинство ее возможностей, включая планирование, работу с файловой системой, сетевые функции, работу драйверов различных устройств, управление памятью и многие другие. Обычно монолитное ядро реализуется как единый процесс, все элементы которого используют одно и то же адресное пространство. В архитектуре микроядра ядру отводится лишь несколько самых важных функций, в число которых входят работа с адресными пространствами, обеспечение взаимодействия между процессами (interprocess communication — IPC) и основное планирование. Работу других сервисов операционной системы обеспечивают процессы, которые иногда называют серверами. Эти процессы запускаются в пользовательском режиме и микроядро работает с ними так же, как и с другими приложениями. Такой подход позволяет разделить задачу разработки операционной системы на разработку ядра и разработку сервера. Серверы можно настраивать для требований конкретных приложений или среды. Выделение в структуре системы микроядра упрощает реализацию системы, обеспечивает ее гибкость, а также хорошо вписывается в распределенную среду. Фактически микроядро взаимодействует с локальным и удаленным сервером по одной и той же схеме, что упрощает построение распределенных систем.

Многопоточность (multithreading) — это технология, при которой процесс, выполняющий приложение, разделяется на несколько одновременно выполняемых потоков. Ниже приведены основные различия между потоком и процессом.
  • Поток. Диспетчеризуемая единица работы, включающая контекст процессора (куда входит содержимое программного счетчика и указателя вершины стека), а также свою собственную область стека (для организации вызова подпрограмм и хранения локальных данных). Команды потока выполняются последовательно; поток может быть прерван при переключении процессора на обработку другого потока.
  • Процесс. Набор из одного или нескольких потоков, а также связанных с этими потоками системных ресурсов (таких, как область памяти, в которую входят код и данные, открытые файлы, различные устройства). Эта концепция очень близка концепции выполняющейся программы. Разбивая приложение на несколько потоков, программист получает все преимущества модульности приложения и возможность управления связанными с приложением временными событиями.

Многопоточность оказывается весьма полезной для приложений, выполняющих несколько независимых заданий, которые не требуют последовательного исполнения. В качестве примера такого приложения можно привести сервер базы данных, который одновременно принимает и обрабатывает несколько запросов клиентов. Если в пределах одного и того же процесса обрабатываются несколько потоков, то при переключении между различными потоками непроизводительный расход ресурсов процессора меньше, чем при переключении между разными процессами. Кроме того, потоки полезны при описанном в последующих главах структурировании процессов, которые являются частью ядра операционной системы.

До недавнего времени все персональные компьютеры, рассчитанные на одного пользователя, и рабочие станции содержали один виртуальный микропроцессор общего назначения. В результате постоянного повышения требований к производительности и понижения стоимости микропроцессоров производители перешли к выпуску компьютеров с несколькими процессорами. Для повышения эффективности и надежности используется технология симметричной многопроцессорности (symmetric multiprocessing — SMP). Этот термин относится к архитектуре аппаратного обеспечения компьютера, а также к образу действий операционной системы, соответствующему этой архитектурной особенности. Симметричную многопроцессорность можно определить как автономную компьютерную систему со следующими характеристиками.
  1. В системе имеется несколько процессоров.
  2. Эти процессоры, соединенные между собой коммуникационной шиной или какой-нибудь другой схемой, совместно используют одну и ту же основную память и одни и те же устройства ввода-вывода.
  3. Все процессоры могут выполнять одни и те же функции (отсюда название симметричная обработка).

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

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



Рис. 2.12. Многозадачность и многопроцессорность

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

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

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

Обзор операционной системы Windows 2000

Для краткости вместо Windows 2000 мы будем употреблять название W2K.

История возникновения

Операционная система W2K появилась в результате развития операционной системы под названием MS-DOS (или PC-DOS), разработанной фирмой Microsoft для первого персонального компьютера фирмы IBM. Первая версия этой операционной системы, DOS 1.0, была выпущена в августе 1981 года и существенно отличалась от современной W2K. Операционная система DOS 1.0 содержала в себе 4000 строк исходного ассемблерного кода. Эта система работала на микропроцессоре Intel 8086 и занимала 8 Кбайт памяти.

Когда фирма IBM начала выпускать персональные компьютеры PC XT с жестким диском, фирма Microsoft разработала DOS 2.0, которая вышла в 1983 году. Данная версия операционной системы обеспечивала поддержку жесткого диска, а также иерархическую структуру каталогов. До этого на диске мог находиться только один каталог с файлами, количество которых не превышало 64. Если в эпоху дискет этого было достаточно, то с появлением жесткого диска это стало слишком сильным ограничением. Новая версия операционной системы позволяла хранить в каталогах не только файлы, но и подкаталоги, а кроме того, она предоставляла пользователю более богатый набор команд. С помощью этих команд можно было выполнять действия, которые в предыдущей версии выполнялись с помощью внешних служебных программ. Постоянно находящаяся в оперативной памяти часть этой операционной системы возросла до 24 Кбайт.

Когда в 1984 году фирма IBM объявила о выпуске компьютера PC AT, Microsoft выставила на рынок программных продуктов версию DOS 3.0. Персональные компьютеры AT работали на процессоре Intel 80286, который обладал по сравнению со своим предшественником дополнительными возможностями расширенной адресации и защиты памяти. Операционной системой DOS эти возможности не использовались. Чтобы сохранять совместимость с предыдущими версиями, эта операционная система использовала процессор 80286 просто как «быстрый процессор 8086». Эта система обеспечивала поддержку новой клавиатуры и новых жестких дисков. Даже с учетом таких ограниченных возможностей потребляемая операционная память возросла до 36 Кбайт. С тех пор было сделано несколько обновлений версии 3.0, о которых следует упомянуть. Система DOS 3.1, вышедшая в 1984 году, поддерживала сети персональных компьютеров. Размер ее резидентной части не изменился, что было достигнуто за счет увеличения подкачиваемой с диска части операционной системы. DOS 3.3, выпущенная в 1987 году, обеспечивала поддержку новой серии машин фирмы IBM — PS/2. Эта версия, как и предыдущие, не использовала всех преимуществ процессора компьютера PS/2, которые предоставлялись благодаря микросхемам 80286 и 32-битовой 80386. На этой стадии минимальная резидентная часть системы, которая зависела от определенных дополнительных возможностей, возросла до 46 Кбайт.

До этого времени операционная система DOS далеко не полностью использовала возможности системы, на которой она эксплуатировалась. Появившийся процессор 80486, а впоследствии и Pentium, обеспечивали возможности и производительность, которые бесхитростная операционная система DOS была просто не в состоянии использовать. Тем временем в начале 80-х годов фирма Microsoft начала разрабатывать графический интерфейс пользователя (graphical user interface — GUI), который служил бы посредником между пользователем и DOS. К 1990 году Microsoft разработала графический интерфейс пользователя, известный под названием Windows 3.0. Однако Windows 3.0 имел тот недостаток, что он был надстройкой поверх DOS.

После этого Microsoft разработала операционную систему Windows NT, которая использует возможности современных микропроцессоров и обеспечивает многозадачность в однопользовательской или многопользовательской среде.

Первая версия Windows NT - 3.1 — появилась в 1993 году с таким же графическим интерфейсом пользователя, как и у Windows 3.1, другой операционной системы фирмы Microsoft, которая последовала за Windows 3.0. Однако NT 3.1 была новой 32-битовой операционной системой, которая поддерживала приложения предыдущих версий DOS и Windows, а также приложения операционной системы OS/2.

После выпуска нескольких версий NT 3.x фирма Microsoft выпустила систему NT 4.0, которая, в основном, имела ту же внутреннюю архитектуру, что и 3.x. Наиболее заметным внешним изменением было то, что NT 4.0 предоставляла такой же интерфейс пользователя, как и Windows 98. Главное же изменение архитектуры состояло в том, что некоторые графические компоненты, которые в версиях 3.x работали как часть подсистемы Win32 в режиме приложений пользователей, были перенесены в исполняющую систему Windows NT, которая работает в режиме ядра. В результате работа этих важных функций ускорилась, что стало несомненным преимуществом. Потенциальным недостатком стало то, что теперь эти графические функции получили доступ к сервисам низкого уровня, что могло негативно повлиять на надежность операционной системы.

В 2000 году фирма Microsoft сделала еще одно важное обновление, которое теперь называется Windows 2000. Архитектура исполняющей системы и микроядра не претерпела фундаментальных изменений по сравнению с NT 4.0, однако в системе появились некоторые новые особенности. В операционную систему W2K были добавлены дополнительные сервисы и возможности, поддерживающие распределенную обработку. Главной особенностью W2K стала служба Active Directory, которая обслуживает распределенные каталоги и может на основании имен объектов выдавать информацию о них.

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

Однопользовательская многозадачность

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

Второй причиной появления многозадачности является увеличение объема вычислений в соответствии с моделью клиент/сервер. При этом персональный компьютер или рабочая станция (клиент) и главная вычислительная система (сервер) используются для совместного выполнения данного приложения. Обе машины связаны между собой, и за каждой из них закреплена та часть задания, которая отвечает возможностям данной машины. Модель клиент/сервер может быть реализована в локальной сети персональных компьютеров и серверов или с помощью установления непосредственной связи между системой пользователя и главной вычислительной системой. Для обработки приложения могут привлекаться один или несколько персональных компьютеров и один или несколько серверов. Используемая при этом операционная система должна поддерживать сложное сетевое аппаратное обеспечение реального времени, а также связанные с ним протоколы обмена информацией и компоненты передачи данных. К тому же операционная система должна постоянно поддерживать взаимодействие с пользователем. Приведенные выше замечания касаются версии W2K Professional. Версия Server также является многозадачной, но она может поддерживать работу нескольких пользователей, используя для связи с сервером несколько терминалов, а также предоставляя разделяемые сервисы. Используемая в качестве Internet-сервера W2K может одновременно поддерживать тысячи Web-соединений.

Архитектура

На рис. 2.13, представлена общая структура операционной системы W2K. Модульная структура этой системы делает ее довольно гибкой. Она в состоянии работать на самых разных аппаратных платформах и поддерживать приложения, написанные для разных операционных систем.

Как и прочие операционные системы, W2K различает прикладные программы и программы операционной системы. К последним относятся исполняющая система, микроядро, драйверы устройств и уровень аппаратных абстракций (hardware abstraction layer — HAL), которые выполняются в режиме ядра. Программы, выполняющиеся в этом режиме, имеют доступ к системным данным и к аппаратному обеспечению. Остальные программы, работающие в пользовательском режиме, имеют ограниченный доступ к системным данным.

Организация операционной системы

В операционной системе W2K трудно однозначно выделить микроядро. Вместо этого W2K имеет структуру, которую фирма Microsoft называет модифицированной архитектурой микроядра. Как и обычной архитектуре микроядра, операционной системе W2K присуще четкое разделение на модули. Каждая функция системы управляется только одним компонентом операционной системы. Остальные ее части и все приложения обращаются к этой функции через стандартный интерфейс. Доступ к основным системным данным можно получить только через определенные функции. В принципе любой модуль можно удалить, обновить или заменить, не переписывая всю систему или стандартный интерфейс прикладного программирования (application program interface — API). Однако в отличие от систем с четко выделенным микроядром, у W2K многие функции системы, которые не входят в микроядро, выполняются в режиме ядра, что сделано с целью повышения производительности. Разработчики системы W2K обнаружили, что использование традиционного подхода с выделением микроядра приводит к тому, что многие функции, не входящие в микроядро, требуют наличия нескольких переключателей процессов или потоков, переключателей режимов, а также используют дополнительные буферы памяти.



Рис. 2.13, Архитектура операционной системы Windows 2000

Одной из целей создателей операционной системы W2K была ее переносимость, т.е. возможность ее использования на самых разнообразных аппаратных платформах. Для достижений этой цели большая часть исполняющей системы W2K рассматривает лежащее в основе аппаратное обеспечение с одной и той же точки зрения, используя представленную ниже структуру уровней.
  • Уровень аппаратных абстракций. На этом уровне формируется отображение между общими командами и ответными сигналами аппаратного обеспечения, и таковыми для конкретной платформы. Этот уровень отделяет операционную систему от особенностей используемой аппаратной платформы, благодаря чему системная шина, контроллер прямого доступа к памяти, контроллер прерываний, системные таймеры и память выглядят с точки зрения ядра одинаково. Кроме того, на этом уровне поддерживается симметричная многопроцессорность, принцип работы которой объясняется далее.
  • Микроядро. В микроядро входят наиболее часто используемые компоненты операционной системы. Ядро отвечает за распределение ресурсов между процессами, их переключение и синхронизацию. В отличие от остальной части исполняющей системы и от процессов, исполняемых на уровне пользователя, код микроядра не разделяется на потоки. Таким образом, это единственная часть операционной системы, которая не может быть вытеснена или выгружена на диск.
  • Драйверы устройств. К ним относится как файловая система, так и драйверы аппаратных устройств, которые преобразуют поступившие от пользователя вызовы функций ввода-вывода в запросы для конкретных устройств.

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

Пользовательские процессы

Операционная система W2K поддерживает четыре основных типа пользовательских процессов.
  • Специальные процессы системной поддержки. К таким процессам относятся служебные программы, которые не вошли в операционную систему W2K, например процесс входа в систему и диспетчер сессий.
  • Серверные процессы. Другие сервисы W2K, такие, как журнал регистрации событий.
  • Подсистемы среды. Предоставляют приложениям пользователя сервисы W2K, обеспечивая таким образом среду операционной системы. Поддерживаются такие подсистемы, как Win32, POSIX и OS/2. В каждую подсистему среды входят динамически компонуемые библиотеки, преобразующие вызовы приложений пользователя в вызовы операционной системы W2K.
  • Приложения пользователя. Могут быть одного из пяти типов: Win32, POSIX, OS/2, Windows 3.1 или MS-DOS.

Операционная система W2K поддерживает приложения, написанные для W2K, Windows 98 и нескольких других операционных систем. Эта поддержка обеспечивается с помощью единой и компактной исполнительной системы через защищенные подсистемы среды, к которым относятся части операционной системы W2K, взаимодействующие с конечным пользователем. Каждая из подсистем является отдельным процессом, а исполнительная система защищает адресное пространство этих подсистем от вмешательства других подсистем и приложений. Защищенная подсистема предоставляет пользователю графический интерфейс или интерфейс командной строки, который определяет внешний вид и наполнение операционной системы для конечного пользователя. Кроме того, каждая защищенная подсистема обеспечивает свой API для каждой из операционных сред. Это означает, что приложения, разработанные для определенной операционной среды, могут быть запущены W2K в неизменном виде, так как им будет предоставлен тот интерфейс операционной системы, для которого они были созданы. Так, 16-битовые приложения для операционной системы OS/2 можно запускать в операционной системе W2K без каких-либо изменений. Более того, поскольку W2K разработана независимой от платформы (что обеспечивается наличием уровня аппаратных абстракций), защищенные подсистемы и приложения, которые они поддерживают, должны сравнительно легко переноситься с одной аппаратной платформы на другую. Во многих случаях для этого нужна лишь обычная перекомпиляция.
  • Наиболее важной из подсистем является Win32. Win32 — это API, который реализован как для W2K, так и для Windows 98. Некоторые возможности подсистемы Win32 недоступны в Windows 98, но все возможности, реализованные в Windows 98, идентичны возможностям, имеющимся в W2K.

Потоки и симметричная многопроцессорность

Возможности поддержки потоков и поддержки симметричной многопроцессорности — две важные характеристики операционной системы W2K. Ниже перечислены основные возможности поддержки потоков и SMP в операционной системе W2K.
  • Служебные программы операционной системы могут выполняться на любом из свободных процессоров; различные программы могут выполняться одновременно на разных процессорах.
  • Операционная система W2K поддерживает выполнение одного процесса, разделенного на несколько потоков. Эти потоки могут выполняться одновременно на нескольких процессорах.
  • Серверные процессы могут использовать несколько потоков при одновременной обработке запросов, поступающих от разных клиентов.
  • Операционная система W2K предоставляет механизмы совместного использования данных и ресурсов различными процессами, а также гибкие возможности обмена информацией между процессами.

Объекты Windows 2000

Устройство операционной системы W2K в значительной мере основано на объектно-ориентированных концепциях. Этот подход способствует совместному использованию ресурсов и данных различными процессами, а также защите ресурсов от несанкционированного доступа. Операционная система W2K использует следующие объектно-ориентированные концепции.
  • Инкапсуляция. Объект состоит из одного или нескольких полей данных(атрибутов), и одной или нескольких процедур, с помощью которых можно обрабатывать эти данные (методов, сервисов). Единственный способ получить доступ к данным объекта — запросить один из его методов (сервисов). Таким образом, данные объекта легко защитить от несанкционированного или некорректного использования.
  • Классы объектов и экземпляры. Класс объекта представляет собой шаблон, в котором перечислены его атрибуты и сервисы, а также определены некоторые его характеристики. При необходимости операционная система может создавать экземпляры объектов класса. Например, имеется класс одиночных процессов, объектом которого является текущий процесс. Такой подход упрощает создание объектов и управление ими.
  • Наследование. Этот механизм не поддерживается на уровне пользователя, но в некоторой степени поддерживается на уровне исполнительной системы. Например, объекты-каталоги являются примерами объектов-контейнеров, одним из свойств которых является то, что содержащиеся в них объекты могут наследовать свойства контейнеров.
  • Полиморфизм. Для управления объектами любого типа операционная система W2K использует общий набор функций API — в этом и заключается ее полиморфизм. Однако W2K не является полностью полиморфной, потому что в ее состав входит множество API для конкретных типов объектов.

Не все сущности операционной системы W2K являются объектами. Объекты используются в тех случаях, когда данные открыты для доступа в пользовательском режиме, а также при совместном использовании данных и ограничении доступа. Среди представляемых объектами сущностей — файлы, процессы, потоки, семафоры, таймеры и окна. Система W2K создает все типы объектов и управляет ими одним и тем же способом — с помощью диспетчера объектов. Этот диспетчер отвечает за создание и удаление объектов, нужных для работы приложений, а также за предоставление доступа к сервисам и данным объектов.

Каждый объект исполнительной системы находится в области памяти, выделяемой ядром, доступ к которой имеет только ядро. Некоторые элементы структуры данных присущи объектам всех типов. С другой, стороны, каждый отдельный тип объектов имеет свои специфические элементы. Структуры данных объектов ядра доступны только через ядро; приложение не может ни размещать в памяти эти структуры данных, ни непосредственно считывать или записывать в них информацию. Вместо этого приложения манипулируют объектами опосредованно, через набор функций для работы с объектами, которые поддерживаются исполнительной системой. Когда создается объект для какого-нибудь приложения, последнему возвращается дескриптор созданного объекта, который, по сути, является указателем на объект. Впоследствии дескриптор объекта может использоваться любым потоком этого процесса при вызове функций Win32, работающих с объектами.

С объектами может быть связана информация о безопасности, представленная в виде дескриптора безопасности (Security Descriptor — SD). Эта информация используется для ограничения доступа к объекту. Например, процессом может быть создан объект, являющийся именованным семафором, открывать и использовать который будет позволено лишь некоторым пользователям. В дескрипторе защиты этого семафора могут быть перечислены пользователи, которым разрешен (или запрещен) к нему доступ, а также тип разрешенного доступа (для чтения, записи, изменения и т.д.).

В операционной системе W2K объекты могут быть именованными или неименованными. Если при работе процесса создается неименованный объект, то диспетчер объектов возвращает дескриптор этого объекта. Впоследствии обратиться к этому объекту можно будет только через его дескриптор. У именованного объекта есть имя, с помощью которого другие процессы могут получить его дескриптор. Например, если нужно, чтобы процесс А выполнялся синхронно с процессом В, в нем можно создать объект-событие, а затем передать его имя процессу В, в котором это событие будет использовано для синхронизации. Однако если нужно синхронизовать два потока одного и того же процесса А, то в нем можно создать неименованный объект-событие, потому что другие процессы не должны ничего о нем знать.

В качестве примера объектов, которые управляются операционной системой W2K, ниже приведены две категории объектов, управляемых микроядром.
  • Объекты управления. Объекты этого типа используются для управления операциями микроядра, не связанными с диспетчеризацией и синхронизацией.
  • Объекты диспетчера. Используются для диспетчеризации и синхронизации операций системы.

Операционная система W2K не является объектно-ориентированной в полном смысле. Она реализована не на объектно-ориентированном языке программирования. Структуры данных, содержащиеся в компоненте исполнительной системы, не представлены в виде объектов. Тем не менее, W2K иллюстрирует мощь объектно-ориентированной технологии и ее использование при разработке операционных систем.

Традиционные системы UNIX

Историческая справка

Изначально операционная система UNIX была разработана компанией Bell Labs и запущена в эксплуатацию в 1970 году на системе PDP-7. Некоторые сотрудники Bell Labs принимали участие также в работе над системой разделения времени, выполняемой в рамках проекта MAC в Массачусетском технологическом институте. В результате выполнения этого проекта возникла операционная система CTSS, а затем Multics. Хотя часто говорят, что система UNIX — это уменьшенная версия Multics, сами разработчики UNIX утверждали, что на них в большей степени повлияла работа над CTSS. Тем не менее в системе UNIX воплощено много идей, позаимствованных от Multics.

В результате разработки системы UNIX в компании Bell Labs, а впоследствии — и в других местах, появились различные версии этой операционной системы. Первой значительной вехой стал перенос системы UNIX с PDP-7 на PDP-11. Это послужило первым указанием на тот факт, что система UNIX может быть использована в качестве операционной системы на всех компьютерах. Вторым важным этапом развития этой системы стало то, что она была переписана на языке программирования С. Для того времени это было неслыханно. Считалось, что такая сложная программа, какой является операционная система, для которой важным параметром является время ее работы, должна быть написана только на языке ассемблера. Реализация на языке С продемонстрировала преимущество языка программирования высокого уровня если не для всех, то для подавляющего большинства фрагментов системного кода. В настоящее время почти все реализации операционной системы UNIX написаны на С.

Ранние версии UNIX были очень популярны в пределах компании Bell Labs. В 1974 году система UNIX была впервые описана в техническом журнале, что вызвало к ней большой интерес. Лицензии на UNIX были предоставлены коммерческим организациям и университетам. Версия 6 этой системы, появившаяся в 1976 году, стала первой широко используемой за пределами Bell Labs версией. Следующая версия, версия 7, выпущенная в 1978 году, стала прототипом большинства современных систем UNIX. Наиболее важные системы, не являющиеся продуктами фирмы AT&T, были разработаны в Калифорнийском университете в Беркли и получили название UNIX BSD; они эксплуатировались на машинах PDP и VAX. .Фирма AT&T доработала и улучшила эти системы. В 1982 году компания Bell Labs скомбинировала несколько вариантов системы UNIX фирмы AT&T в единую систему, которая появилась в продаже под названием UNIX System III. Впоследствии к этой операционной системе было добавлено несколько новых возможностей, в результате чего появилась система UNIX System V.