
- •Сетевые операционные системы
- •Управление процессами
- •Управление процессами
- •Файловая система
- •Эволюция ос Первый период (1945 -1955)
- •Второй период (1955 - 1965)
- •Третий период (1965 - 1980)
- •Четвертый период (1980 - настоящее время)
- •Классификация ос
- •Особенности алгоритмов управления ресурсами
- •Особенности аппаратных платформ
- •Особенности областей использования
- •Особенности методов построения
- •Сетевые операционные системы Структура сетевой операционной системы
- •Одноранговые сетевые ос и ос с выделенными серверами
- •Ос для рабочих групп и ос для сетей масштаба предприятия
- •Управление локальными ресурсами
- •Управление процессами
- •Состояние процессов
- •Контекст и дескриптор процесса
- •Алгоритмы планирования процессов
- •Вытесняющие и невытесняющие алгоритмы планирования
- •Средства синхронизации и взаимодействия процессов
- •Управление памятью
- •Типы адресов
- •Методы распределения памяти без использования дискового пространства
- •Распределение памяти фиксированными разделами
- •Распределение памяти разделами переменной величины
- •Перемещаемые разделы
- •Методы распределения памяти с использованием дискового пространства Понятие виртуальной памяти
- •Страничное распределение
- •Сегментное распределение
- •Странично-сегментное распределение
- •Свопинг
- •Иерархия запоминающих устройств. Принцип кэширования данных
- •Средства аппаратной поддержки управления памятью и многозадачной среды в микропроцессорах Intel 80386, 80486 и Pentium
- •Средства поддержки сегментации памяти
- •Сегментно-страничный механизм
- •Средства вызова подпрограмм и задач
- •Управление вводом-выводом
- •Физическая организация устройств ввода-вывода
- •Организация программного обеспечения ввода-вывода
- •Обработка прерываний
- •Драйверы устройств
- •Независимый от устройств слой операционной системы
- •Пользовательский слой программного обеспечения
- •Файловая система
- •Имена файлов
- •Типы файлов
- •Логическая организация файла
- •Физическая организация и адрес файла
- •Права доступа к файлу
- •Кэширование диска
- •Общая модель файловой системы
- •Отображаемые в память файлы
- •Современные архитектуры файловых систем
- •Управление распределенными ресурсами Базовые примитивы передачи сообщений в распределенных системах
- •Способы адресации
- •Блокирующие и неблокирующие примитивы
- •Буферизуемые и небуферизуемые примитивы
- •Надежные и ненадежные примитивы
- •Вызов удаленных процедур (rpc) Концепция удаленного вызова процедур
- •Базовые операции rpc
- •Этапы выполнения rpc
- •Динамическое связывание
- •Семантика rpc в случае отказов
- •Синхронизация в распределенных системах
- •Алгоритм синхронизации логических часов
- •Алгоритмы взаимного исключения
- •Неделимые транзакции
- •Процессы и нити в распределенных системах Понятие "нить"
- •Различные способы организации вычислительного процесса с использованием нитей
- •Вопросы реализации нитей
- •Нити и rpc
- •Распределенные файловые системы
- •Интерфейс файлового сервиса
- •Интерфейс сервиса каталогов
- •Семантика разделения файлов
- •Вопросы разработки структуры файловой системы
- •Кэширование
- •Репликация
- •Проблемы взаимодействия операционных систем в гетерогенных сетях Понятия "internetworking" и "interoperability"
- •Гетерогенность
- •Основные подходы к реализации взаимодействия сетей
- •Мультиплексирование стеков протоколов
- •Использование магистрального протокола
- •Вопросы реализации
- •Сравнение вариантов организации взаимодействия сетей
- •Службы именования ресурсов и проблемы прозрачности доступа
- •Доменный подход
- •Основной и резервные контроллеры домена
- •Четыре модели организации связи доменов
- •Современные концепции и технологии проектирования операционных систем Требования, предъявляемые к ос 90-х годов
- •Расширяемость
- •Переносимость
- •Совместимость
- •Безопасность
- •Тенденции в структурном построении ос
- •Монолитные системы
- •Многоуровневые системы
- •Модель клиент-сервер и микроядра
- •Объектно-ориентированный подход
- •Множественные прикладные среды
- •Сетевой пакет dce фирмы osf
- •Концепции unix System V Release 4 Управление процессами Образ, дескриптор, контекст процесса
- •Порождение процессов
- •Планирование процессов
- •Файловые системы unix System V Release 4
- •Традиционная файловая система s5
- •Виртуальная файловая система vfs
- •Сетевая файловая система nfs
- •Управление памятью. Свопинг
- •Система ввода-вывода
- •Подсистема буферизации
- •Драйверы
- •Коммерческие реализации unix
- •Дополнительные свойства UnixWare по сравнению с unix System V Release 4
- •I. Поддержка мультипроцессирования
- •Микроядро Mach
- •Введение в Mach История Mach
- •Цели Mach
- •Основные концепции Mach
- •Сервер Mach bsd unix
- •Управление процессами в Mach Процессы
- •Примитивы управления процессами
- •Планирование
- •Управление памятью в Mach
- •Виртуальная память
- •Разделение памяти
- •Внешние менеджеры памяти
- •Распределенная разделяемая память в Mach
- •Коммуникации в ядре Mach
- •Отправка и получение сообщений
- •Сервер сетевых сообщений
- •Сетевые продукты фирмы Novell История и версии сетевой ос NetWare
- •Версия NetWare 4.1
- •Концепции построения NetWare Структура NetWare и обзор особенностей
- •Способы повышения производительности
- •Способы обеспечения открытости и расширяемости
- •Способы обеспечения надежности
- •Защита информации
- •Управление процессами
- •Файловая система
- •Основные направления развития NetWare Поддержка мультипроцессирования
- •Обеспечение процессорной независимости
- •Сетевые системные утилиты NetWare Connect 1.0 фирмы Novell
- •WinView for Networks v2.2 фирмы Citrix Systems
- •Шлюзы ip-сетей
- •Системы обработки сообщений mhs и GroupWise
- •Семейство сетевых ос компании Microsoft Сетевые продукты Microsoft
- •История Windows nt
- •Версии Windows nt
- •Области использования Windows nt
- •Концепции Windows nt Структура: nt executive и защищенные подсистемы
- •Множественные прикладные среды
- •Объектно-ориентированный подход
- •Процессы и нити
- •Алгоритм планирования процессов и нитей
- •Сетевые средства
- •Совместимость Windows nt с NetWare
- •Средства BackOffice
- •Сервер баз данных sql Server
- •Шлюз sna Server
- •Почтовые системы Microsoft Mail и система коллективной работы Microsoft Exchange
- •Система управления компьютерами System Management Server
- •Операционная система os/2 История развития os/2 и ее место на рынке
- •Битва Microsoft - ibm на рынке настольных ос
- •Os/2 - постепенные улучшения
- •Общая характеристика
- •Внутренняя организация os/2 Warp
- •Файловая система hpfs
- •Общая характеристика
- •Сетевые возможности
- •Управление сервером lan Server 4.0
- •Совместимость с NetWare
Внешние менеджеры памяти
В начале нашего обсуждения средств управления памятью в Mach мы кратко упомянули о менеджерах памяти пользовательского режима. Теперь рассмотрим их более детально. Каждый объект памяти, который отображается в адресное пространство процесса, должен иметь внешний менеджер памяти, который им управляет. Объекты памяти различных классов управляются различными менеджерами памяти. Каждый из них может реализовывать свою собственную семантику, может решать, где хранить данные страниц, которые не находятся в физической памяти, и следовать своим собственным правилам при решении вопроса о том, что делать с объектами после того, как их отображение в память отменяется.
Для того, чтобы отобразить какой-либо объект в адресное пространство процесса, этот процесс посылает сообщение менеджеру памяти, запрашивая операцию отображения. Для того, чтобы выполнить эту работу, нужны три порта. Первый, порт объекта (object port), создается менеджером памяти и используется в дальнейшем ядром для информирования менеджера памяти о страничных отказах и других событиях, связанных с объектом. Второй порт, порт управления, создается самим ядром, так что менеджер памяти может реагировать на эти события (многие из них требуют проведения некоторых действий менеджером памяти). Использование различных портов связано с тем, что порты являются однонаправленными. В порт объекта пишет ядро, а читает менеджер памяти, а порт управления работает в обратном направлении.
Третьим является порт имени (name port), который используется как разновидность имени, с помощью которого идентифицируется объект. Например, нить может передать ядру виртуальный адрес и спросить, к какой области он относится. Ответом будет указатель на порт имени. Если адреса относятся к одной и той же области, то они будут идентифицироваться одним и тем же портом имени.
Когда менеджер памяти отображает объект, он обеспечивает создание порта объекта как одного из параметров. Затем ядро создает два других порта и посылает инициализирующее сообщение на порт объекта, несущее информацию о портах управления и имени. Затем менеджер памяти посылает ответ, сообщая ядру о том, какими являются атрибуты объекта, а также о том, нужно или нет хранить объект в кэше после того, как отображение будет отменено. Изначально все страницы объекта помечаются как запрещенные по чтению и записи, чтобы вызвать прерывание при первом использовании.
В этом месте менеджер памяти выполняет чтение порта объекта и блокирует себя. Нить, которая отобразила объект, с этого момента разблокируется и может выполняться. Менеджер памяти простаивает до тех пор, пока ядро не попросит его что-либо сделать, записав сообщение в порт объекта.
Раньше или позже, нить несомненно попытается прочитать страницу или записать в страницу, относящуюся к объекту памяти. Ядро при этом пошлет сообщение менеджеру памяти через порт объекта, информируя его о том, к какой странице произошло обращение, и попросит менеджер обеспечить эту страницу. Это сообщение является асинхронным, так как ядро не решается заблокировать любую из своих нитей в ожидании ответа от пользовательского процесса, которого может и не быть. Во время ожидания ответа ядро приостанавливает вызвавшую обращение к странице нить и ищет другие нити для выполнения.
Когда менеджер памяти узнает о страничном отказе, он проверяет, является ли обращение разрешенным. Если нет, то он посылает ядру сообщение об ошибке. Если же отображение разрешено, менеджер памяти получает страницу тем методом, который подходит для этого объекта. Если объект является файлом, то менеджер памяти ищет корректный адрес и читает страницу в собственное адресное пространство. Затем он посылает ответ ядру, снабжая его указателем на эту страницу.
Ядро отображает страницу в адресное пространство вызвавшего обращение процесса. Теперь нить может быть разблокирована. Этот процесс повторяется до тех пор, пока все нужные страницы не загрузятся.
Чтобы быть уверенным в том, что существует необходимый запас свободных страничных кадров, нить страничного демона время от времени просыпается и проверяет состояние памяти. Если свободных страничных кадров физической памяти недостаточно, то она собирает информацию о старых "грязных" страницах и отсылает ее менеджеру памяти, ответственному за объект, которому принадлежат страницы. Ожидается, что менеджер памяти запишет эти страницы на диск и сообщит, когда эта операция будет завершена. Если страница относится к файлу, то менеджер сначала найдет смещение страницы в файле, а затем запишет ее туда. Используемый при этом алгоритм замены - это второй вопрос.
Стоит заметить, что страничный демон является частью ядра. Хотя алгоритм замены страниц полностью машинно-независим, в ситуации, когда память заполнена страницами, которые управляются разными менеджерами, нет приемлемого способа разрешить одному из них принимать решение о том, какую страницу нужно вытеснить из памяти. Единственным приемлемым способом является статическое распределение страничных кадров между различными менеджерами и разрешение каждому из них заменять страницы в пределах этого набора. Однако из-за того, что глобальный алгоритм, вообще говоря, более эффективен, чем локальный, такой подход не используется.
В дополнение к особым менеджерам памяти, которые отображают файлы и другие специальные объекты, имеется менеджер памяти "по умолчанию" (default) для "обычного" отображения страниц. Когда процесс просит выделить ему область виртуального адресного пространства с помощью вызова Allocate, то фактически происходит отображение объекта, управляемого менеджером памяти "по умолчанию". Этот менеджер поставляет заполненные нулями страницы, если это необходимо. Он использует временный файл для образования пространства на диске для свопинга страниц, а не специальную область на диске, как это делается в UNIX'е.
Чтобы концепция внешнего менеджера памяти заработала, должен существовать и использоваться строго определенный протокол взаимодействия между ядром и менеджером памяти. Этот протокол состоит из небольшого количества типов сообщений, которыми обмениваются ядро и менеджер. Любое взаимодействие между ними инициируется ядром в форме асинхронных сообщений, посылаемых в порт объекта некоторого объекта памяти. В ответ на него менеджер посылает асинхронный ответ на порт управления.
В таблице 6.4 приведен список типов сообщений, которые ядро посылает менеджеру памяти.
Таблица 6.4. Некоторые типы сообщений, посылаемых ядром менеджеру сообщений
Вызов |
Описание |
Init |
Инициализировать новый отображенный в память объект |
Data_request |
Передать ядру определенную страницу для обработки страничного отказа |
Data_write |
Взять страницу из памяти и переписать ее |
Data_unlock |
Разблокирует страницу, так что ядро может ее использовать |
Lock_completed |
Завершено выполнение предшествующий запрос Lock_request |
Terminate |
Информирование о том, что данный объект больше не используется |
Когда объект отображается в память с использованием вызова Map, то ядро посылает сообщение Initсоответствующему менеджеру памяти, чтобы позволить ему инициализировать себя. Это сообщение определяет порты, которые должны будут использоваться позже в диалоге с объектом. Запросы от ядра на получение страницы и поставку страницы осуществляются с помощью вызовов Data_request и Data_writeсоответственно. Эти сообщения управляют трафиком страниц в обоих направлениях, и поэтому являются наиболее важными вызовами.
Сообщение Data_unlock представляет собой запрос от ядра менеджеру памяти на разблокирование заблокированной страницы, так что ядро может использовать ее для другого процесса. СообщениеLock_completed оповещает о завершении последовательности Lock_request, и будет рассмотрен ниже. Наконец, сообщение Terminate сообщает менеджеру памяти, что объект, имя которого указано в вызове, больше не используется и может быть удален из памяти. Существуют вызовы, определенные для менеджера памяти "по умолчанию".
Сообщения, перечисленные в таблице 6.5, передаются от внешнего менеджера памяти ядру.
Таблица 6.5. Сообщения, посылаемые менеджером памяти ядру
Вызов |
Описание |
Set_attributes |
Ответ на вызов Init |
Data_provided |
Ответ на вызов Data_request - здесь: запрошенная страница доставлена |
Data_unavailable |
Ответ на вызов - страницы нет в наличии |
Lock_request |
Запрашивает ядро для выполнения очистки, вытеснения или блокировки страниц |
Destroy |
Разрушить объект, который больше не нужен |
Первое сообщение, Set_attributes, является ответом на сообщение Init. Оно сообщает ядру, что менеджер готов обрабатывать вновь отображенный объект. Ответ также содержит биты режима для объекта и говорит ядру, следует или нет кэшировать объект, даже если ни один процесс в какой-либо момент времени не отображает его. Следующие два сообщения являются ответами на сообщение Data_request. Это сообщение запрашивает страницу у менеджера памяти. Ответ менеджера зависит от того, может он предоставить страницу или нет. Первое сообщение говорит о том, что может, второе - о том, что нет.
Сообщение Lock_request позволяет менеджеру памяти попросить ядро очистить некоторые страницы, то есть послать ему эти страницы, чтобы они могли быть записаны на диск. Это сообщение может быть использовано также и для того, чтобы изменить режим защиты страниц (чтение, запись, выполнение). Наконец, сообщение Destroy служит для уведомления ядра о том, что некоторый объект больше не нужен.
Необходимо обратить внимание на то, что когда ядро посылает сообщение менеджеру памяти, оно в действительности выполняет вызов. Хотя при этом способе гибкость повышается, некоторые разработчики систем считают, что это неэлегантно - ядру вызывать пользовательский процесс для выполнения для ядра некоторого сервиса. Эти люди обычно верят в иерархические системы, когда нижние уровни обеспечивают сервис для верхних, а не наоборот.