Конспект лекций по дисциплине «Операционные системы и среды»

Вид материалаКонспект
3.3.Обзор основных понятий
Сессия регистрации
Подсистемы среды
Базовые сервисы
Виртуальная память
Ввод-вывод и файловые системы
Подобный материал:
1   2   3   4   5   6   7   8

3.3.Обзор основных понятий


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


Windows 2000 — это защищенная ОС, требующая, чтобы у каждого пользователя была учетная запись и чтобы пользователь регистрировался в системе, прежде чем получить доступ к ней. Учетная запись каждого пользователя связана с про­филем защиты, который представляет собой набор информации, относящейся к контролю доступа и хранящейся в системной базе данных. Подсистема защиты, используя эту информацию, проверяет, действительно ли пользователи являют­ся теми, за кого они себя выдают. Компоненты системы, участвующие в регист­рации пользователя, показаны на рис.


П
роцесс системы защиты, называемый процессом регистрации в системе (logon process), ожидает ввода от пользователя. Могут быть активны одновременно несколько таких процессов, каждый из которых работает со своим клас­сом устройств регистрации - например, возможна комбинация мышь/клавиа­тура или сетевое соединение. Поток этого процесса обнаруживает попытку пользователя войти в систему и предлагает ему ввести идентификатор (имя учетной записи) и пароль.

Затем процесс регистрации посылает эту информацию подсистеме защи­ты, которая сличает ее с информацией в базе данных защиты. Если аутентифи­кация прошла успешно, то подсистема создает объект, который уникальным об­разом определяет данного пользователя при всех его последующих действиях. Объект, называемый маркером доступа, (access token), играет ключевую роль в системе защиты Windows 2000: он определяет, к каким системным ресурсам име­ют доступ потоки управления, созданные пользователем.

После того, как пользователь идентифицирован, подсистема защиты со­здает процесс, присоединяет к нему пользовательский маркер доступа и затем передает процесс подсистеме Win32, которая запускает в его адресном про­странстве Диспетчер программ (Program Manager) Win32'. Тем самым пользова­тель устанавливает сессию регистрации. Windows 2000 поддерживает как локаль­ную, так и удаленную регистрацию, и у сетевого сервера, на котором установле­на Windows 2000, обычно активны много сессий одновременно.

После того, как интерактивный пользователь успешно зарегистрировался в системе, управление экраном дисплея получает подсистема Win32. В своей пер­вой версии Windows 2000 похожа на Windows 3.1 и совместима с ней, как это изображено на рис. 2-9". В системе Windows 2000 пользователи могут запускать одновременно и одним способом программы Win32 и 16-разрядной Windows. а также программы MS-DOS, OS/2 и POSIX.

Строго говоря, подсистема Win32 запускает не Диспетчер программ, а то приложение, которое указа­но в реестре в качестве оболочки системы. Так, в Windows 2000 4.0 запускается Explorer, в котором фор­мируется визуальное представление параметров рабочего стола для зарегистрировавшегося пользователя.

Начиная с версии 4.0, система Windows 2000 внешне похожа на Windows 95.
      1. Подсистемы среды


Подсистема среды Win32 реализует пользовательский интерфейс Windows 2000. Она управляет не только дисплеем, но и клавиатурой, мышью и другими устрой­ствами ввода, подключенными к машине. Кроме того, это сервер для приложе­ний Win32, реализующий API Win32.

Но не все приложения являются приложениями Win32, и подсистема Win32 не управляет выполнением других приложений, отличных от Win32. Когда пользователь запускает подобное приложение, подсистема определяет его тип и вызывает для его исполнения другую подсистему либо код для инициализации среды MS-DOS, в которой оно будет выполняться (рис. 2-10).

Каждая из подсистем среды предоставляет API для своих клиентских при­ложений. Например, подсистема Win32 реализует функции API 32-разрядной Windows, а подсистема OS/2 - функции API OS/2. Приложения не могут одно­временно использовать функции API разных подсистем, так как каждая подсис­тема среды работает по-своему. Описатель файла, созданный подсистемой Win32, не может быть преобразован, например, для подсистемы POSIX. Более того, подобные гибридные приложения не будут работать и в ОС MS-DOS/Win­dows, POSIX или OS/2.

Эмуляция MS-DOS и 16-разрядной Windows обеспечивается подсистемой среды, называемой виртуальной DOS-машиной (virtual DOS-machine, VDM), ко­торая реализует среду машины MS-DOS. Приложения MS-DOS и 16-разрядной Windows работают в контексте процессов VDM, в отличие от других подсистем среды, в которых могут одновременно выполняться несколько процессов VDM.





