Конспект лекций по дисциплине «Операционные системы и среды»
Вид материала | Конспект |
- Конспект лекций по дисциплине " Операционные системы", 1459.26kb.
- Ые системы", "Операционные системы, среды и оболочки" и "Операционные системы и системное, 1294.27kb.
- Рабочая программа по учебной дисциплине Операционные системы, среды и оболочки наименование, 623.3kb.
- В. Ф. Панин Конспект лекций по учебной дисциплине "Теоретические основы защиты окружающей, 1559.17kb.
- Программа предназначена для изучения учебного курса по дисциплине "Операционные системы,, 53.62kb.
- Методические указания для выполнения Курсовой работы по дисциплине «Операционные системы», 72.86kb.
- Программа по дисциплине «Технологии программирования и операционные системы», 42.87kb.
- Вопросы к экзамену по дисциплине «Операционные системы и среды», 34.81kb.
- Экзаменационные билеты по дисциплине «операционные системы и среды», 429.29kb.
- Конспект лекций по дисциплине «Маркетинг», 487.79kb.
4.1.2.Особенности архитектуры
Структура системы ввода-вывода NT сложилась как результат одновременного следования традициям и решения вновь возникающих задач. Обратная совместимость является важным соображением при разработке ОС. За исключением редкого случая создания революционно новой ОС, система должна быть совместима или, по крайней мере, способна к взаимодействию с существующими системами. Особенно важна обратная совместимость для системы ввода-вывода. Пользователи компьютеров обычно обновляют программное обеспечение чаще, чем покупают новое оборудование. Хотя новая ОС может потребовать установки дополнительной памяти или увеличения объема дискового пространства, она только в крайнем случае может требовать покупки жесткого диска новой модели или замены дисплея. Это означает, что система ввода-вывода должна непременно поддерживать старые и даже "древние" устройства.
Тем не менее, Windows 2000 — это ОС, предназначенная для работы на самых современных процессорах, использующих технологии 90-х годов. Учесть разнородные и архаичные требования в рамках целостной, общей модели было одной из самых сложных задач при разработке системы ввода-вывода. Другой задачей было создать систему, которая не была бы простым "наименьшим общим кратным" устаревших технологий, но которая отвечала бы требованиям будущего и хорошо стыковалась с остальной частью ОС. В следующих разделах описаны некоторые определяющие характеристики модели ввода-вывода NT.
4.1.3.Объектная модель NT
В свое время ОС UNIX определила новый, упрощенный подход к вводу-выводу. В его рамках все считываемые или записываемые данные рассматриваются просто как поток байтов, направляемый в виртуальные файлы, которые представляются файловыми дескрипторами. Виртуальный файл (virtual file) обозначает любой источник или приемник ввода-вывода, работа с которым идет., как,. ' как"'если бы он был файлом. ОС определяет, является ли "файл" консольным терминалом, каналом или настоящим файлом на диске, и направляет данные в нужное место.
В Windows 2000 программы также осуществляют ввод-вывод в виртуальные... ,файлы манипулируя ими посредством описателей файла (file handles). Концепция описателя файла не нова, но в исполнительной системе NT описатель файла фактически ссылается на файловый объект (file object) исполнительной системы. Все возможные источники или приемники ввода-вывода представлены файловыми объектами. Потоки пользовательского режима вызывают базовые сер-висы файлового объекта NT для чтения из файла, записи в файл и выполнения других операций. Диспетчер ввода-вывода динамически преобразует эти запросы к виртуальным файлам в запросы к настоящим файлам, каталогам файлов, физическим устройствам, каналам, сетям, почтовым ящикам и любым другим местам назначения, которые только могут возникнуть в будущем.
Как и в других ОС, приложение открывает файл, используя стандартную библиотечную функцию какого-либо языка программирования, например Си. В ответ оно получает (в той или иной форме) описатель файлового объекта исполнительной системы NT. Например, когда приложение Win32 вызывает функцию fopen(), библиотека Си обращается к функции API Win32 CreateFile(), которая, в свою очередь, вызывает объектный сервис ввода-вывода NT. Диспетчер ввода-вывода открывает файловый объект и возвращает описатель объекта библиотеке Си, которая передает его прикладной программе.
Источники и приемники ввода-вывода представлены в виде объектов, так как они удовлетворяют определению объекта Windows 2000: это системные ресурсы, которые могут совместно использоваться потоками двух или более процессов пользовательского режима. Файловые объекты, как и другие объекты, имеют иерархические имена, охраняются объектной защитой, поддерживают синхронизацию и обрабатываются объектными сервисами.
Р

