- •Модель процесса, Создание и завершение процесса
- •Иерархии, реализация, состояния процессов
- •Иерархии процессов
- •Реализация процессов
- •Состояния процессов
- •Классическая модель потоков
- •2.1 Классическая модель потоков
- •Применение потоков, моделирование режима многозадачности
- •Потоки в posix, реализация потоков в пользовательском пространстве
- •Реализация потоков в ядре, гибридная реализация, активация планировщика Реализация потоков в ядре
- •Гибридная реализация
- •Активация планировщика
- •Всплывающие потоки, превращение однопоточного кода в многопоточный Всплывающие потоки
- •2.2. Превращение однопоточного кода в многопоточный
- •Взаимодействие процессов: состязательная ситуация, критические области Межпроцессное взаимодействие.
- •Состояние состязания.
- •Критическая область.
- •3.1 Взаимодействие между процессами
- •Передача информации от одного процесса другому
- •3.1.2 Состояние состязания
- •3.1.3 Критические области
- •Взаимодействие процессов: взаимное исключение с активным ожиданием, приостановка и активизация
- •2.Взаимное исключение с активным ожиданием
- •2.1 Запрещение прерываний.
- •2.2 Переменные блокировки.
- •3.Приостановка и активизация
- •Введение в планирование, планирование в пакетных системах
- •Планирование в пакетных системах
- •Планирование в интерактивных системах Введение
- •Гарантированное планирование
- •Лотерейное планирование
- •Справедливое планирование
- •Планирование потоков
- •Планирование в системах реального времени, политика и механизмы, планирование потоков
- •Понятие адресного пространства, правление свободной памятью.
- •Методы распределения памяти с использования дискового пространства:
- •Страничное распределение виртуальной памяти
- •Сегментное распределение памяти
- •3. Сегментно-страничная организация разделения памяти
- •Страничная организация памяти, таблицы страниц Страничная организация памяти, таблицы страниц
- •Страничная организация памяти. Виртуальная память.
- •Структура страниц.
- •Формирование адреса при страничном преобразовании.
- •Преимущества страничной памяти
- •Недостатки страничной памяти
- •Ускорение работы страничной организации памяти, таблицы страниц для больших объемов памяти
- •Оптимальный алгоритм замещения страниц, сравнительная характеристика алгоритмов замещения страниц Алгоритмы замещения страниц
- •Оптимальный алгоритм замещения страниц
- •Алгоритм исключения недавно использовавшейся страницы
- •Алгоритм fifo
- •Алгоритм «второй шанс»
- •Алгоритм «часы»
- •Алгоритм замещения наименее востребованной страницы
- •Сравнительная характеристика алгоритмов замещения страниц
- •Разработка систем страничной организации памяти: локальная и глобальная политики, управление загрузкой, разделение пространства команд и данных
- •Локальная и глобальная политика
- •Управление загрузкой
- •Разделение пространства команд и данных
- •Совместно использование страниц, библиотек, очистка страниц, обработка ошибки отсутствия страницы. Совместно используемые страницы
- •Совместно используемые библиотеки
- •Политика очистки страниц
- •Обработка ошибки отсутствия страницы
- •Файлы: имена, структура, типы атрибуты файлов, доступ и операции с файлами.
- •Каталоги: одноуровневые каталоги, иерархические системы каталогов, операции с каталогами
- •Структура файловой системы, реализация файлов, каталогов.
- •Основы аппаратного обеспечения ввода-вывода Устройства ввода-вывода
- •Контроллеры устройств
- •Ввод-вывод, отображаемый на пространство памяти.
- •Принципы создания программного обеспечения ввода-вывода
- •Диски: аппаратная часть, форматирование, алгоритмы планирования перемещения блока головок.
- •Форматирование диска
- •Алгоритмы планирования перемещения головок
- •Аппаратная составляющая и программное обеспечение часов, таймеры
- •Программное обеспечение пользовательского интерфейса: клавиатура, мышь, монитор
- •2.4. Монитор
- •Маршрутизация с использованием масок постоянной и переменной длины
- •Фрагментация ip-пакетов, параметры и механизм фрагментации
- •Групповое вещание
- •Стандартная модель группового вещания ip
- •Основные типы протоколов группового вещания
- •Инжиниринг трафика в mpls
Совместно использование страниц, библиотек, очистка страниц, обработка ошибки отсутствия страницы. Совместно используемые страницы
Отдельный пользователь может запускать несколько программ, использующих одну и ту же библиотеку. Совместное использования страниц нужно, чтобы избежать одновременного присутствия в памяти двух копий одной и той же страницы. Но не все страницы могут использоваться совместно. Страницы, предназначенные только для чтения, например, содержащие текст программы, могут использоваться совместно, а совместное использование страниц с данными связано с дополнительными сложностями.
Если программа будет запущена дважды, то большинство операционных систем автоматически организуют совместное использование текстовых страниц, чтобы в памяти была только одна копия.
Если поддерживаются отдельные I- и D-пространства, задача совместного использования программ становится относительно простой за счет наличия одного или нескольких процессов, использующих одну и ту же таблицу страниц для своих I-пространств, но разные таблицы страниц для своих D-пространств. Обычно в реализациях, поддерживающих совместное использование страниц таким образом, таблица страниц является структурой данных, независимой от таблицы процессов. Каждый процесс в своей таблице процесса имеет два указателя: один на таблицу страниц I-пространства, другой на таблицу страниц D-пространства. Когда планировщик процессов выбирает запускаемый процесс, он использует эти указатели для определения местонахождения таблиц страниц и настройки с их помощью диспетчера памяти (MMU). Процессы могут совместно использовать программы (или иногда библиотеки) даже в отсутствие отдельных I- и D-пространств, но для этого используется более сложный механизм.
Когда два и более процесса совместно используют один и тот же код, возникает проблема совместно используемых страниц. Предположим, что два процесса, A и B, запускают редактор и совместно используют его страницы. Если планировщик примет решение удалить процесс A из памяти, пожертвовав всеми его страницами и заполнив опустевшие страничные блоки какой-нибудь другой программой, это приведет к тому, что процесс B сгенерирует большое количество ошибок отсутствия страницы и вернет эти страницы назад.
Также при остановке процесса A необходимо иметь возможность определить, какие страницы все еще используются, чтобы их дисковое пространство случайно не оказалось освобожденным. Просмотр всех таблиц страниц для того, чтобы определить совместное использование страницы, — обычно очень затратная операция, поэтому для отслеживания совместно используемых страниц понадобится специальная структура данных, особенно если предметом совместного использования является отдельная страница (или ряд страниц), а не вся таблица страниц.
Совместно используемые библиотеки
В современных системах имеется множество больших библиотек, используемых многими процессами.
Общая технология совместно используемых (общих) библиотек, которые в Windows называются динамически подключаемыми библиотеками (Dynamic Link Libraries (DLL)). При компоновке программы в команде компоновщику указывается один или несколько объектных файлов и, возможно, несколько библиотек, как, например, в команде UNIX, она компонует все файлы с расширением .o (object), имеющиеся в текущем каталоге, а затем сканирует две библиотеки, /usr/lib/libc.a и /usr/lib/libm.a. Любые функции, вызываемые в объектных файлах, но не присутствующие в них (например, printf), называются неопределенными внешними функциями и выискиваются в библиотеках. Если они найдены, то их включают в исполняемый двоичный файл. Любые вызываемые, но не присутствующие в них функции также становятся неопределенными внешними функциями.
Теперь предположим, что обычная программа использует 20–50 Мбайт функций, относящихся к графике и пользовательскому интерфейсу. Статически скомпонованные сотни программ со всеми этими библиотеками будут тратить впустую громадный объем дискового пространства, а также пространства оперативной памяти, как только они будут загружены, поскольку у системы не будет способа узнать о том, что она может использовать эти библиотеки как общие. Когда программа скомпонована с учетом совместного использования библиотек (что несколько отличается от статической компоновки), вместо включения реально вызываемых функций компоновщик включает небольшую подпрограмму-заглушку, которая в процессе исполнения привязывается к вызываемой функции. В зависимости от системы или от особенностей конфигурации совместно используемые библиотеки загружаются либо при загрузке программы, либо, когда присутствующие в них функции вызываются в первый раз. Разумеется, если совместно используемая библиотека уже загружена другой программой, то нет нужды загружать ее повторно — именно в этом и заключается весь смысл. Следует заметить, что при загрузке или использовании общей библиотеки вся библиотека разом в память не считывается. Она загружается постранично, по мере надобности, поэтому функции, которые не были вызваны, в оперативную память не переносятся.