Поскольку подсистема Win32 обрабатывает весь вывод на дисплей, то дру­гие подсистемы должны перенаправлять видеовывод своих приложений систе­ме Win32 для отображения. VDM, исполняющая приложения 16-разрядной Windows, транслирует вызовы видеовывода своих приложений в вызовы Win32 и посылает их в виде сообщения системе Win32. Подсистемы OS/2 и POSIX, рав­но как и VDM, в которых исполняются приложения MS-DOS, перенаправляют системе Win32 символьный вывод своих приложений, который последняя ото­бражает в окнах символьного режима, называемых консолями (consoles).

Подсистема среды может поддерживать много клиентских приложений. Каждая подсистема отслеживает своих клиентов и поддерживает глобальную информацию, которую они используют совместно. Хотя одновременно могут выполняться несколько подсистем и VDM, Win32 является единственной подси­стемой среды, видимой пользователю. С его точки зрения, все приложения вы­полняются системой Windows.
      1. Базовые сервисы


Подсистемы среды реализуют свои API, обращаясь к базовым сервисом (native services) — системным сервисам, предоставляемым компонентами исполнитель­ной системы NT. Например, диспетчер виртуальной памяти обеспечивает серви­сы выделения и освобождения памяти, а диспетчер процессов — сервисы созда­ния и завершения процессов и потоков. Как показано на рис. 2-11, когда подси­стема вызывает базовый сервис NT, аппаратура детектирует этот вызов и переда­ет управление исполнительной системе NT. После этого выполнение сервиса осуществляется в режиме ядра.

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

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

Основными пользователями базовых сервисов являются защищенные под­системы DLL и компоненты исполнительной системы NT. Приложения, испол­няемые под Windows 2000, написаны для одного из программных интерфейсов — Win32, MS-DOS, 16-разрядной Windows, POSIX или OS/2, — которые реализу­ются подсистемами среды.
      1. Объекты


Многие, возможно, большинство из базовых сервисов NT — это объектные сер­висы. Иными словами, они выполняют некоторое действие над объектом в ис­полнительной системе NT. Поток открывает описатель объекта и затем исполь­зует этот описатель при вызове сервисов, работающих с объектом. Ресурсы, поддерживающие совместное использование, включая процессы, потоки, файлы и распределяемую память, реализованы в исполнительной систе­ме NT как объекты. Таким образом, ОС может воспользоваться сходством свойств ресурсов и использовать общий код для работы с разными типами ре­сурсов, где только возможно. Объектная система NT — это центральная точка выполнения различных задач управления ресурсами, таких как именование ре­сурсов; установка пределов, так называемых квот (quotas) объема ресурсов, ис­пользуемых процессом; совместное использование ресурса двумя процессами и защита ресурсов от несанкционированного доступа.

П
одсистемы среды часто вызывают объектные сервисы для создания, от­крытия описателя, манипулирования или удаления объектов. Так, при запуске пользователем какого-либо приложения Win32, например Microsoft Excel, под­система Win32 вызывает диспетчер процессов NT для создания процесса (в ко­тором будет исполняться Excel) и получения его описателя. В свою очередь, диспетчер процессов вызывает диспетчер объектов, чтобы создать объект-про­цесс и объект–поток. Аналогично, при сохранении пользователем новой табли­цы Excel подсистема Win32 обращается к диспетчеру ввода-вывода NT, чтобы создать файловый объект, представляющий файл, в котором хранится электронная таблица, и открыть описатель этого объекта. Диспетчер ввода-вывода обра­щается для выполнения этой задачи к диспетчеру объектов. Данный процесс ил­люстрируется рис. 2-12.

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

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

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


Разные ОС по-разному представляют физическую память и требуют от своих программ доступа к ней по определенным правилам. В Windows 2000 приклад­ные программы исполняются в одной из сред, которые ведут себя как некото­рая ОС: Windows, MS-DOS, POSIX или OS/2. Задача состоит в том, чтобы при­ложения всех типов могли выполняться без изменений и без столкновений друг с другом в памяти.

Каждая подсистема среды Windows 2000 представляет память в том виде, ко­торый ожидают от нее приложения. Исполнительная система NT, лежащая ниже подсистем среды, имеет свою собственную структуру памяти, к которой подси­стемы обращаются, вызывая базовые сервисы NT.