ис. 8-2. Открытие файлового объекта.
Открывая файл, пользователь задает имя файла и необходимый тип доступа — обычно чтение, запись, добавление или удаление. Данный запрос передается подсистеме среды (или DLL), которая обращается к системному сервису NT. Это инициирует поиск имени диспетчером объектов. Как уже было описано в гл. 3, диспетчер объектов начинает поиск в своем пространстве имен, после чего передает управление диспетчеру ввода-вывода, который и отыскивает файловый объект.
Как и другие объекты исполнительной системы , файловые объекты защищены дескриптором защиты, содержащим список управления доступом (ACL). Когда поток открывает файл, диспетчер ввода-вывода обращается к подсистеме защиты, чтобы определить, разрешает ли ACL файла процессу доступ запрошенного типа. Если доступ разрешен, диспетчер объектов предоставляет его и связывает предоставленные права доступа с возвращаемым описателем файла. Если данный или другой поток процесса собирается выполнять дополнительные операции, не указанные в первоначальном запросе, поток должен открыть другой описатель, что вызывает новую проверку прав доступа (более подробно о защите объектов см. гл. 3, "Диспетчер объектов и контроль доступа").
Файловые объекты используются также для синхронизации. После выдачи запроса на ввод-вывод поток может ждать у описателя объекта, чтобы синхронизировать свое выполнение с окончанием передачи данных дисководом или другим устройством. Эта возможность синхронизации тесно связана с другой особенностью системы ввода-вывода — асинхронными операциями ввода-вывода.
4.1.4.Унифицированная модель драйвера
Второй отличительной чертой системы ввода-вывода является унифицированная структура ее драйверов и широкая интерпретация понятия "драйвер". В исполнительной системе NT драйвер устройства и файловая система строятся и выглядят для остальной части ОС одинаково. Более того, именованные каналы и сетевые редиректоры (программное обеспечение, направляющее запросы к файлам по разным сетям) рассматриваются как "файловые системы" и реализованы в виде соответствующих драйверов.[Каждый драйвер — автономный компонент, который можно добавлять к ОС и динамически из нее удалять.
Диспетчер ввода-вывода определяет модель построения драйверов. Основные характеристики этой модели таковы:
- Драйверы переносимы и написаны на языке высокого уровня. Они разработаны так, чтобы при переносе с одной архитектуры процессора на другую изменений не требовалось или они были минимальны. Драйверы верхнего уровня, такие как файловые системы, вообще не требуют изменений.
- Операции ввода-вывода управляются пакетами и организуются на основе передачи IRP от одного драйвера другому. По мере их прохождения через различные слои системы ввода-вывода IRP могут' использоваться повторно.
- Система ввода-вывода может динамически назначать драйверы для управления дополнительными или новыми устройствами при изменении конфигурации системы.
- Драйверы должны синхронизировать свой доступ к глобальным данным. В ходе работы драйвер может быть вытеснен потоками более высокого приоритета или прерван высокоприоритетными прерываниями. Это обстоятельство, как и то, что NT может выполнять код драйвера на нескольких процессорах одновременно, требует особого внимания к синхронизации.
- Драйверы должны корректно восстанавливаться после сбоя питания и перезапускать прерванные операции ввода-вывода2 (это не предполагается реализовать в первых версиях драйверов NT, но может быть добавлено в будущих).
Унифицированный, модульный интерфейс, предоставляемый драйверами, позволяет диспетчеру ввода-вывода "не видеть" их структуру или внутренние детали. Драйверы могут также вызывать друг друга (через диспетчер ввода-вывода), что обеспечивает независимую обработку запроса ввода-вывода на нескольких уровнях. Рассмотрим следующий пример. Файловая система получает запрос на считывание символов из некоторого файла. Она транслирует первоначальный запрос в запрос на последовательное считывание определенного количества байтов, начиная с некоторого "логического" адреса на диске. Этот запрос она передает обычному драйверу диска. Последний, в свою очередь, транслирует запрос в форму "цилиндр/дорожка/сектор" и позиционирует головки диска для считывания данных. Такая способность располагать драйверы слоями один над другим обеспечивает модульность и повышает степень повторного использования кода.
Послойная модель ввода-вывода поддерживает произвольное количество драйверов. В случае однослойной модели запрос на ввод-вывод поступает диспетчеру и затем к драйверу устройства, который непосредственно работает с устройством, как показано на рис. 8-3.

Рис. 8-3. Ввод-вывод с однослойным драйвером.
Р

ис. 8-4. Ввод-вывод с многослойным драйвером.
На рис. 8-4 показан пример многослойного драйвера; здесь запрос проходит через несколько драйверов. В данном примере имеется два уровня: драйвер файловой системы и драйвер устройства. Обратите внимание, что драйвер верхнего уровня не вызывает нижележащий драйвер напрямую. Вместо этого он обращается к диспетчеру ввода-вывода, который и вызывает драйвер нижнего уровня.
Многослойные драйверы встречаются чаще однослойных, хотя доступ к некоторым простым, байт-ориентированным устройствам, например, последовательным и параллельным портам, может осуществляться и однослойным.
Доступ к запоминающим устройствам большой емкости всегда выполняется при помощи многослойного драйвера. Сначала запрос проходит через драйвер файловой системы, а потом через драйвер устройства. Могут быть созданы и более сложные наборы послойных драйверов. Например, в системе может быть несколько устройств, таких как диски или ленты, подсоединенных к шине SCSI (произносится "скази", расшифровывается как Small Computer System Interface — Системный интерфейс для небольших компьютеров). Запрос ввода-вывода к подобному дисковому накопителю проходит через следующие драйверы:
- драйвер файловой системы;
- драйвер класса дисков, который выдает запросы SCSI;
- драйвер порта SCSI, посылающий запросы диску с использованием протокола шины SCSI.
Все эти драйверы модульные, поэтому каждый из них может использоваться и в другой конфигурации.
4.1.5.Асинхронная обработка
Третьей особенностью системы ввода-вывода NT является ее асинхронная природа. Асинхронный ввод-вывод (asynchronous I/O) проще всего определить, описав сначала его противоположность: синхронный ввод-вывод (synchronous I/O). Большинство программистов хорошо знакомы с синхронным вводом-выводом. Вы вызываете сервис ввода-вывода; устройство заканчивает передачу данных и возвращает Вашей программе код завершения; программа может сразу же использовать переданные данные. В простейшем случае функции API ReadFile() и WriteFile() выполняются синхронно. Прежде чем возвратить управление вызывающей программе, они заканчивают выполнение операции ввода-вывода (рис. 8-5).
Синхронный ввод-вывод является стандартным для большинства ОС, и во многих случаях этого достаточно. Однако современные процессоры невероятно быстры — гораздо быстрее большинства устройств ввода-вывода. Пока устройство обрабатывает один запрос, процессор может выполнить тысячи строк кода. В идеале у приложения должна быть возможность использовать процессор, пока устройство пересылает данные. По этим соображениям диспетчер ввода-вывода предоставляет также и средства асинхронного ввода-вывода. Подсистема самостоятельно выбирает для себя синхронный или асинхронный ввод-вывод и, в зависимости от поведения ее API, может предоставить своим клиентским приложениям ввод-вывод обоих типов. Процедуры доступа к файлам API Win32 могут исполняться как синхронно, так и асинхронно.
Асинхронные сервисы позволяют приложению выдать запрос ввода-вывода и продолжать свою работу, пока устройство передает данные (рис. 8-6).
Асинхронный ввод-вывод имеет важное преимущество перед синхронным – возможность повышения скорости работы приложений. Пока устройство занято пересылкой данных, приложение продолжает выполнять другую работу. Например, оно может выводить изображение на монитор, пока драйвер устройства заполняет буфер данными из дискового файла. Чтобы использовать асинхронный ввод-вывод, поток должен указать это (в терминологии Win32 "асинхронный" ввод-вывод называется "совмещенным" — "overlapped") при открытии описателя. После начала асинхронной операции ввода-вывода поток должен позаботиться о том, чтобы не использовать никаких данных этой операции до тех пор, пока драйвер устройства не завершит ее. Другими словами, поток должен синхронизировать свое выполнение с завершением операции ввода-вывода, ожидая у описателя файла, как показано на рис. 8-6. Приблизительно треть базовых сервисов NT, предоставляемых подсистемам диспетчером ввода-вывода, асинхронны по умолчанию. Асинхронными сервисами являются те, которые, вероятно, будут выполняться долгое или вообще непредсказуемое время — например, чтение или запись файла или перебор содержания каталога файлов. Поток, вызывающий эти сервисы, должен синхронизировать свое выполнение с их завершением. Альтернативно, поток может заставить все сервисы NT "вести себя" синхронно, задав синхронный ввод-вывод при открытии описателя файла.
Е

сть различие между тем, как сервис выглядит для вызывающей его программы, и тем, как он фактически реализован системой ввода-вывода NT. Хотя некоторые сервисы ведут себя синхронно, а некоторые — асинхронно, сама система ввода-вывода работает полностью асинхронно — от обработки прерываний до передачи результатов обратно пользовательскому режиму и запуска исполнения запроса на устройстве. Асинхронный режим обеспечивает системе ввода-вывода возможность гибко переключаться на другие задачи, пока относительно медленные устройства пересылают данные. Асинхронные вызовы процедур (АРС) — другое средство NT и асинхронного ввода-вывода Win32 — описаны в разделе 8.2.2.3.
Рис. 8-5. Синхронный ввод-вывод.

Рис. 8-6. Асинхронный ввод-вывод.
4.1.6.Проекционный файловый ввод-вывод и кэширование файлов
Проекционный файловый ввод-вывод (mapped file I/O) — это важное средство системы ввода-вывода, обеспечиваемое совместной работой этой системы и диспетчера виртуальной памяти. Сама ОС использует проекционный ввод-вывод для выполнения важных функций, таких как кэширование файлов или загрузка и выполнение программ. Диспетчер виртуальной памяти также делает проекционный ввод-вывод доступным пользовательскому режиму через базовые сервисы. Подсистемы среды могут использовать эти сервисы для предоставления средств проекционного файлового ввода-вывода своим клиентским программам.
Проекционный ввод-вывод позволяет рассматривать файл, находящийся на диске, как часть виртуальной памяти процесса. Программа может выполнять доступ к файлу как к большому массиву, не прибегая к буферизации данных или явному дисковому вводу-выводу. Программа просто должна обратиться по определенному адресу памяти, а диспетчер виртуальной памяти использует свой механизм подкачки для загрузки нужной страницы из дискового файла. Если приложение выполняет запись в свое адресное пространство, то эти изменения записываются диспетчером виртуальной памяти на диск в ходе обычной откачки страниц.
Приложения, выполняющие большой объем ввода-вывода или осуществляющие доступ к большому числу разных файлов, потенциально могут повысить скорость своей работы, используя проекционный ввод-вывод, так как запись в память гораздо быстрее записи на диск. Кроме того, диспетчер виртуальной памяти оптимизирует свой доступ к диску, поэтому приложения, используя проекционный ввод-вывод, получают и это преимущество.
Компонент системы ввода-вывода, называемый диспетчером кэша, применяет проекционный ввод-вывод для управления своим кэшем в памяти. Файловые системы и сетевой сервер Windows 2000 используют этот кэш для размещения в памяти часто требуемых данных, чтобы снизить время отклика для программ, выполняющих много операций ввода-вывода. Тогда как большинство систем кэширования выделяют в памяти файловый кэш фиксированного размера, кэш NT растет или уменьшается в зависимости от объема доступной памяти. Когда поток открывает и использует файл, файловая система обращается к диспетчеру кэша для создания неименованного объекта-секции и отображения в него файла1. Когда же вызывающая программа использует файл, диспетчер виртуальной памяти переносит страницы, к которым осуществляется доступ, с диска в объект-секцию и обратно на диск в ходе подкачки. Средство подкачки автоматически расширяет размер кэша (используя обычные механизмы рабочего набора), если доступно много памяти, и уменьшает его, если необходимы свободные страницы. Используя систему подкачки страниц диспетчера виртуальной памяти, диспетчер кэша избегает дублирования этой работы.
4.1.7.Особенности использования асинхронного ввода-вывода
При вызове сервисов ввода-вывода NT разработчик должен определить, вызвать ли их синхронно или асинхронно. Для операций, которые выполняются быстро или в течение предсказуемого времени, эффективен синхронный ввод вывод, поэтому для таких сервисов система ввода-вывода предоставляет только синхронный режим работы. Асинхронный ввод-вывод дает наибольшие преимущества тогда, когда время выполнения операции велико или очень непостоянно. Например, количество файлов в каталоге может существенно повлиять на время их перечисления. Поэтому сервис опроса каталога файлов является, г умолчанию, асинхронным — так же, как и чтение файла, запись в файл, уведомление об изменении содержимого каталога и некоторые другие сервисы.
Асинхронный ввод-вывод требует несколько большего объема программирования в обмен на более тонкий контроль операций ввода-вывода и потенциальное повышение производительности. Поток, использующий асинхронный ввод-вывод, не задерживается на время пересылки данных. Однако он должен синхронизировать использование передаваемых данных с моментом завершения передачи устройством.
Выполняя асинхронный ввод-вывод, код пользовательского режима может использовать для такой синхронизации один из нескольких объектов исполнительной системы. Файловые объекты поддерживают синхронизацию, так что самым простым способом является ожидание у описателя файла в некоторой точке после выдачи запроса ввода-вывода. Когда передача данных закончена, диспетчер ввода-вывода устанавливает описатель файла в состояние "свободен", и выполнение ожидающего потока возобновляется.
Рис. 8-19 иллюстрирует проблему, которая может возникнуть при использовании этого метода, если для вызывающей программы параллельно выполняются несколько запросов ввода-вывода. Предположим, что сервер базы данных, выполняющийся под NT, получает клиентский запрос на чтение записи из базы. Пока эта операция выполняется, чтение записи из базы запрашивается другим клиентским потоком. Сервер, который открыл файл базы данных только один раз, использует для ссылки на него единственный описатель.

1 Некоторые ОС, такие как Clouds и BiiN (см. библиографию), работают по-другому, используя для выполнения серверного кода вызывающий поток, но предварительно переключая адресное пространство
1 В данном предложении подразумевается, что модули управления окнами и выводом на экран располагаются в подсистеме Win32. Однако, начиная с версии Windows 2000 4.0, они перенесены в исполнительную систему NT для повышения производительности
1 Первоначальная среда MS-DOS Windows 2000 использует исходный код MS-DOS 5.0 и, таким образом, совместима с этой версией MS-DOS. Она также совместима с LIM-EMS 4.0, DPMI 0.9 и XMS 3.0. VCPI поддерживается на процессорах MIPS, но не процессорах Intel. Среда MS-DOS Windows 2000 не поддерживает также приложения, которые напрямую пишут на жесткий или гибкий диск, поскольку это может нарушить целостность системы.
2 Схема и содержимое памяти остается примерно таким же и на платформах MIPS, но блок исполнения команд заменяется. На платформах MIPS блок исполнения команд эмулирует команды Intel с использованием команд процессора MIPS. Этот код и виртуальные драйверы устройств, показанные на рис. 5-17, созданы фирмой Insignia Solutions Ltd. Виртуальные драйверы устройств фирмы Insignia для обеспечения совместимости используются и на платформах Intel, и на платформах MIPS.
1 Кэш NT, следовательно, состоит из набора объектов-секций. Диспетчер кэша использует внутренние структуры данных для учета различных секций и поиска данных в кэше.