
- •Введение
- •Введение в компьютерные и операционные системы
- •Структура компьютерной системы
- •Программное обеспечение компьютерной системы
- •1.2.1 Операционная система
- •1.2.1.1 Управляющая программа
- •1.2.1.2 Системные обрабатывающие программы
- •1.2.2 Пакеты прикладных программ
- •1.2.3 Программы технического обслуживания
- •Аппаратное обеспечение компьютерной системы
- •1.3.1 Процессор
- •1.3.2 Внутренняя память
- •1.3.3 Устройства ввода и вывода, внешняя память
- •Основные функции и архитектурные особенности ос
- •1.4.1 Основные функции ос:
- •3) Управление памятью.
- •1.4.2 Монолитное ядро
- •1.4.3 Слоеные системы (Layered systems)
- •1.4.4 Виртуальные машины
- •1.4.5 Микроядерная архитектура
- •1.4.6 Смешанные системы
- •Классификация ос
- •Контрольные вопросы
- •Архитектура компьютерных систем
- •Классификация архитектур по параллельной обработке данных
- •Гибридная архитектура numa
- •Кластерная архитектура
- •Проблемы выполнения сети связи процессоров в кластерной системе
- •Контрольные вопросы
- •Способы организации высокопроизводительных процессоров. Ассоциативные конвейерные и матричные процессоры
- •1) Ассоциативные процессоры
- •2) Конвейерные процессоры
- •3) Матричные процессоры
- •Ассоциативные процессоры
- •Конвейерные процессоры
- •Матричные процессоры
- •Контрольные вопросы
- •Способы организации высокопроизводительных процессоров. Новые архитектуры процессоров
- •Клеточные и днк-процессоры.
- •Коммуникационные процессоры
- •Процессоры баз данных
- •Потоковые процессоры
- •Нейронные процессоры
- •Процессоры с многозначной (нечеткой) логикой
- •Контрольные вопросы
- •Управление процессами. Состояние процессов и операции над процессами
- •Введение в процессы
- •Состояния процесса
- •Операции над процессами и связанные с ними понятия
- •5.3.1 Набор операций
- •5.3.2 Pcb и контекст процесса
- •5.3.3 Одноразовые операции
- •5.3.4 Многоразовые операции
- •5.3.5 Прерывание и типы прерываний
- •5.3.6 Переключение контекста
- •5.3.7 Ядро операционной системы
- •Контрольные вопросы
- •Управление процессами. Кооперация процессов и основные аспекты ее логической организации
- •Введение в кооперацию процессов
- •Взаимодействующие процессы
- •Категории средств обмена информацией
- •Логическая организация механизма передачи информации
- •6.4.1 Установление связи между процессами
- •6.4.2 Однонаправленные и двунаправленные связи между процессами
- •6.4.3 Особенности передачи информации с помощью линий связи
- •1) Буферизация
- •2) Поток ввода/вывода и сообщения
- •6.4.4. Надежность средств связи
- •6.4.5 Завершение связи
- •Потоки исполнения
- •Контрольные вопросы
- •Управление процессами. Алгоритмы синхронизации
- •Чередования, условия состязания и взаимоисключения
- •Критическая секция
- •Алгоритмы взаимоисключений
- •7.3.1 Требования, предъявляемые к алгоритмам
- •7.3.2 Запрет прерываний
- •7.3.3 Переменная-замок
- •7.3.4 Строгое чередование
- •7.3.5 Флаги готовности
- •7.3.6 Алгоритм Петерсона
- •7.3.7 Алгоритм булочной (Bakery algorithm)
- •Аппаратная поддержка взаимоисключений
- •7.4.1 Команда Test-and-Set (Проверить и присвоить 1)
- •7.4.2 Команда Swap (Обменять значения)
- •Недостатки алгоритмов взаимоисключений
- •Семафоры
- •7.6.1 Концепция семафоров
- •7.6.2 Решение проблемы производитель-потребитель с помощью семафоров
- •Мониторы
- •Сообщения
- •Эквивалентность семафоров, мониторов и сообщений
- •Контрольные вопросы
- •Управление процессами. Тупики
- •Введение в тупики
- •Концепция ресурса
- •Условия возникновения тупиков
- •Основные направления борьбы с тупиками
- •2) Обнаружение тупиков
- •3) Восстановление после тупиков
- •Алгоритм страуса
- •Обнаружение тупиков
- •Восстановление после тупиков
- •8.7.1 Восстановление при помощи перераспределения ресурсов
- •8.7.2 Восстановление через откат назад
- •8.7.3 Восстановление через ликвидацию одного из процессов
- •Способы предотвращения тупиков путем тщательного распределения ресурсов
- •8.8.1 Предотвращение тупиков и алгоритм банкира
- •8.8.2 Недостатки алгоритма банкира
- •Предотвращение тупиков за счет нарушения условий возникновения тупиков
- •8.9.1 Нарушение условия взаимоисключения
- •8.9.2 Нарушение условия ожидания дополнительных ресурсов
- •8.9.3 Нарушение принципа неперераспределяемости
- •8.9.4 Нарушение условия кругового ожидания
- •Проблемы аналогичные тупикам
- •8.10.1 Двухфазная локализация
- •8.10.2 Тупики не ресурсного типа
- •8.10.3 Голод
- •Контрольные вопросы
- •Управление памятью. Простейшие схемы управления памятью
- •1) Введение в управление памятью
- •2) Связывание адресов
- •Введение в управление памятью
- •Связывание адресов
- •Простейшие схемы управления памятью
- •9.3.1 Схема с фиксированными разделами
- •1) Один процесс в памяти
- •2) Оверлейная структура
- •9.3.2 Схема со свопингом
- •9.3.3 Схема с переменными разделами
- •Контрольные вопросы
- •Управление памятью. Архитектурные средства поддержки виртуальной памяти
- •1) Проблема размещения больших программ. Понятие виртуальной памяти
- •Проблема размещения больших программ. Понятие виртуальной памяти
- •Архитектурные средства поддержки виртуальной памяти
- •Способы организации виртуальной памяти
- •1) Страничная память
- •2) Сегментная организация памяти
- •3) Сегментно-страничная организации памяти
- •Ассоциативная память
- •Иерархия памяти
- •Размер страницы
- •Контрольные вопросы
- •Управление памятью. Аппаратно-независимый уровень управления виртуальной памятью
- •Введение в аппаратно-независимый уровень управления виртуальной памятью
- •Исключительные ситуации при работе с памятью
- •Стратегии управления страничной памятью
- •Алгоритмы замещения страниц
- •11.4.1 Алгоритм fifo (выталкивание первой пришедшей страницы)
- •11.4.2 Оптимальный алгоритм
- •11.4.3 Алгоритм lru (выталкивание дольше всего не использовавшейся страницы)
- •11.4.4 Алгоритм nfu (выталкивание редко используемой страницы)
- •11.4.5 Другие алгоритмы
- •Thrashing. Свойство локальности. Модель рабочего множества
- •Демоны пейджинга
- •Аппаратно-независимая модель памяти процесса
- •Отдельные аспекты функционирования менеджера памяти
- •Контрольные вопросы
- •Система управления вводом-выводом. Физические принципы организации ввода-вывода
- •Введение в систему управления вводом-выводом
- •Введение в физические принципы организации ввода-вывода
- •Общие сведения об архитектуре компьютера
- •Структура контроллера устройства
- •Опрос устройств
- •Прерывания
- •Прямой доступ к памяти
- •Контрольные вопросы
- •Система управления вводом-выводом. Логические принципы организации ввода-вывода
- •1) Введение в логические принципы организации ввода-вывода
- •2) Структура системы ввода-вывода
- •3) Систематизация внешних устройств и интерфейс между базовой подсистемой ввода-вывода и драйверами
- •Введение в логические принципы организации ввода-вывода
- •Структура системы ввода-вывода
- •Систематизация внешних устройств и интерфейс между базовой подсистемой ввода-вывода и драйверами
- •Функции базовой подсистемы ввода-вывода
- •Блокирующиеся, не блокирующиеся и асинхронные системные вызовы
- •Буферизация и кэширование
- •Spooling и захват устройств
- •Обработка прерываний и ошибок
- •Планирование запросов
- •Алгоритмы планирования запросов к жесткому диску
- •13.10.1 Строение жесткого диска и параметры планирования
- •Алгоритм fcfs
- •Алгоритм sstf
- •Алгоритмы сканирования (scan, c-scan, look, c-look)
- •Контрольные вопросы
- •Интерфейсы компьютерных систем
- •Классификация интерфейсов
- •Интерфейс rs-232 для порта сом
- •Интерфейс ieee 1284 для порта lpt
- •Интерфейс ps/2
- •Интерфейс usb
- •Интерфейс Firewire
- •Контрольные вопросы
- •Многопроцессорные компьютерные системы
- •1) Достоинства многопроцессорных систем
- •Достоинства многопроцессорных систем
- •Организация многопроцессорной аппаратуры
- •15.2.1 Общая шина
- •15.2.2 Матрица координатной коммутации
- •15.2.3 Организация с многопортовой памятью
- •Организация многопроцессорных операционных систем
- •15.3.1 Организация «главный-подчиненный»
- •15.3.2 Организация с раздельными мониторами
- •15.3.3 Симметричная организация
- •Контрольные вопросы
- •Требования к компьютерным системам
- •Основные требования к компьютерным системам
- •Отношение "стоимость/производительность"
- •Надежность и отказоустойчивость компьютерных систем
- •Показатели надежности компьютерных систем
- •Масштабируемость
- •Совместимость и мобильность программного обеспечения
- •Контрольные вопросы
- •Программы диагностики компьютерных систем
- •1) Программа диагностики post
- •2) Программа диагностики WatchDog
- •Программа диагностики post
- •Программа диагностики WatchDog
- •Контрольные вопросы
- •Список использованных источников
11.4.4 Алгоритм nfu (выталкивание редко используемой страницы)
Рассмотренные варианты LRU в принципе реализуемы, но, как уже отмечалось, они требуют специальной аппаратной поддержки, которой большинство современных процессоров не предоставляет. Поэтому хотелось бы иметь алгоритм, достаточно близкий к LRU, но не требующий сложной специальной поддержки.
Один из таких возможных алгоритмов - это алгоритм NFU (Not Frequently Used).
Для него требуются программные счетчики, по одному на каждую страницу, которые сначала равны нулю. При каждом прерывании по времени (а не после каждой инструкции) операционная система сканирует все страницы в памяти и у каждой страницы с установленным флагом обращения увеличивает на единицу значение счетчика, а флаг обращения сбрасывает.
Таким образом, кандидатом на освобождение оказывается страница с наименьшим значением счетчика, как страница, к которой реже всего обращались. Главным недостатком алгоритма NFU является то, что он никогда ничего не забывает. Например, страница, к которой очень много обращались некоторое время, а потом обращаться перестали, все равно не будет удалена из памяти, потому что ее счетчик содержит большую величину. Например, в многопроходных компиляторах страницы, которые активно использовались во время 1-го прохода, могут надолго сохранить большие значения счетчика, мешая загрузке полезных в дальнейшем страниц.
Возможна небольшая модификация алгоритма, которая реализует "забывание". Достаточно, чтобы при каждом прерывании по времени содержимое каждого счетчика сдвигалось вправо на 1 бит, а уже затем производилось бы его увеличение для страниц с установленным флагом обращения.
Другим, уже не так просто устранимым недостатком алгоритма является длительность процесса сканирования таблиц страниц.
11.4.5 Другие алгоритмы
Существуют и другие алгоритмы.
Например, алгоритм Second-Chance - модификации FIFO, которая позволяет избежать потери часто используемых страниц - анализ бита r (reference) для самой старой страницы. Если бит 1, то страница в отличие от FIFO не выталкивается, а очищается бит и страница становится в конец очереди. Если на все страницы ссылались, он превращается в FIFO. Данный алгоритм использовался в BSD Unix.
В компьютере Макинтош использован алгоритм NRU (Not Recently-Used), где страница выбирается на основе анализа битов модификации и ссылки.
Thrashing. Свойство локальности. Модель рабочего множества
Что делать, если в распоряжении процесса имеется недостаточное число кадров? Следует ли его приостановить с освобождением всех его кадров. Что нужно понимать под достаточным количеством кадров?
Хотя теоретически возможно уменьшить число кадров процесса до минимума, существует какое-то число активно используемых страниц, без которого процесс часто генерирует falt’ы (рис.11.2). Эта высокая частота страничных нарушений называется трешинг (trashing, иногда употребляется русский термин пробуксовка). Процесс находится в состоянии трешинга, если он больше времени занимается подкачкой страниц, нежели выполнением. Критическая ситуация такого рода возникает вне зависимости от конкретных алгоритмов замещения.
Рисунок 11.2 - Частота page fault'ов
Часто результатом трешинга является снижение производительности. Один из нежелательных сценариев развития событий может выглядеть следующим образом. При глобальном алгоритме замещения, процесс, которому не хватает кадров, начинает отбирать их у других процессов, а те в свою очередь начинают заниматься тем же. В результате все процессы попадают в очередь запросов к устройству вторичной памяти, а очередь процессов в состоянии готовности пустеет. Загрузка процессора снижается. Процессор видит это и увеличивает степень мультипрограммирования. Таким образом, пропускная способность системы падает из-за трешинга.
Эффект трешинга, возникающий при использовании глобальных алгоритмов, может быть ограничен за счет использования локальных алгоритмов замещения. Если даже один из процессов попал в трешинг, это не сказывается на других процессах. Однако он много времени проводит в очереди к устройству выгрузки, затрудняя подкачку страниц остальных процессов.
Критическая ситуация типа трешинга возникает вне зависимости от конкретных алгоритмов замещения. Единственным алгоритмом, теоретически гарантирующим отсутствие thrashing, является рассмотренный выше не реализуемый на практике оптимальный алгоритм.
Итак, трешинг - высокая частота страничных нарушений. Необходимо ее контролировать. Когда она высока, процесс нуждается в кадрах. Можно, устанавливая желаемую частоту fault'ов, регулировать размер процесса, добавляя или отнимая у него кадры. Как и в случае с рабочим множеством может оказаться целесообразным придержать процесс, освободив его кадры. Освободившиеся кадры выделяются другим процессам с высокой частотой fault'ов.
Для предотвращения трешинга нужно выделить процессу столько кадров, сколько ему нужно. Но как узнать, сколько ему нужно. Существует несколько подходов. Необходимо попытаться выяснить, как много кадров процесс реально использует. Этот подход определяет модель локальности выполнения процесса.
Концепция локальности
Суть концепции локальности изложена во введении. Изучая свойства локальности в пейджинговых системах, Деннинг сформулировал теорию рабочего множества программ.
Модель локальности состоит в том, что когда процесс выполняется, он двигается от одной локальности к другой. Локальность - набор страниц, которые активно используются вместе. Программа обычно состоит из нескольких различных локальностей, которые могут перекрываться. Например, когда вызвана процедура, она определяет новую локальность, состоящую из инструкций процедуры, ее локальных переменных, и множества глобальных переменных. После ее завершения процесс оставляет эту локальность, но может вернуться к ней вновь. Таким образом, локальность определяется кодом и данными программы. Заметим, что модель локальности - принцип, положенный в основу работы кэша. Если бы доступ к любым типам данных был случайным, кэш был бы бесполезным.
Если процессу выделять меньше кадров, чем ему нужно для поддержки его локальности он будет находиться в состоянии трешинга.
Модель рабочего множества (Working Set)
В варианте чистого пейджинга процессы стартуют без необходимых страниц в памяти. Первая же машинная инструкции генерирует page fault. Другой page fault происходит при локализации глобальных переменных и тут же при выделении памяти для стека. После того как процесс собрал большинство страниц, page fault'ы далее редки. Эта все происходит в соответствии с выборкой по запросу (требованию) в отличие от выборки с упреждением. Конечно, легко написать тестовую программу, которая систематически работает с большим адресным пространством. К счастью, большинство процессов не ведут себя подобным образом, а проявляют свойство локальности. В течение любой фазы вычислений процесс работает с небольшим количеством страниц. Этот набор называется рабочим множеством.
В некотором смысле предложенный Деннингом подход является практически реализуемой аппроксимацией оптимального алгоритма. Принцип локальности ссылок (недоказуемый, но подтверждаемый на практике) состоит в том, что если в период времени (T-t, T) программа обращалась к страницам (P1, P2, ..., Pn), то при надлежащем выборе t с большой вероятностью эта программа будет обращаться к тем же страницам в период времени (T, T+t). Другими словами, принцип локальности утверждает, что если не слишком далеко заглядывать в будущее, то можно хорошо его прогнозировать исходя из прошлого. Набор страниц (P1, P2, ..., Pn) и есть рабочее множество программы (или, правильнее, соответствующего процесса) в момент времени T. С течением времени рабочий набор процесса может изменяться как по составу страниц, так и по их числу.
Наиболее важное свойство рабочего множества - его размер. ОС выделяет каждому процессу достаточное число кадров, чтобы поместилось рабочее множество. Если еще остались кадры, то может быть инициирован другой процесс. Если рабочие множества процессов не помещаются в память, и начинается трешинг, то один из процессов надо попридержать.
Решение о размещении процессов в памяти должно базироваться на размере его рабочего множества. Для впервые инициируемых процессов это решение может быть принято эвристически. Во время работы размер рабочего множества процесса динамически меняется. Система должна уметь определять: расширяет процесс свое рабочее множество или перемещается на новое рабочее множество. Если память мала, чтобы содержать рабочее множество процесса, то page fault'ов много.
В системах с разделением времени процессы часто перемещаются на диск. Что делать, когда процесс возвращается в память. Опять ждать пока он соберет свое рабочее множество? Поэтому многие системы хранят информацию о рабочих множествах процессов и загружают их, даже если процесс еще не стартовал (стратегия выборки с упреждением).
Размер рабочего множества может быть фиксированным, а может динамически настраиваться. Рассмотрим один из алгоритмов динамической настройки рабочего множества. При создании каждому процессу назначается минимальный размер рабочего множества, определяющий число страниц процесса, гарантированно находящихся в физической памяти при его выполнении. Если процессу требуется физических страниц больше, чем минимальный размер рабочего множества, и в наличии имеется свободная физическая память, то система будет увеличивать размер рабочего множества, но, не превышая максимального размера. Если же процессу требуется еще больше страниц, то дополнительные страницы будут выделяться за счет свопинга, без увеличения рабочего множества. Поскольку замещаемые страницы рабочего множества в действительности еще некоторое время могут оставаться в физической памяти, то они при необходимости могут быть возвращены в рабочее множество достаточно быстро, не требуя дисковых операций.
Когда свободной физической памяти становится слишком мало, система будет стремиться увеличить ее количество, урезая рабочие множества, размеры которых превышают минимальные.
В установившемся состоянии система следит за количеством исключительных ситуаций не присутствия страницы, вызываемых процессом. Если процесс генерирует page fault, и память не слишком заполнена, то система увеличит размер его рабочего множества. Если же процесс не вызывает исключительных ситуаций в течение некоторого времени, то система будет урезать его рабочее множество. При использовании таких алгоритмов система будет пытаться обеспечить наилучшую производительность для каждого процесса, не требуя никакой дополнительной настройки системы пользователем.
Идея алгоритма подкачки Деннинга (иногда называемого алгоритмом рабочих наборов) состоит в том, что операционная система в каждый момент времени должна обеспечивать наличие в основной памяти текущих рабочих наборов всех процессов, которым разрешена конкуренция за доступ к процессору. Полная реализация алгоритма Деннинга практически гарантирует отсутствие thrashing. Алгоритм реализуем (известна, по меньшей мере, одна его полная реализация, которая, однако, потребовала специальной аппаратной поддержки). На практике применяются облегченные варианты алгоритмов подкачки, основанных на идее рабочего набора.