Архитектура памяти NT — это система виртуальной памяти, использующая 32-разрядные адреса в плоском (линейном) адресном пространстве. Виртуальное адресное пространство процесса (virtual address space) — это набор адре­сов, которые могут использовать потоки процесса. Во время выполнения дис­петчер виртуальной памяти при помощи аппаратных средств транслирует, или отображает (map) виртуальные адреса в физические адреса, по которым дан­ные хранятся на самом деле. Посредством контроля над процессом отображе­ния ОС может гарантировать, что процессы не будут пересекаться друг с другом и не повредят ОС.

Виртуальное адресное пространство каждого процесса равно четырем гигабайтам (232 байта), два из которых предназначены для использования про­граммой, а другие два зарезервированы для ОС. Четыре гигабайта (и даже два) — это гораздо больше объема физической памяти, доступного на обычных маши­нах. Когда физической памяти не хватает, диспетчер виртуальной памяти пере­сылает, или "откачивает" часть содержимого памяти на диск. Перемещение дан­ных на диск освобождает физическую память, и ее теперь можно использовать для других целей. При обращении потока по виртуальному адресу, соответству­ющему откачанным на диск данным, диспетчер виртуальной памяти снова за­гружает информацию с диска в память. Более подробно виртуальная память описана в гл. 6, "Диспетчер виртуальной памяти".

В Windows 2000 ОС располагается в верхней части виртуальной памяти, а пользовательский код и данные — в нижней, как показано на рис. 2-13. Поток пользовательского режима не может производить непосредственную запись и чтение системной памяти.

Часть системной памяти, называемая резидентным пулом (nonpaged pool), никогда не откачивается на диск и используется для хранения некоторых объек­тов NT и других важных структур данных. Другая часть системной памяти, которая может быть перемещена на диск, называется нерезидентным пулом (paged pool). Всю пользовательскую память можно откачать виртуальной памяти").
      1. В
        вод-вывод и файловые системы


Как и в случае с памятью, подсистемы среды обеспечивают такие средства ввода-вывода, которых ожидают от них приложения. Эти специфичные средства обеспе­чивают подсистемы среды при помощи обращений к базовым сервисам NT.

В основе системы ввода-вывода лежит асинхронная модель ввода-вывода, однако подсистемам среды предоставляются системные сервисы, позволяющие им реализовывать как асинхронную, так и синхронную модели. Асинхронный ввод-вывод (asynchronous I/O) позволяет программе запросить выполнение операции ввода-вывода, после чего продолжать выполнение другой работы, пока устройство не закончит пересылку данных. Система ввода-вывода автома­тически уведомляет программу о завершении ввода-вывода, так что программа может выполнять последующую обработку. Так как устройства ввода-вывода обычно работают существенно медленнее процессоров, то программа, выпол­няющая много операций ввода-вывода, в ряде случаев может повысить свою производительность, используя асинхронный ввод-вывод.

Windows 2000 поддерживает несколько файловых систем, включая файло­вую систему FAT (file allocation table), высокопроизводительную файловую сис­тему (high performance file system, HPFS) и новую файловую систему, под назва­нием файловая система NT (NT file system, NTFS). NTFS расширяет возможности как FAT, так и HPFS, добавляя к ним следующие:
  • Средство восстановления файловой системы, позволяющее быстро вос­станавливать данные на диске после системного сбоя.
  • Способность с легкостью работать с носителями данных большого объема — до 264 байт, или приблизительно 17 миллиардов гигабайт.
  • Средства контроля доступа, в том числе файлы "только для исполнения".
  • Имена файлов, записанные в стандарте Unicode, что позволяет переме­щать документы между компьютерами, находящимися в разных стра­нах, без искажения имен файлов и каталогов (см. разд. 2.3.1).
  • Поддержка среды ОС POSIX, включая жесткие связи (hard links), имена, отличающиеся только регистром букв, и информацию о времени пос­леднего открытия файла.
  • Средства для будущего расширения, такие как обработка транзакций для поддержки отказоустойчивых приложений, задаваемые пользовате­лем номера версий файла, несколько потоков данных в одном файле, гибкие возможности задавать имена и атрибуты файлов, а также под­держка популярных файл-серверов.


Диспетчер ввода-вывода позволяет драйверам устройств и файловым си­стемам (которые он также рассматривает как драйверы "устройств") динамичес­ки загружаться и выгружаться из системы, в зависимости от потребностей пользователя. Драйверы являются модульными и могут располагаться слоями один над другим, что позволяет, например, разным файловым системам использовать для доступа к файлам один и тот же драйвер диска, как показано на рис. 2-14.

      1. Unicode


