- •18. Ос семейства unix. Архитектура виртуальной файловой системы. Виртуальные индексные дескрипторы. Монтирование файловых систем. 82
- •31. Файловая система Novell NetWare. Журналирование. Поддержка дополнительных пространств имен. 126
- •32. Ос семейства unix. System V ipc. Разделяемая память. Семафоры. Сообщения. Программные каналы. 126
- •Билет 1
- •1. Классификация современных ос.
- •2. Ос семейства unix. System V ipc. Разделяемая память. Семафоры. Сообщения. Программные каналы.
- •Разделяемая память
- •Семафоры
- •Сообщения
- •Программные каналы
- •Билет 2
- •Распределение оперативной памяти (conversional memory, hma, ems, xms)
- •Базовая память (conventional memory)
- •Дополнительная память (Extended Memory Specification - xms)
- •Расширенная память (Expanded Memory Specification - ems)
- •Верхняя память (High Memory Area - hma)
- •4. Ос семейства unix. Сигналы. Сигналы
- •Доставка и обработка сигнала
- •Билет 3
- •5. Файловые системы fat и vfat. Файловая система fat
- •Загрузочный сектор
- •Корневой каталог root
- •Файловая система vfat
- •6. Ос семейства unix. Управление вводом - выводом. Блочные, символьные и потоковые драйверы. Управление вводом – выводом
- •Принципы системной буферизации ввода/вывода
- •Системные вызовы для управления вводом/выводом
- •Блочные, символьные и потоковые драйверы Блочные драйверы
- •Символьные драйверы
- •Потоковые драйверы
- •Билет 4
- •7. Сравнительные особенности ядер операционных систем Windows nt и os/2 Ядро Windows nt
- •8. Ос семейства unix. Потоки. Программный интерфейс сокетов. Потоки
- •Программный интерфейс сокетов Сокет
- •Программный интерфейс сокетов
- •Билет 5
- •9. Одноранговые сетевые ос. Структура сетевой операционной системы
- •Одноранговые сетевые ос и ос с выделенными серверами
- •10. Ос семейства unix. Архитектура виртуальной файловой системы. Виртуальные индексные дескрипторы. Монтирование файловых систем. Архитектура виртуальной файловой системы
- •Виртуальные индексные дескрипторы
- •Монтирование файловых систем
- •Структура NetWare и обзор особенностей
- •Способы повышения производительности
- •Способы обеспечения открытости и расширяемости
- •Способы обеспечения надежности
- •Защита информации
- •Нити Диспетчеризация процессов (нитей)
- •Кольца защиты Первый уровень защиты sft-I
- •Второй уровень надёжности sft-II
- •Третий уровень надёжности sft-III
- •12. Основные сетевые сервисы ос unix. X-Window. Основные сетевые сервисы ос unix
- •Перечень основных сетевых сервисов
- •Общая организация X-Window
- •Клиентская и серверная части
- •Базовые библиотеки
- •13. Файловая система Novell NetWare. Журналирование. Поддержка дополнительных пространств имен. Файловая система Novell NetWare
- •Журналирование Поддержка дополнительных пространств имен Пространства имен
- •Билет 8
- •15. Концепции Windows nt. Архитектура ядра nt, защищенные подсистемы (Win 32, Win 16, dos, os/2, posix). Концепции Windows nt
- •Архитектура ядра nt, защищенные подсистемы (Win 32, Win 16, dos, os/2, posix) Архитектура ядра Windows nt 5.0
- •Архитектура системы
- •Режим ядра
- •Исполняемая часть
- •Абстракция от оборудования
- •Пользовательские процессы
- •Подсистемы среды и библиотеки dll
- •Новые черты ядра nt 5.0
- •Объект "Задание"
- •Управление памятью большой емкости
- •Пользователи и группы
- •Идентификаторы
- •Разграничения прав на доступ к файловой системе
- •Алгоритм планирования процессов и нитей
- •Передача параметров
- •Связывание (binding)
- •Обработка особых ситуаций (exception)
- •Семантика вызова
- •Представление данных
- •Билет 11
- •21. Концепции построения семейств Windows 3.X и 9x/me
- •1. Самое начало
- •2. Начало: Windows 1.0 /Ноябрь 1985/
- •3. Улучшения: Windows 2.0 /Ноябрь 1987/
- •Windows 386 /9 декабря 1987 / Windows 2.1 (286) /Июнь 1988/
- •4. Обещанное: Windows 3.0/22 мая 1990/
- •5. Ещё лучше: Windows 3.1 /1992/
- •6. Интеграция сетевых средств: Windows for Workgroups 3.11 /Ноябрь 1992/
- •7. Новые технологии: Windows nt 3.1 /27 июля 1993/
- •Windows nt 3.5 /21 сентября 1994/ Windows nt 3.51 /30 мая 1995/
- •8. Прорыв: Windows 95 /24 августа 1995/
- •9. Nt с новым лицом: Windows nt 4.0 /31 июля 1996/
- •10. Хит: Windows 98 /Ноябрь(?) 1998/
- •11. Продолжение: Windows Me/1999(?)/
- •22. Ос семейства unix. Пользовательская и ядерная составляющая процессов. Жизненный цикл процесса. Пользовательская и ядерная составляющая процессов Понятие нити (threads)
- •Жизненный цикл процесса
- •Суперблок
- •Индексные дескрипторы
- •Имена файлов
- •Недостатки и ограничения
- •Структура каталога
- •Каталоги
- •Виртуальная память
- •Аппаратно-независимый уровень управления памятью
6. Ос семейства unix. Управление вводом - выводом. Блочные, символьные и потоковые драйверы. Управление вводом – выводом
Мы уже обсуждали проблемы организации ввода/вывода в ОС UNIX в п. 2.6.2. В этом разделе мы хотим рассмотреть этот вопрос немного более подробно, разъяснив некоторые технические детали. При этом нужно отдавать себе отчет, что в любом случае мы остаемся на концептуальном уровне. Если вам требуется написать драйвер некоторого внешнего устройства для некоторого конкретного варианта ОС UNIX, то неизбежно придется внимательно читать документацию. Тем не менее знание общих принципов будет полезно.
Традиционно в ОС UNIX выделяются три типа организации ввода/вывода и, соответственно, три типа драйверов. Блочный ввод/вывод главным образом предназначен для работы с каталогами и обычными файлами файловой системы, которые на базовом уровне имеют блочную структуру. В пп. 2.4.5 и 3.1.2 указывалось, что на пользовательском уровне теперь возможно работать с файлами, прямо отображая их в сегменты виртуальной памяти. Эта возможность рассматривается как верхний уровень блочного ввода/вывода. На нижнем уровне блочный ввод/вывод поддерживается блочными драйверами. Блочный ввод/вывод, кроме того, поддерживается системной буферизацией (см. п. 3.3.1).
Символьный ввод/вывод служит для прямого (без буферизации) выполнения обменов между адресным пространством пользователя и соответствующим устройством. Общей для всех символьных драйверов поддержкой ядра является обеспечение функций пересылки данных между пользовательскими и ядерным адресными пространствами.
Наконец, потоковый ввод/вывод (который мы не будем рассматривать в этом курсе слишком подробно по причине обилия технических деталей) похож на символьный ввод/вывод, но по причине наличия возможности включения в поток промежуточных обрабатывающих модулей обладает существенно большей гибкостью.
Принципы системной буферизации ввода/вывода
Традиционным способом снижения накладных расходов при выполнении обменов с устройствами внешней памяти, имеющими блочную структуру, является буферизация блочного ввода/вывода. Это означает, что любой блок устройства внешней памяти считывается прежде всего в некоторый буфер области основной памяти, называемой в ОС UNIX системным кэшем, и уже оттуда полностью или частично (в зависимости от вида обмена) копируется в соответствующее пользовательское пространство.
Принципами организации традиционного механизма буферизации является, во-первых, то, что копия содержимого блока удерживается в системном буфере до тех пор, пока не возникнет необходимость ее замещения по причине нехватки буферов (для организации политики замещения используется разновидность алгоритма LRU, см. п. 3.1.1). Во-вторых, при выполнении записи любого блока устройства внешней памяти реально выполняется лишь обновление (или образование и наполнение) буфера кэша. Действительный обмен с устройством выполняется либо при выталкивании буфера вследствие замещения его содержимого, либо при выполнении специального системного вызова sync (или fsync), поддерживаемого специально для насильственного выталкивания во внешнюю память обновленных буферов кэша.
Эта традиционная схема буферизации вошла в противоречие с развитыми в современных вариантах ОС UNIX средствами управления виртуальной памятью и в особенности с механизмом отображения файлов в сегменты виртуальной памяти (см. пп. 2.4.5 и 3.1.2). (Мы не будем подробно объяснять здесь суть этих противоречий и предложим читателям поразмышлять над этим.) Поэтому в System V Release 4 появилась новая схема буферизации, пока используемая параллельно со старой схемой.
Суть новой схемы состоит в том, что на уровне ядра фактически воспроизводится механизм отображения файлов в сегменты виртуальной памяти. Во-первых, напомним о том, что ядро ОС UNIX действительно работает в собственной виртуальной памяти. Эта память имеет более сложную, но принципиально такую же структуру, что и пользовательская виртуальная память. Другими словами, виртуальная память ядра является сегментно-страничной, и наравне с виртуальной памятью пользовательских процессов поддерживается общей подсистемой управления виртуальной памятью. Из этого следует, во-вторых, что практически любая функция, обеспечиваемая ядром для пользователей, может быть обеспечена одними компонентами ядра для других его компонентов. В частности, это относится и к возможностям отображения файлов в сегменты виртуальной памяти.
Новая схема буферизации в ядре ОС UNIX главным образом основывается на том, что для организации буферизации можно не делать почти ничего специального. Когда один из пользовательских процессов открывает не открытый до этого времени файл, ядро образует новый сегмент и подключает к этому сегменту открываемый файл. После этого (независимо от того, будет ли пользовательский процесс работать с файлом в традиционном режиме с использованием системных вызовов read и write или подключит файл к сегменту своей виртуальной памяти) на уровне ядра работа будет производиться с тем ядерным сегментом, к которому подключен файл на уровне ядра. Основная идея нового подхода состоит в том, что устраняется разрыв между управлением виртуальной памятью и общесистемной буферизацией (это нужно было бы сделать давно, поскольку очевидно, что основную буферизацию в операционной системе должен производить компонент управления виртуальной памятью).
Почему же нельзя отказаться от старого механизма буферизации? Все дело в том, что новая схема предполагает наличие некоторой непрерывной адресации внутри объекта внешней памяти (должен существовать изоморфизм между отображаемым и отображенным объектами). Однако, при организации файловых систем ОС UNIX достаточно сложно распределяет внешнюю память, что в особенности относится к i-узлам. Поэтому некоторые блоки внешней памяти приходится считать изолированными, и для них оказывается выгоднее использовать старую схему буферизации (хотя, возможно, в завтрашних вариантах UNIX и удастся полностью перейти к унифицированной новой схеме).
