- •Сетевые операционные системы
- •Глава 1. Эволюция операционных систем 22
- •Глава 2. Назначение и функции операционной системы 59
- •Глава 3. Архитектура операционной системы 95
- •Глава 4. Процессы и потоки 139
- •Глава 5. Управление памятью 260
- •Глава 6. Аппаратная поддержка мультипрограммирования на примере процессора Pentium 333
- •Глава 7. Ввод-вывод и файловая система 389
- •Глава 8. Дополнительные возможности файловых систем 512
- •Глава 9. Сеть как транспортная система 576
- •Глава 10. Концепции распределенной обработки в сетевых ос 686
- •Глава 11. Сетевые службы 736
- •Глава 12. Сетевая безопасность 855
- •Благодарности
- •Предисловие авторов ко второму изданию
- •Для кого эта книга
- •Структура книги
- •Глава 9 является компактным введением в сетевые технологии, о ее содержании уже рассказывалось при описании отличий второй редакции учебника.
- •От издательства
- •Глава 1. Эволюция операционных систем
- •Первые операционные системы
- •Мультипрограммные операционные системы для мэйнфреймов
- •Первые сетевые операционные системы
- •Операционные системы миникомпьютеров и первые локальные сети
- •Развитие операционных систем в 80-е годы
- •Развитие операционных систем в 90-е годы
- •Современный этап развития операционных систем персональных компьютеров
- •Надежность
- •Простота обслуживания
- •Пользовательский интерфейс
- •Средства информационной самоорганизации
- •Защита данных
- •Виртуальные распределенные вычислительные системы суперкомпьютеров
- •Задачи и упражнения
- •Глава 2. Назначение и функции операционной системы
- •Операционные системы для автономного компьютера
- •Ос как виртуальная машина
- •Ос как система управления ресурсами
- •Функциональные компоненты операционной системы автономного компьютера
- •Управление процессами
- •Управление памятью
- •Управление файлами и внешними устройствами
- •Защита данных и администрирование
- •Интерфейс прикладного программирования
- •Пользовательский интерфейс
- •Сетевые операционные системы
- •Функциональные компоненты сетевой ос
- •Сетевые службы и сетевые сервисы
- •Встроенные сетевые службы и сетевые оболочки
- •Одноранговые и серверные сетевые операционные системы
- •Ос в одноранговых сетях
- •Ос в сетях с выделенными серверами
- •Требования к современным операционным системам
- •Задачи и упражнения
- •Глава 3. Архитектура операционной системы
- •Ядро и вспомогательные модули ос
- •Ядро в привилегированном режиме
- •Многослойная структура ос
- •Аппаратная зависимость и переносимость ос
- •Типовые средства аппаратной поддержки ос
- •Машинно-зависимые компоненты ос
- •Переносимость операционной системы
- •Микроядерная архитектура Концепция
- •Преимущества и недостатки микроядерной архитектуры
- •Совместимость и множественные прикладные среды
- •Двоичная совместимость и совместимость исходных текстов
- •Трансляция библиотек
- •Способы реализации прикладных программных сред
- •Система виртуальных машин
- •Задачи и упражнения
- •Глава 4. Процессы и потоки
- •Мультипрограммирование
- •Мультипрограммирование в системах пакетной обработки
- •Мультипрограммирование в системах разделения времени
- •Мультипрограммирование в системах реального времени
- •Мультипроцессорная обработка
- •Планирование процессов и потоков
- •Понятия «процесс» и «поток»
- •Создание процессов и потоков
- •If(fork()) { действия родительского процесса }
- •Планирование и диспетчеризация потоков
- •Состояния потока
- •Вытесняющие и не вытесняющие алгоритмы планирования
- •Алгоритмы планирования, основанные на квантовании
- •Алгоритмы планирования, основанные на приоритетах
- •Смешанные алгоритмы планирования
- •Планирование в системах реального времени
- •Моменты перепланирования
- •Мультипрограммирование на основе прерываний Назначение и типы прерываний
- •Аппаратная поддержка прерываний
- •Программные прерывания
- •Диспетчеризация и приоритезация прерываний в ос
- •Функции централизованного диспетчера прерываний на примере ос семейства Windows nt
- •Процедуры обработки прерываний и текущий процесс
- •Системные вызовы
- •Синхронизация процессов и потоков Цели и средства синхронизации
- •Необходимость синхронизации и гонки
- •Критическая секция
- •Блокирующие переменные
- •Семафоры
- •Системные синхронизирующие объекты
- •Задачи и упражнения
- •Глава 1. Эволюция операционных систем 22
- •Глава 2. Назначение и функции операционной системы 59
- •Глава 3. Архитектура операционной системы 95
- •Глава 4. Процессы и потоки 139
- •Глава 5. Управление памятью 260
- •Глава 6. Аппаратная поддержка мультипрограммирования на примере процессора Pentium 333
- •Глава 7. Ввод-вывод и файловая система 389
- •Глава 8. Дополнительные возможности файловых систем 512
- •Глава 9. Сеть как транспортная система 576
- •Глава 10. Концепции распределенной обработки в сетевых ос 686
- •Глава 11. Сетевые службы 736
- •Глава 12. Сетевая безопасность 855
- •Глава 5. Управление памятью
- •Функции ос по управлению памятью
- •Типы адресов
- •Риc. 5.6. Общая и индивидуальные части виртуальных адресных пространств
- •Алгоритмы распределения памяти
- •Фиксированные разделы
- •Динамические разделы
- •Перемещаемые разделы
- •Виртуальная память
- •Страничное распределение
- •Оптимизация страничной виртуальной памяти
- •Двухуровневое страничное распределение памяти
- •Сегментно-страничное распределение
- •Разделяемые сегменты памяти
- •Кэширование данных. Универсальная концепция
- •Иерархия памяти
- •Принцип действия кэш-памяти
- •Проблема согласования данных
- •Отображение основной памяти на кэш
- •Схемы выполнения запросов в системах с кэш-памятью
- •Задачи и упражнения
- •Глава 6. Аппаратная поддержка мультипрограммирования на примере процессора Pentium
- •Регистры процессора
- •Привилегированные команды
- •Средства поддержки сегментации памяти
- •Виртуальное адресное пространство
- •Преобразование адресов
- •Защита данных при сегментной организации памяти
- •Сегментно-страничный механизм
- •Средства вызова процедур и задач
- •Вызов процедур
- •Вызов задач
- •Механизм прерываний
- •Кэширование в процессоре Pentium
- •Буфер ассоциативной трансляции
- •Кэш первого уровня
- •Совместная работа кэшей разного уровня
- •Задачи и упражнения
- •Глава 7. Ввод-вывод и файловая система
- •Задачи ос по управлению файлами и устройствами
- •Согласование скоростей обмена и кэширование данных
- •Разделение устройств и данных
- •Программный интерфейс к устройствам
- •Поддержка широкого спектра драйверов
- •Динамическая загрузка и выгрузка драйверов
- •Поддержка файловых систем
- •Синхронный и асинхронный режимы
- •Многослойная модель подсистемы ввода-вывода Общая схема
- •Менеджер ввода-вывода
- •Многоуровневые драйверы
- •Логическая организация файловой системы
- •Цели и задачи файловой системы
- •Типы файлов
- •Иерархическая структура файловой системы
- •Имена файлов
- •Монтирование
- •Атрибуты файлов
- •Логическая организация файла
- •Физическая организация файловой системы
- •Диски, разделы, секторы, кластеры
- •Физическая организация и адресация файла
- •Физическая организация fat
- •Физическая организация s5 и ufs
- •Физическая организация ntfs
- •Структура тома ntfs
- •Структура файлов ntfs
- •Каталоги ntfs
- •Файловые операции фс с запоминанием и без запоминания состояния операций
- •Открытие файла
- •Обмен данными с файлом
- •Блокировки файлов
- •Стандартные файлы ввода и вывода, перенаправление вывода
- •Контроль доступа к файлам Файл как разделяемый ресурс
- •Механизм контроля доступа
- •Контроль доступа в ос Unix
- •Контроль доступа в ос семейства Windows nt Общая характеристика
- •Разрешения на доступ к каталогам и файлам
- •Встроенные группы пользователей и их права
- •Задачи и упражнения
- •Глава 8. Дополнительные возможности файловых систем
- •Специальные файлы и аппаратные драйверы Специальные файлы как универсальный интерфейс
- •Структурирование аппаратных драйверов
- •Структура драйвера ос семейства Windows nt
- •Структура драйвера Unix
- •Блок-ориентированные драйверы
- •Байт-ориентированные драйверы
- •Отображаемые на память файлы
- •Дисковый кэш
- •Традиционный дисковый кэш
- •Дисковый кэш на основе виртуальной памяти
- •Отказоустойчивость файловых и дисковых систем
- •Восстанавливаемость файловых систем. Причины нарушения целостности файловых систем
- •Протоколирование транзакций
- •Восстанавливаемость файловой системы ntfs
- •Избыточные дисковые подсистемы raid
- •Обмен данными между Процессами и потоками
- •Конвейеры
- •Именованные конвейеры
- •Очереди сообщений
- •Разделяемая память
- •Задачи и упражнения
- •Глава 9. Сеть как транспортная система
- •Роль сетевых транспортных средств ос
- •Коммутация пакетов Пакеты
- •Буферы и очереди
- •Методы продвижения пакетов
- •Протокол и стек протоколов
- •Семиуровневая модель osi
- •Физический уровень
- •Канальный уровень
- •Сетевой уровень
- •Транспортный уровень
- •Сеансовый уровень
- •Уровень представления
- •Прикладной уровень
- •Стек tcp/ip Структура стека
- •Классы ip-адресов
- •Использование масок
- •Частные и публичные iр-адреса
- •Символьные имена и dns
- •Протокол dhcp
- •Ручное конфигурирование таблиц
- •Протоколы маршрутизации
- •Реализация стека протоколов в универсальной ос
- •Структура транспортных средств универсальной ос
- •Конфигурирование параметров стека tcp/ip
- •Функциональная схема маршрутизатора
- •Основные характеристики Cisco ios
- •Модульная структура ios
- •Прерывания и управление процессами
- •Организация памяти
- •Работа с буферами пакетов
- •Программная маршрутизация и ускоренная коммутация
- •Поддержка QoS
- •Задачи и упражнения
- •Глава 10. Концепции распределенной обработки в сетевых ос
- •Модели сетевых служб и распределенных приложений
- •Разделение приложений на части
- •Двухзвенные схемы
- •Трехзвенные схемы
- •Механизм передачи сообщений в распределенных системах
- •Синхронизация
- •Буферизация в примитивах передачи сообщений
- •Способы адресации
- •Надежные и ненадежные примитивы
- •Механизм Sockets ос Unix
- •Вызов удаленных процедур
- •Концепция удаленного вызова процедур
- •Генерация стабов
- •Формат rPp-сообщений
- •Связывание клиента с сервером
- •Особенности реализации rpc на примере систем Sun rpc и dce rpc
- •Задачи и упражнения
- •Глава 11. Сетевые службы
- •Сетевая файловая система
- •Модель неоднородной сетевой файловой системы
- •Модель загрузки-выгрузки и модель удаленного доступа
- •Архитектурные решения
- •Производительность, надежность и безопасность сетевой файловой системы
- •Семантика разделения файлов
- •Файловые stateful- и stateless-cepверы
- •Место расположения кэша
- •Способы распространения модификаций
- •Проверка достоверности кэша
- •Репликация файлов
- •Прозрачность репликации
- •Согласование реплик
- •Пример. Протокол передачи файлов ftp
- •Пример. Файловая система nfs
- •Справочная сетевая служба Назначение справочной службы
- •Архитектура справочной службы
- •Децентрализованная модель
- •Централизованная модель
- •Централизованная модель с резервированием
- •Декомпозиция справочной службы на домены
- •Распределенная модель
- •Основные концепции справочной службы Active Directory Домены, контроллеры доменов
- •Объекты
- •Глобальный каталог
- •Иерархическая структура Active Directory
- •Иерархия организационных единиц
- •Иерархия доменов. Доверительные отношения
- •Пространство имен
- •Репликация в Active Directory
- •Межсетевое взаимодействие
- •Основные подходы к организации межсетевого взаимодействия
- •Трансляция
- •Мультиплексирование стеков протоколов
- •Инкапсуляция протоколов
- •Задачи и упражнения
- •Глава 12. Сетевая безопасность
- •Основные понятия безопасности Конфиденциальность, целостность и доступность данных
- •Классификация угроз
- •Системный подход к обеспечению безопасности
- •Политика безопасности
- •Базовые технологии безопасности
- •Шифрование
- •Симметричные алгоритмы шифрования
- •Несимметричные алгоритмы шифрования
- •Криптоалгоритм rsa
- •Односторонние функции шифрования
- •Аутентификация, авторизация, аудит Аутентификация
- •Авторизация доступа
- •Технология защищенного канала
- •Технологии аутентификации Сетевая аутентификация на основе многоразового пароля
- •Аутентификация с использованием одноразового пароля
- •Синхронизация по времени
- •Использование слова-вызова
- •Аутентификация на основе сертификатов
- •Сертифицирующие центры
- •Инфраструктура с открытыми ключами
- •Аутентификация информации
- •Цифровая подпись
- •Аутентификация программных кодов
- •Система Kerberos
- •Первичная аутентификация
- •Получение разрешения на доступ к ресурсному серверу
- •Получение доступа к ресурсу
- •Достоинства и недостатки
- •Задачи и упражнения
- •Ответы к задачам и упражнениям Глава 1
- •Глава 2
- •Глава 3
- •Глава 4
- •Глава 5
- •Глава 6
- •Глава 7
- •Глава 8
- •Глава 9
- •Глава 10
- •Глава 11
- •Глава 12
- •Рекомендуемая литература
- •Сетевые операционные системы: Учебник для вузов
Байт-ориентированные драйверы
Драйвер байт-ориентированного устройства состоит из следующих стандартных функций:
open — открывает устройство;
close — закрывает устройство;
read — читает данные из устройства;
write — записывает данные в устройство;
ioctl — управляет вводом-выводом;
poll — опрашивает устройство для выяснения, не произошло ли некоторое событие;
mmap, segmap — используются при отображении файла-устройства на виртуальную память.
Функции чтения и записи данных выполняют обмен заданной последовательности байтов из буфера в области пользователя с контроллером символьного устройства.
Функция управления iосtl обеспечивает интерфейс к драйверу устройства, который выходит за рамки возможностей функций read и write. С помощью функции ioctl обычно устанавливается режим работы устройства, например задаются параметры COM-порта, такие как разрядность символов, количество стоповых битов, режим проверки четности и т. п.
Функции, используемые для отображения специального файла на виртуальную память, рассматриваются далее в разделе «Отображаемые на память файлы».
Если драйвер не поддерживает какую-либо из стандартных функций, то в таблицу bdevsw помещается указатель на специальную функцию nodev ядра. Например, драйвер принтера может не поддерживать функцию read. Функция nodev при вызове просто возвращает код ошибки ENODEV и на этом завершает свою работу. Для тех случаев, когда функция должна обязательно поддерживаться (примерами таких функций являются функции open и close), но она не выполняет никакой полезной работы, в операционной системе имеется функция nulldev, которая похожа на функцию nodev, но в отличие от нее возвращает значение 0, во всех системных вызовах означающее успешное завершение.
Рисунок 8.5 иллюстрирует взаимодействие функции записи драйвера байт-ориентированного устройства с обработчиком прерываний.
Функция записи осуществляет передачу данных из пользовательского буфера процесса, выдавшего запрос на обмен, в системный буфер, организованный в виде очереди байтов. Передача байтов идет до тех пор, пока системный буфер не заполнится до некоторого заранее определенного в драйвере уровня. Затем функция записи драйвера приостанавливается, выполнив системную функцию sleep, переводящую процесс, в рамках которого работает функция записи write, в состояние ожидания.
Если при очередном прерывании оказывается, что очередь байтов уменьшилась до определенной нижней границы, то обработчик прерываний активизирует секцию записи драйвера путем обращения к системной функции wakeup для перевода процесса в состояние готовности. Аналогично организована работа драйвера при чтении данных с устройства.
Рис. 8.5. Взаимодействие секции записи драйвера с модулем обработки прерывания.
Отображаемые на память файлы
Отображение файла на виртуальное адресное пространство процесса позволяет упростить программирование. Благодаря такому отображению с данными файла можно работать с помощью адресных указателей как с обычными переменными программы без использования громоздких файловых функций read, write и lseek. При отображении файлов на память широко используются механизмы подсистемы виртуальной памяти.
Действительно, подсистема виртуальной памяти связывает некоторый сегмент виртуального адресного пространства процесса с некоторым файлом или частью файла. Так, кодовый сегмент и сегмент инициализированных данных всегда связаны с файлом, в котором находится исполняемый модуль приложения. Сегменты стека и неинициализированных данных связаны с выделенными им областями системного страничного файла. При обращении кода приложения к некоторой переменной сегмента данных подсистема виртуальной памяти читает с диска данные из блоков, соответствующих странице виртуального адресного пространства, содержащей эту переменную, и переносит данные в оперативную память, если на момент обращения эта страница там отсутствовала. В сущности, подсистема виртуальной памяти выполняет обмен данными с файлом по запросу, только этот запрос формулируется косвенно, а не путем явного описания области файла, с которой нужно выполнить обмен данными, как это происходит при выполнении операции read или write.
Механизм отображения файлов на память использует возможности системы виртуальной памяти для файлов, содержащих произвольные данные (а не только данные исполняемого модуля программы).
Отображение данных файла на память осуществляется с помощью системного вызова, который указывает, какую часть какого файла нужно отобразить, а также задает виртуальный адрес, с которого должен начинаться новый сегмент виртуальной памяти процесса. Подсистема управления виртуальной памятью создает по этому системному вызову новый сегмент процесса, в дескриптор которого помещает указатель на открытый отображаемый файл. При первом же обращении приложения по виртуальному адресу, принадлежащему новому сегменту, происходит страничный отказ, при обработке которого из отображаемого файла читается несколько блоков и данные из них помещаются в физическую страницу.
В Unix SystemV Release 4 отображение файла на память выполняется с помощью системного вызова mmap. Этот вызов имеет следующие аргументы:
addr — виртуальный адрес начала сегмента, если он задается нулевым, то система сама выбирает подходящий адрес и возвращает его в качестве значения функции mmap;
len — размер сегмента;
prot — атрибуты защиты сегмента (только чтение, только запись и т. п.);
flags — флаги, определяющие режим использования сегмента: разделяемый (shared) или закрытый (private);
fd — дескриптор открытого файла, данные которого отображаются;
offset — смещение в файле, с которого начинаются отображаемые данные.
Для сравнения рассмотрим две функции, которые выполняют одни и те же действия с файлом, но с помощью разных средств — функция ffi1е использует традиционные файловые операции, а функция fmap работает с отображенным на память файлом.
Пусть файл /data/basel.dat состоит из записей фиксированной длины, каждая из которых включает переменную, отражающую значение баланса предприятия (переменная balance) и признак типа баланса (переменная mode):
В некоторых операционных системах, например в версиях Unix, основанных на коде System V Release 4, можно отобразить на память не только обычные файлы, но и некоторые другие типы файлов, например специальные файлы. Отображение на память блок-ориентированного специального файла, то есть раздела или части раздела диска, позволяет легко получить доступ к любой области диска, рассматриваемого как последовательность байтов. При отображении байт-ориентированных устройств на оперативную память отображается внутренняя память контроллера устройства, например память сетевого адаптера Ethernet.
В общем случае не все типы файлов можно отобразить на память, например, в Unix SVR4 нельзя отображать каталоги и символьные связи.
Отображение файла эффективней непосредственного использования файловых операций в нескольких отношениях.
Исключаются операции копирования данных из системной памяти в пользовательскую. При выполнении файловых операций read и write данные сначала попадают в системный буфер, а затем копируются в пользовательскую память, а при отображении они сразу копируются в страницы пользовательской памяти.
Программист применяет более удобный интерфейс с адресными указателями.
Уменьшается количество системных вызовов, так как при использовании файловых операций каждая операция обмена с файлом связана с выполнением системного вызова, а при отображении выполняется один системный вызов для всех последующих операций доступа к данным файла.
Обеспечивается возможность обмена данными между процессами с помощью разделяемых сегментов памяти, соответствующих одному отображенному файлу, вместо многочисленных операций обмена данными между диском и памятью.
К недостаткам техники отображения файлов на память можно отнести то, что размер отображенного файла нельзя увеличить, в то время как файловые операции допускают это путем записи данных в конец файла.
Механизм отображения файлов на память используется большинством современных операционных систем.