Самый низкий уровень поддержки локализации — это представление отдельных символов, кодовые наборы. В США для представления информации традицион­но используется стандарт ASCII (American Standard Code for Information Interchange — Американский стандартный код для обмена информацией). Одна­ко, для европейских и других стран этот код не является адекватным, так как в нем нет многих символов и знаков. Например, там нет знака британского фунта, а также диакритических символов, используемых во французском, немецком, датском и испанском языках.

Международная организация по стандартизации ISO (International Standards Organization) установила стандартный кодовый набор, называемый Latin 1 (стандарт ISO 8859-1) и определяющий коды для всех европейских символов, кото­рых нет в ASCII. В Microsoft Windows используется несколько измененный вари­ант Latin 1, который называется кодовым набором Windows ANSI. Windows ANSI является однобайтовой схемой кодирования (single-byte coding scheme), так как для представления каждого символа в нем используется 8 бит. Максималь­ное число символов, которое можно представить с использованием 8 бит, равно 256 (28).

Алфавит (script) — это набор литер, необходимых для записи текста на некотором языке. Часто один и тот же алфавит используется несколькими языками: например, кириллица применяется как в русском, так и в украинском. Windows ANSI и другие однобайтовые схемы могут закодировать количество символов, достаточное для представления букв любого западного алфавита. Однако восточные алфавиты, такие как японский или китайский, в которых используются тысячи разных символов, не удается закодировать при помощи однобайтовой схемы. В таких случаях используют двухбайтовую схему кодиро­вания, когда для каждого символа требуется 1 б бит, либо многобайтовую, в кото­рой одни символы представляются 8 битами, а другие 16, 24 или 32 битами. Пос­ледняя схема требует применения сложных алгоритмов разбора для определе­ния длины данного символа. Более того, большое число кодовых наборов озна­чает, что данному коду могут соответствовать совершенно разные символы на разных компьютерах, в зависимости от используемых на этих компьютерах кодо­вых наборов.

Для решения проблем множественности схем кодирования и для поддер­жки более широкого набора алфавитов Windows 2000 использует для представле­ния данных новый стандарт Unicode. Unicode - это 16-разрядная схема кодиро­вания символов, в которой можно представить 65536 (216) символов. Этого дос­таточно для всех современных, а также нескольких старых или мертвых языков, имеющих ограниченное применение (например, санскрита и, может быть, еги­петских иероглифов). Unicode также включает знаки препинания, математичес­кие символы и набор графических символов, называемых дингбатами5 (dingbats), после чего еще остается много места для расширений.

В Unicode "суть" символа отделена от информации о шрифте или форма­тировании, используемой для его отображения. Каждому коду соответствует один (и только один) символ; для отображения символов Unicode в различных стилях и формах к ним применяется информация о шрифте. Раскладка алфави­тов и символов в Unicode показана на рис. 2-1 б 6.

Хотя подсистема Win32 предоставляет варианты функций API как для строк ANSI, так и для строк Unicode, последний является "родным" кодовым на­бором Windows 2000. Все строки в системе, включая имена объектов, имена путей, имена файлов и каталогов, представляются 16-разрядными символами Unicode. Даже подсистема Win32 преобразует передаваемые ей символы ANSI в символы Unicode, прежде чем обрабатывать их; перед возвратом управления она, при необходимости, преобразует строки обратно из Unicode в ANSI.

П
рименение Unicode позволяет устранить все ограничения на набор сим­волов, которые могут быть представлены в Windows 2000. Так как Unicode обеспе­чивает уникальный код для каждого символа любого алфавита, Windows 2000 может гарантировать, что преобразование символов как на выходе, так и на входе в систему будет всегда правильным.






Под Windows 2000 приложения текстового режима преобразуются, в неко­тором смысле, в графические, так как их простой, построчный вывод отобража­ется внутри окна. Для получения такого эффекта без необходимости переписы­вания приложений текстового режима Тереза Стоуэлл (Therese Stowell), ранее работавшая в группе файловых систем OS/2, разработала набор функций Win32 API, которые направляют вывод приложений символьного режима в текстовые окна, управляемые подсистемой Win32. Эти окна называются консолями (con­soles). Стандартная библиотека Си, например, вызывает консольные функции, чтобы направить в окно консоли стандартный вывод приложений POSIX. Анало­гично, когда приложение OS/2 вызывает функции VIO или приложение MS-DOS вызывает функции INT(IO), подсистема среды OS/2 или MS-DOS, соответственно, вызывает функции консоли Win32 для отображения текстового вывода.

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