Управление памятью.ppt
- Количество слайдов: 101
Управление памятью
Принципы управления памятью
Абстрактная модель памяти • Программы вместе с обрабатываемыми ими данными могут выполняться только тогда, когда они находятся в основной (оперативной) памяти. • Основная память является важнейшим и наиболее дефицитным ресурсом вычислительной системы, поэтому • Важным элементом управления работой вычислительной системы является управление памятью. • Для организации процесса управления памятью в ОС включается специальный модуль, называемый диспетчером памяти. • Работа диспетчера памяти основана на нескольких базовых принципах, которые, в свою очередь, опираются на некоторую абстрактную модель устройства и функционирования основной памяти. • Эта абстрактная модель используется также программистами при разработке программ и планировании размещения данных.
Основные свойства памяти • • Память представляет собой непрерывную последовательность автономных неперекрывающихся участков (ячеек), в которые можно записать либо команды программы, либо данные. Размер ячеек может быть фиксированным или переменным, однако всегда достаточен для размещения команды или данных. Все ячейки пронумерованы, номер ячейки используется для ссылок на ее содержимое и называется адресом ячейки. Адреса ячеек образуют упорядоченное множество, называемое адресным пространством памяти. Мощность адресного пространства, т. е. общее количество различных адресов ячеек, определяется только разрядностью процессора, например, для 16 -разрядного процессора возможны 216 адресов, для 32 -разрядного – 232, а для 64 -разрядного – 264; Для каждой ячейки можно выполнить операции записи и чтения данных, причем данные, записанные в ячейку, сохраняются до следующей операции записи в ту же ячейку. Время записи или чтения (время доступа) не зависит от адреса ячейки. Порядок доступа к ячейкам не зависит от их адреса (произвольный порядок доступа).
Базовые принципы работы диспетчера памяти Работа диспетчера памяти основана на следующих базовых принципах: – – – разделение адресных пространств; сегментация; локальность.
Разделение адресных пространств • Разделение адресных пространств реализуется путем использования двух видов адресов, а именно – адресов, к которым обращаются команды программы, и адресов, реально существующих в оперативной памяти. • Адрес, указанный в команде программы, обычно называют логическим (виртуальным) адресом. • Адрес, по которому происходит обращение к памяти компьютера, называется физическим адресом. • Совокупность логических адресов образует логическое адресное пространство. Общее число адресов ограничено разрядностью процессора. • Совокупность физических адресов образует физическое адресное пространство. Общее число адресов ограничено объемом памяти, установленной на компьютере. • Команды программы могут выполняться только после того, как диспетчер памяти выполнит отображение логического адресного пространства программы на физическое адресное пространство памяти.
Сегментация • Адресное пространство программы разбивается на области (сегменты), в которые размещаются данные, логически связанные в соответствии с особенностями их обработки. • Обычно в разных сегментах располагаются данные различных видов (код программы, данные, стек и т. д. ). • Сегментация позволяет менеджеру памяти контролировать порядок работы с данными, находящимися в сегментах, при отображении их на физическое адресное пространство посредством присвоения сегментам некоторых атрибутов, определяющих, например, права доступа или разрешенные виды операций.
Локальность • Свойство локальности основано на следующих фактах: – в течение некоторого фиксированного промежутка времени выполняется некоторый ограниченный фрагмент кода программы, который обращается к ограниченному множеству данных; – наличие в памяти других частей кода и данных не требуется для нормальной работы программы в течение этого промежутка времени. • Указанная особенность работы программ позволяет размещать в основной памяти только часть программы и данных. Остальные части программы и соответствующие им данные могут храниться на внешних запоминающих устройствах.
Основные функции системы управления памятью • • Отображение адресного пространства процесса на конкретную область физической памяти. Предоставление процессам достаточного объема памяти. Защита адресного пространства процессов. Распределение памяти между конкурирующими процессами. Учет свободной и занятой памяти.
Схемы управления памятью • Существует несколько основных схем управления памятью. • Использование конкретной схемы в рамках определенной ОС обусловлено спецификой решаемых задач, требованиями к производительности и архитектурой используемой вычислительной системы. • Особенности рассматриваемой схемы управления памятью определяются следующими основными факторами: – базовый механизм управления памятью; – структуры данных в ОС, обеспечивающие управления памятью; – алгоритмы, используемые для управления памятью. • Известны следующие схемы управления памятью: – память с фиксированным числом разделов; – память с переменным числом разделов; – виртуальная память.
Связывание адресов • • • Множество адресов, использующихся в тексте программы, представляет собой логическое (виртуальное) адресное пространство. Логические адреса являются результатом трансляции символьных имен. Размер (мощность) логического адресного пространства определяется разрядностью процессора и составляет: – 216 = 64 Кбайт для 16 разрядного процессора; – 232 = 4 Гбайт для 32 разрядного процессора; – 264 = 16 Эбайт для 64 разрядного процессора. • • • Множество адресов основной памяти является физическим адресным пространством. Максимальный размер логического адресного пространства процессов обычно превышает размер доступного физического адресного пространства. Общей функцией для всех схем управления памятью является отображение логического адресного пространства каждого процесса на физическое пространство системы (связывание адресов), которое может выполняться на различных этапах обработки программы в зависимости от схемы управления памятью.
Этапы обработки программ Исходный модуль Транслятор Объектный модуль Загрузочный модуль Загрузчик Схемы адресации: • относительные адреса; • адреса «база + смещение» . Редактор связей Образ в памяти
Моменты связывания адресов • Этап компиляции и редактирования. Если при компиляции и редактировании известно точное место размещения процесса в памяти, то могут генерироваться непосредственно физические адреса. • Этап загрузки. Если на стадии компиляции не известно где процесс будет размещен в памяти, компилятор и редактор связей генерируют адреса, которые определяются относительно начала модуля или начала программы. В этом случае окончательное связывание откладывается до момента загрузки. • Этап выполнения. Если область памяти, выделенная для работы программы, не фиксируется на все время ее выполнения и размещение программы и данных может быть изменено, то связывание адресов должно выполняться непосредственно во время выполнения программы.
Схема с фиксированными разделами
Базовые принципы • Основная память разбивается на разделы фиксированного размера. • Разбиение выполняется на этапе генерации или в момент загрузки системы. • Процесс помещается в раздел подходящего размера. • Достоинства схемы – простота управления памятью (достаточно поддерживать таблицу разделов, в которой указаны адрес начала, размер и текущее состояние занятости каждого раздела). • Недостатки схемы: – фиксированное число одновременно выполняемых процессов; – сложность организации диалогового режима работы; – фрагментация (процесс обычно не полностью занимает выделенный ему раздел или имеющиеся разделы малы для размещения программ). • Частный случай схемы - наличие в системе единственного раздела, предназначенного для прикладных программ (однозадачная ОС).
Связывание адресов • Связывание адресов возможно как на этапе компиляции (редактирования), так и на этапе загрузки. • Связывание адресов во время компиляции (редактирования) используется только при фиксированном расположении разделов и выполнении программы в одном и том же разделе. • Порядок связывания адресов во время загрузки зависит от вида логических адресов: – при относительной адресации загрузчик модифицирует текст программы, добавляя ко всем логическим адресам значение реального физического адреса начала программы; – при схеме «база + смещение» загрузчик модифицирует значение базы, а логические адреса вычисляются как суммы значений базы и смещения во время выполнения программы.
Оверлейная структура программ • Если размер логического адресного пространства процесса превышает размер выделенного ему раздела, используется техника организации программы с перекрытием, называемая оверлей (overlay). • Программа разбивается на части (модули) и в каждый момент времени в памяти находятся только те модули, которые требуются для выполнения текущих действий. • Остальные модули находятся на диске как образы памяти и считываются диспетчером оверлеев при необходимости. • Часто синтаксис подобного файла может распознаваться загрузчиком, а привязка к памяти происходит в момент очередной загрузки требуемой части программы. • Оверлеи являются одним из примеров использования свойства локальности.
Оверлейная схема программы Резидентный модуль Модуль А Модуль В Расположение в памяти без перекрытия Резидентный модуль Модуль А Модуль В Расположение в памяти с перекрытием Резидентный модуль Модуль А Резидентный модуль Модуль В
Защита памяти • При фиксированном числе разделов защита памяти реализуется с помощью таблицы распределения разделов, в которой указывается физический адрес начала раздела и его длина. • Если значение физического адреса внутри программы превышает максимальный возможный физический адрес внутри раздела или оказывается меньшим адреса начала раздела, то генерируется ошибка защиты памяти. • Сравнение адресов требуется производить при каждом обращении к памяти, поэтому часто предусматриваются специальные аппаратные регистры, в которые для каждого раздела загружаются значения адреса начала раздела и длины.
Схема с переменным числом разделов
Базовые принципы • Схема с переменным числом разделов обычно используется в системах разделения времени. • Предварительного разбиения памяти на разделы не выполняется. • При запуске процесса ему выделяется свободный участок памяти из числа имеющихся. • Память выделяется блоками фиксированного размера. • После окончания работы процесса занятая область освобождается. • В процессе работы системы в памяти чередуются занятые и свободные участки. • Смежные свободные участки могут быть объединены в один. • Для учета занятой памяти поддерживается таблица областей памяти, которая содержит адрес начала, размер, атрибуты защиты и другие параметры области. • В контексте процесса сохраняется ссылка на соответствующую запись в таблице областей системы.
Базовые принципы • Если система поддерживает сегментную организацию памяти и выделяет процессу несколько областей, то для каждого процесса поддерживается частная таблица областей, которая содержит: – ссылки на соответствующие записи в таблице областей системы; – информацию, необходимую для отображения адресов в каждой области. • При выделении памяти процессу менеджер памяти, выбирает свободный участок, применяя одну из стратегий: – первый подходящий; – наиболее подходящий; – наименее подходящий. • Связывание адресов может быть осуществлено на этапах загрузки или выполнения. • Свободные области памяти учитываются с помощью битовой карты или списка свободных областей. • Связывание адресов может быть осуществлено на этапах загрузки или выполнения.
Фрагментация • Главной проблемой метода является внешняя фрагментация, возникающая из-за наличия небольших участков свободной памяти расположенных между двумя занятыми областями. • Решений проблемы: – сегментация физического адресного пространства процесса. В этом случае адресное пространство может разбиваться на фрагменты, что позволяет выделять разделы в произвольных доступных местах памяти. Проблема фрагментации в данном случае не решается полностью, поскольку число возможных сегментов ограничено. – применение процедуры сжатия памяти. • Сжатие является весьма дорогостоящей процедурой и, как правило, требует выгрузки процессов на диск с последующей загрузкой по другим адресам.
Связывание адресов • Связывание адресов происходит на этапах загрузки или выполнения. • Если связывание выполняется на этапе загрузки, то чаще используется относительная адресация, а перемещение процесса в памяти требует модификации всех физических адресов. • В случае связывания во время выполнения программы преимущественно используется схема, в которой адрес разбивается на базу и смещение, поскольку она менее трудоемка при перемещении программы, однако каждое обращение к памяти требует вычисления адреса.
Свопинг • В системах, работающих в режиме разделения времени, проблема недостатка памяти обычно решается путем использование процедуры свопинга (swapping), которая подразумевает перемещение процессов целиком из основной памяти на диск и обратно. • Организация свопинга выполняется подсистемой планирования процессов по сигналу диспетчера памяти. • При применении свопинга время переключения контекста процесса определяется временем загрузки и выгрузки процессов. • Оптимизация свопинга: – выгружаются только модифицированные участки памяти; – выгружаются только процессы, реально не функционирующие; – образы процессов размещаются в специально отведенное на диске пространство для свопинга, минуя файловую систему. • Использование механизма свопинга позволяет регулировать текущую степень многозадачности вычислительной системы. • Для больших программ применяется оверлейная структура.
Защита памяти • Защита памяти в системах с переменным числом разделов обычно базируется на схеме с использованием ключа защиты памяти. • В рамках этой схемы: – память процессу выделяется блоками фиксированного размера; – каждый блок снабжается специальным кодом, называемым ключом защиты; – для хранения ключа защиты используются либо специальное быстродействующее устройство, обеспечивающее работу всех блоков памяти, либо ключ записывается в фиксированное место каждого блока; – значение ключа защиты устанавливается менеджером памяти и является одинаковым для всех блоков, выделенных процессу; – ключ защиты сохраняется также в блоке управления процессом и при выполнении процесса загружается в один из регистров процессора (обычно в регистр PSW). • При каждом обращении к памяти значение, хранящееся в регистре PSW, сравнивается со значением ключа защиты блока, к которому происходит обращение, и в случае несовпадения, генерируется ошибка защиты памяти
Виртуальная память
Базовые принципы • При разработке программ большого размера часто возникает проблема недостаточного размера физической памяти, которая может решаться с помощью организации программ с перекрытием. • Основные причины возникновения виртуальной памяти: – необходимость автоматизации процесса разработки больших программ; – решение проблемы защиты памяти; – организация взаимодействия процессов; – поддержка многозадачности без явных ограничений числа задач. • Концепция виртуальной памяти основана на принципе локальности и подразумевает, что: – в основной памяти размещается только часть программы и данных, необходимых для ее работы в течение некоторого промежутка времени; – не использующиеся в это время части кода и данных хранятся на диске; – система автоматически поддерживает обмен информацией между диском и памятью для обеспечения работы программы.
Преимущества и недостатки схемы Возможность выполнения программы, находящейся в памяти частично имеет следующие преимущества: – программа не ограничена величиной физической памяти. – в памяти можно разместить больше программ и увеличить загрузку процессора, а также и пропускную способность системы. – объем ввода-вывода для выгрузки части программы на диск может быть меньше, чем в варианте классического свопинга. Главными недостатками схемы и являются: – сложность реализации схемы; – преобразования адресов может выполняться только во время выполнения программы, что существенно увеличивает накладные расходы и снижает производительность системы.
Средства поддержки виртуальной памяти • Средства поддержки виртуальной памяти условно можно разделить на аппаратно-зависимый и аппаратно-независимый компоненты. • Аппаратно-зависимый компонент в первую очередь отвечает за организацию отображения виртуального адресного пространства процесса на физическую память (основную или дисковую), поскольку данная процедура оказывается наиболее трудоемкой и требует наибольшей скорости выполнения. • Аппаратно-независимый компонент обеспечивает организацию обмена данными между основной и дисковой памятью.
Модели виртуальной памяти • Теоретически возможны три модели виртуальной памяти: страничная, сегментная и сегментно-страничная. • Большинством платформ аппаратно поддерживается страничная модель виртуальной памяти. • Сегментно-страничная модель является синтезом страничной модели и идеи сегментации. • Для архитектур, в которых сегменты не поддерживаются аппаратно, их реализация выполняется программно менеджером памяти. • Сегментная организация в чистом виде практически не встречается.
Отображение адресов
Связывание адресов • В рамках концепции виртуальной памяти подразумевается, что любая часть программы в произвольный момент времени может быть выгружена на диск и затем снова загружена в произвольное место оперативной памяти. • Физические адреса команд и данных могут многократно меняться, поэтому связывание адресов целесообразно выполнять непосредственно в процессе выполнения программы. • Процедура отображения адреса должна выполняться при каждом обращении к памяти, что требует значительных накладных расходов. • Механизм преобразования виртуальных адресов в физические должен предусматривать ведение таблиц, показывающих, какие области виртуальной памяти в текущий момент находятся в основной памяти и где именно размещаются. • Для сокращения размера таблиц отображаемые данные обычно группируются в блоки, а каждый процесс занимает целое количество блоков памяти. • Если размер блоков фиксирован, то их принято называть страницами.
Страничная память • Виртуальное адресное пространство процесса делится на страницы одинакового размера, а физическая память на страничные блоки (кадры) того же размера. • Передача информации между памятью и диском всегда осуществляется целыми страницами. • Страницы и страничные кадры имеют длину, являющуюся целой степенью числа 2, и не могут перекрываться. • Разбиение адресного пространства на страницы подразумевает, что любой адрес (виртуальный или физический) состоит из двух частей p и d, где p – номер страницы в памяти, а d – смещение в рамках страницы с номером p. • Количество разрядов, отводимых для хранения номера страницы и смещения зависит от разрядности процессора и размера страницы, например если размер страницы равен 212=4096 байт, а разрядность процессора равна 32, то p занимает 20 разрядов, а d – 12 разрядов, т. е виртуальная память содержит 1048576 страниц по 4 Кбайт и равна 4 Гбайт. • Страничная память свободна от внешней фрагментации. Однако существует внутренняя фрагментация.
Страничные прерывания. Подкачка • Страница, на которой расположена очередная выполняемая команда процесса, называется текущей. • Процесс может выполняться, если текущая страница находится в оперативной памяти. • Если текущая страница отсутствует в основной памяти, то возникает исключительная ситуация, называемая страничным прерыванием (page fault). • Обработчик страничного прерывания находит требуемую страницу и копирует ее с диска в свободный страничный кадр основной памяти. • При отсутствии свободного страничного кадра из памяти выгружается некоторая страница. • Процесс обмена страницами между основной памятью и диском называется подкачкой страниц или пейджингом ( от paging). • Для организации процесса подкачки и обеспечения преобразования адресов используются вспомогательные структуры данных, называемые таблицами страниц.
Таблицы страниц. Связывание адресов • Таблицы страниц используются для отображения виртуальных адресов на физические и для организации подкачки. • Каждый процесс может иметь одну или несколько таблиц страниц. • В простейшем случае записи таблицы упорядочены по номерам виртуальных страниц. • Для каждой виртуальной страницы таблица содержит запись, в которой указаны атрибуты страницы и номер соответствующего страничного или дискового блока, который содержит эту страницу. • При помощи атрибутов можно организовать контроль доступа к конкретной странице и ее защиту, а также определить наличие страницы в основной памяти. • Динамическое преобразование адресов выполняется следующим образом: – процесс обращается по виртуальному адресу v = (p, d); – механизм отображения ищет номер страницы p в таблице страниц и определяет, номер страничного кадра p'; – физический адрес формируется из p' и d.
Структура элемента таблицы страниц • Структура и длина элемента таблицы в значительной мере зависят от аппаратных решений, однако виды представленной информации примерно одни и те же, а наиболее распространенный размер 32 бита (20 бит для номера кадра). • Элемент таблицы страниц обычно имеет структуру, обеспечивающую не только отображение адресов, но и позволяющую хранить дополнительную информацию, которая требуется для работы менеджера памяти Зарезервировано Блокирование R M Защита Присутствие/ кэширования rwx отсутствие Номер кадра
Поля таблицы • Номер кадра, это номер страничного кадра, соответствующего виртуальной странице. • Присутствие/отсутствие ‑ если этот бит равен 1, то страница в памяти. • Защита – указывает разрешенные виды доступа к странице. • Изменение (M). Устанавливается аппаратно при модификации содержимого страницы. • Обращение (R). Устанавливается аппаратно при обращении к странице для чтения или записи. Периодически сбрасывается. • Блокирование кэширования. Позволяет запретить кэширование страницы. • Зарезервировано. Сохраняет информацию, требующуюся для работы алгоритмов замещения страниц.
Проблемы обработки таблиц страниц • Использование таблиц страниц сталкивается с двумя основными проблемами: – Скорость отображения. Преобразование виртуальных адресов в физические выполняется при каждом обращении к памяти и требует большой скорости отображения. – Размеры таблиц. Пример для размера страницы 4096 байт: • при 32 -разрядных адресах всего ~106 страниц, таблица 4 Мбайт; • при 64 -разрядных адресах всего ~4, 5· 1015 страниц и таблица может занимать до ~3, 6· 1016 байт. • Первая проблема решается на основе использования аппаратных средств за счет включения в схему компьютера дополнительных специализированных регистров, совокупность которых образует так называемый буфер быстрого преобразования адреса. • Для решения второй проблемы применяются специальные методы структурирования и организации таблиц страниц, такие как многоуровневые и инвертированные таблицы.
Буфер быстрого преобразования адреса • Если таблица страниц находится в оперативной памяти, то обработка каждой команда требует нескольких дополнительных обращений к памяти для преобразования адресов, которые существенно уменьшают производительность системы. • Для ускорения преобразования адресов часто используется буфер быстрого преобразования адреса (TLB – Translation Lookaside Buffer), который обычно находится внутри устройства управления памятью (MMU). • Буфер TLB представляет собой совокупность аппаратных регистров, каждый из которых хранит копию одного элемента таблицы страниц. • Число регистров в TLB колеблется от 8 до 2048 в зависимости от архитектуры компьютера. • Если при очередном обращении к памяти требуется страница, запись о которой находится в буфере, то обращение к таблице страниц основной памяти не происходит.
Принцип работы буфера • Номер страницы одновременного сравнивается с соответствующим полем во всех регистрах буфера. Память, обладающая такими свойствами, называется ассоциативной. • Принцип работы буфера можно кратко представить в виде следующей последовательности действий: – процессор выставляет виртуальный адрес на шину; – MMU проверяет наличие номера виртуальной страницы в буфере TLB; – если номер страницы есть, то номер страничного кадра берется из соответствующего регистра буфера TLB и выставляется на шину; – если номера страницы нет в буфере, то происходит прерывание, при обработке которого: • выполняется поиск записи в таблице страниц; • удаляется одна из записей в буфере TLB, биты изменения и обращения которой копируются в запись таблицы страниц в памяти; • в освободившийся регистр копируется найденная запись из таблицы страниц. • Содержимое буфера входит в контекст процесса и должно заменяться при переключении активности процессов.
Многоуровневые таблицы страниц • Для экономии оперативной памяти часто используются многоуровневые таблицы страниц, которые исключают необходимость постоянного хранения в памяти записей относительно всех страниц процесса. • Например, в двухуровневой таблице виртуальный адрес состоит из трех полей: – РТ 1 хранит адреса таблиц второго уровня в таблице первого уровня; – РT 2 хранит адреса страниц; – D – поле смещения. PT 1 PT 2 D • При длине полей PT 1 – 10 бит, PT 2 – 10 бит и смещении 12 бит таблицы первого уровня содержит 1024 адреса таблиц 2 -го уровня, каждая из которых содержит адреса 1024 страниц, размером 4 Кбайт.
Схема двухуровневой таблицы РТ 2 (0) 0 Страница 1 РТ 1 1 0 … … 1 1023 … Страница 1023 2 … 1023 РТ 2 (1023) 0 1 Страница 0 Страница 1 … … 1023 Страница 1023
Инвертированные таблицы страниц • Традиционные таблицы страниц индексируются по номеру виртуальной страницы и требуют по одной записи на каждую страницу. • При 64 разрядной адресации максимальное виртуальное адресное пространство составляет 264=16 Эбайт (~1, 8· 1018), а размер таблицы страниц при размере страницы 4 Кбайт и длине записи 8 байт может составить 36 Пбайт (~3, 6· 1016). • Многоуровневые таблицы позволяют лишь частично решить проблему адресации больших виртуальных пространств. • Возможным решением проблемы размера является использование инвертированных таблиц страниц.
Реализация инвертированных таблиц • Инвертированной называется таблица, записи которой упорядочены по номерам страничных кадров. • Инвертированная таблица содержит по одной записи на каждый страничный кадр физической памяти, поэтому размер таблицы зависит только от размера основной памяти. • Например, при 64 -разрядных виртуальных адресах и размере страниц 4 Кбайт для 1 Гбайт оперативной памяти инвертированная таблица страниц состоит из 262144 записей по 8 байт и ее размер 2 Мбайт. • Для идентификации записи в инвертированной таблице, кроме обычных атрибутов, добавляется значение идентификатора процесса и номер страницы, принадлежащей этому процессу. • Основной недостаток инвертированных таблиц – усложнение поиска записи, соответствующей паре (номер процесса, номер страницы) во всей инвертированной таблице страниц при каждом обращении к памяти. • Поиска ускоряет буфер TLB. Можно также использовать хэштаблицы виртуальных адресов.
Защита памяти • В рамках страничной организации памяти проблема защиты памяти решается вместе с проблемой отображения адресных пространств на основе использования таблиц страниц. • Для нарушения защиты памяти требуется, чтобы несколько процессов обращались к одному страничному кадру. • Страничный кадр доступен процессу только в том случае, если он включен в таблицу страниц этого процесса. • Распределение физической памяти системой выполняется на основе учета свободных страничных кадров. Для этого система поддерживает список свободных кадров. • Если некоторый кадр выделяется процессу, то он исключается из списка свободных кадров. • Повторное выделение такого кадра другому процессу невозможно в корректно работающей системе.
Сегментная организация памяти • • Сегментная организация памяти позволяет выполнять логическое объединение данных и обеспечивает хранение и защиту однородной информации. Сегментация отражает точку зрения программиста на логическую структуру адресного пространства процесса, представляя его в виде набора областей переменного размера и назначения. Соответствующее процессу логическое адресное пространство реализуется в виде набора сегментов, каждый из которых имеет некоторый идентификатор. Внутри сегмента адресное пространство образует линейную последовательность адресов от 0 до максимума. Логический адрес строится как упорядоченная пара v=(s, d), номер сегмента и смещение внутри сегмента. Реализуя сегментную модель, менеджер памяти должен поддерживать таблицу сегментов каждого процесса, а также общую таблицу сегментов всех выполняющихся процессов. Элемент таблицы сегментов содержит: базовый адрес начала сегмента в основной памяти или на диске, длину сегмента и другие атрибуты, аналогичные имеющимся в таблице страниц (виды доступа, флаги присутствия, модификации и обращения).
Основные преимущества сегментной организации • • • Каждая подпрограмма может занимать отдельный сегмент и адресоваться относительно его начала. Обращение к процедуре, находящейся в сегменте с номером s всегда имеет адрес (s, 0). Сегментация облегчает совместное использование процедур и данных несколькими процессами, позволяя включать один сегмент в их адресные пространства. Упрощается организация защиты данных, поскольку каждый сегмент формирует логический объект, и у различных сегментов могут быть разные виды защиты. Упрощается перемещение сегмента в памяти. Если изменилось положение сегмента, то достаточно изменить базовый адрес в таблице сегментов. Сегментная организация позволяет использовать адреса двух видов: – при обращении к другому сегменту адрес строится в виде пары (s, d) – длинный адрес; – при адресации внутри текущего сегмента достаточно указать только смещение (d) – короткий адрес. • Программист может управлять сегментной организацией кода, поскольку обычно транслятор формирует отдельный сегмент для каждого файла, содержащего исходный текст программы.
Логические адреса • Логические адреса при сегментной организации имеют вид (s, d), где: – в однопрограммных системах s – базовый адрес сегмента; – в мультипрограммных системах s – селектор (номер) сегмента в таблице (дескрипторов) сегментов; – d – смещение. • В системах с аппаратной поддержкой значение s загружается в специальный регистр, который: – используется для получения физического адреса (однопрограммные системы); – позволяет обратится к таблице дескрипторов сегментов (мультипрограммные системы). • Дескриптор содержит адрес начала сегмента в памяти, размер, признак присутствия в памяти, флаги обращения, модификации, защиты и другие атрибуты.
Вычисление физического адреса • В однопрограммных системах значение физического адреса вычисляется суммированием значения сегментного регистра и смещения. • В мультипрограммных системах для вычисления физического адреса выполняются следующие действия: – в сегментный регистр загружается селектор; – дескриптор, соответствующий селектору, извлекается из таблицы и записывается во внутренние регистры процессора; – поле защиты дескриптора сравнивается с полем защиты процесса, которое хранится в PSW, при несовпадении возникает прерывание; – если сегмент не существует или в данный момент выгружен, а также если смещение выходит за пределы сегмента, то возникает прерывание; – если сегмент находится в памяти, и смещение попало в нужный интервал, то базовый адрес сегмента в дескрипторе прибавляется к смещению, формируя физический адрес.
Реализация сегментной организации • Контекст каждого процесса содержит набор сегментных регистров, содержащих селекторы текущих сегментов кода, стека, данных и др. • Если аппаратная поддержка отсутствует, то сегментная организация памяти реализуется программно в большинстве современных ОС. • При программной реализации базовый адрес не переписывается с специальный сегментный регистр, а хранится в памяти или общем регистре. • Виртуальная память в случае чисто сегментной организации поддерживается путем организации выгрузки на диск сегментов, присутствие которых в основной памяти не требуется для нормальной работы программы.
Сегментно-страничная организация памяти • Хранение в памяти сегментов большого размера может оказаться неудобным из-за необходимости копирования на диск больших объемов данных. • Обычно сегментация и страничная организация комбинируются. • При сегментно-страничной организации виртуальной памяти виртуальный адрес состоит из трех полей: номера сегмента, номера страницы внутри сегмента и смещения внутри страницы – (s, p, d). • Используются две таблицы отображения – таблица сегментов, связывающая номер сегмента с таблицей страниц, и отдельная таблица страниц для каждого сегмента. • Сегментно-страничная организация виртуальной памяти: – сохраняет логическую структуру программы и преимущества сегментной организации; – сокращает объем дисковых операций; – устраняет внешнюю фрагментацию.
Подкачка страниц
Страничные прерывания • Для поддержки виртуальной памяти с размером, существенно превышающим размер оперативной памяти, диспетчер памяти должен обеспечить отображение части виртуального адресного пространства процессов во внешнюю память, поэтому некоторые страницы, требующиеся для работы процесса, оказываются недоступными. • В соответствующих элементах таблицы страниц устанавливается флаг, означающий отсутствие страницы. • Наличие такого флага заставляет аппаратуру вместо отображения виртуального адреса в физический прервать выполнение команды, т. е. выполнить страничное прерывание, и передать управление соответствующему компоненту операционной системы.
Обработка страничных прерываний • При обработке страничного прерывания менеджер памяти: – выделяет свободный или освобождает страничный кадр в основной памяти; – перемещает в него копию страницы, находящейся во внешней памяти; – соответствующим образом модифицирует элемент таблицы страниц. • Обработка страничного прерывания во многом определяет производительность системы замещения страниц. • Необходимо снижение частоты страничных прерываний. • Решение – правильный выбор методики замещения страниц. • Порядок замещения страниц определяется на основе следующих основных стратегий: – выборки – замещения.
Стратегия выборки • Стратегия выборки определяет, в какой момент следует переписать страницу из внешней памяти в оперативную. • Два способа выборки: по запросу и с упреждением. • При выборке по запросу алгоритм копирования страницы запускается в момент, когда процесс обращается к отсутствующей в памяти странице. • При выборке с упреждением применяется опережающее чтение, т. е. кроме страницы, вызвавшей исключительную ситуацию, в память также загружается несколько страниц, окружающих ее (так называемый кластер). Предполагается, что такой алгоритм уменьшает количество операций чтения.
Стратегия замещения • Стратегия замещения – определяет страницу, которую нужно вытолкнуть во внешнюю память, чтобы освободить место для загружаемой страницы. • Выталкиваемая страница должна выбираться так, чтобы не потребовалось загружать ее обратно в следующий момент времени. • Разумная стратегия замещения позволяет обеспечить наличие в памяти самой необходимой информации и снизить частоту страничных прерываний.
Алгоритмы замещения страниц • В типичной ситуации, когда размер виртуальной памяти существенно превосходит размер основной памяти, с большой вероятностью при страничном прерывании не удается найти свободный страничный кадр. • В этом случае требуется: – определить некоторый занятый страничный кадр в основной памяти; – переместить в случае необходимости его содержимое во внешнюю память; – должным образом модифицировать соответствующий элемент таблицы страниц; – продолжить процесс доступа к требуемой странице. • Стратегия замещения страниц является наиболее ответственным элементом системы страничной подкачки и строится на основе использования специальных алгоритмов, называемых алгоритмами замещения страниц. • Работа алгоритмов базируется на статистической информации относительно обращений к памяти.
Аппаратные средства • • Эффективная работа механизма замещения страниц невозможна без аппаратной поддержки. Обычно процессоры имеют простейшие аппаратные средства, позволяющие собирать некоторую статистику обращений к памяти. Эти средства обслуживают два флага на каждый элемент таблицы страниц: флаг обращения и флаг модификации. Флаг обращения (R) автоматически устанавливается, когда происходит любое обращение к странице, а для сбора статистики этот флаг периодически сбрасывается у всех страниц операционной системой или процессором. Флаг изменения (M) устанавливается, если производится запись на страницу. Флаг сбрасывается операционной системой после копирования страницы на диск. Не требуется копировать во внешнюю память страницу, содержимое которой не модифицировалось. Статистическая информация, на основании которой принимается решение о выгрузке страницы, хранится в зарезервированном поле таблицы страниц.
Локальные и глобальные алгоритмы • Алгоритмы замещения страниц принято делить на локальные и глобальные. • Локальные алгоритмы распределяют фиксированное или динамически настраиваемое число страничных блоков для каждого процесса. • Когда процесс израсходует все предназначенные ему блоки, система будет удалять из физической памяти одну из его страниц, а не страницы другого процесса. • Глобальные алгоритмы замещения освобождают любой страничный блок, независимо от того, какому процессу он принадлежит. • Данное обстоятельство приводит к перераспределению страничных кадров между процессами и делает одни процессы чувствительными к поведению других процессов. • Обычно в многозадачной системе используются локальные алгоритмы с контролируемым перераспределением страниц.
Оптимальный алгоритм • Оптимальный алгоритм замещения страниц должен обеспечивать минимально возможное число страничных прерываний. • Если при обработке страничного прерывания выгружать из памяти ту страницу, которая дольше всего не будет использоваться, то число прерываний будет наименьшим. • Данный алгоритм невозможно реализовать в рамках реально существующего менеджера памяти, поскольку для его поддержки необходимо точно знать последовательность выполнения команд каждого процесса, обрабатываемого системой. • Оптимальный алгоритм может успешно применяться для оценки качества реальных алгоритмов. Для этого используется методика двойного прогона программы: – при первом прогоне определяется последовательность выполнения команд программы и определяется оптимальный порядок выгрузки страниц; – при втором прогоне используется реальный алгоритм замещения, фиксируется реальный порядок выгрузки страниц.
FIFO алгоритм. • First In First Out – выталкивание первой пришедшей страницы. Из памяти выгружается страница, которая дольше всего там находилась. • Для реализации алгоритма организуется очередь страниц, в которой загружаемая страница включается в конец очереди, а при освобождении памяти страницы выбираются из начала очереди. • Недостатком алгоритма является то, что данная стратегия с достаточной вероятностью приводит к замещению активно используемых страниц, что немедленно приводит к новому страничному прерыванию. • Существенным преимуществом данного алгоритма является то обстоятельство, что он не требует поддержки со стороны процессора.
Алгоритм «Второй шанс» • Возможна модификация FIFO, которая позволяет избежать выталкивания часто используемых страниц. • Этот алгоритм называется «Второй шанс» (Second-Chance). • Перед выталкиванием самой старой страницы проверяется значение бита R. • Если бит 1, то страница в отличие от FIFO не выталкивается, а очищается бит R и страница становится в конец очереди. • Если на все страницы ссылались, алгоритм превращается в FIFO. • Данный алгоритм использовался, например, в BSD UNIX.
Аномалия Биледи • Алгоритм подкачки должен обеспечивать снижение числа страничных прерываний при увеличении числа страничных кадров, выделенных процессу. • Биледи (Belady) установил, что применении алгоритма FIFO определенные последовательности обращений к страницам приводят в действительности к увеличению числа страничных прерываний при увеличении числа страничных блоков. • Это явление носит название аномалии Биледи. • Рассмотрим работу алгоритма FIFO для последовательности обращения к страницам: 0 -1 -2 -3 -0 -1 -4 -0 -1 -2 -3 -4 с тремя и четырьмя страничными кадрами. • Будем предполагать, что в начальном состоянии кадры свободны, а подкачка страниц происходит по запросу.
Состояния очереди страниц для последовательности 0 1 2 3 0 1 4 0 1 2 3 4 Три страничных кадра 0 2 3 0 1 4 4 4 2 3 3 0 1 2 3 0 1 1 1 4 2 2 0 p 1 1 2 3 0 0 0 1 4 4 p p p p Новая Старая Прерывания - 9 Четыре страничных кадра 0 2 3 3 3 4 0 1 2 2 2 3 4 0 1 2 3 0 1 1 1 2 3 4 0 1 2 0 p 1 0 0 1 2 3 4 0 1 Старая p p p Прерывания -10 p p p Новая
Алгоритм NRU • Not Recently Used– не использовавшаяся в последнее время страница. • Алгоритма замещения страниц основан на анализе значений битов R и М. • При запуске процесса, оба бита для всех его страниц установлены на 0 менеджером памяти. • Периодически, например, при каждом прерывании по таймеру бит R очищается, чтобы отличить страницы, к которым давно не происходило обращения. • Когда возникает страничное прерывание, операционная система проверяет все страницы и делит их на четыре категории на основании текущих значений битов R и М: – – класс 0: не было обращений и изменений R=0, M=0; класс 1: не было обращений, страница изменена R=0, M=1; класс 2: было обращение, страница не изменена R=1, M=0; класс 3: было обращение и страница изменена R=1, M=1. • Удаляется первая найденная страница в непустом классе с наименьшим номером.
Алгоритм LRU • LRU (The Least Recently Used) – дольше всего не использовавшаяся. • Алгоритм требует замещать страницу, которая дольше всего не использовалась и является одним из лучших приближений к оптимальному. • Основной проблемой алгоритма является сложность реализации в системе страничной подкачки, поскольку в этом случае требуется: – либо фиксация точного значения времени последнего обращения к каждой странице; – либо поддержка в памяти динамического списка всех страниц процесса, упорядоченного по возрастанию значения момента обращения к странице, т. е. страницы, к которым дольше всего не обращались, должны находится в голове списка.
Фиксация момента обращения • Фиксация точного значения времени обращения (число с плавающей точкой) практически невозможна, поскольку требует больших затрат памяти для хранения временных меток. • Вместо фиксации точного времени обращения можно использовать текущее значение числа команд, выполненных процессом перед обращением к странице (целое число). • Поддержка счетчика команд требует: – специального регистра процессора фиксированной длины, значение которого автоматически увеличивается на 1 после выполнения каждой команды; – соответствующее поле в таблице страниц для записи временной метки; – предотвращения проблем с переполнением счетчика; – организацию поиска страницы с минимальным значением временной метки по всей таблице страниц процесса.
Поддержка динамического списка • Динамический список, удовлетворяющий предъявленным требованиям, организуется легко: – страница, к которой произошло обращение, помещается в конец списка; – в начале списка оказывается страница, к которой дольше всего не выполнялось обращений; – страница для удаления выбирается из начала списка. • Использование списка невозможно, поскольку вызывает необходимость дополнительных обращений к памяти при обновлении связей после каждого обращения к странице и сильно снижает производительность системы. • Алгоритм LRU в исходном виде реализуется только в тех случаях, когда накладные расходы на поддержку списка страниц малы по сравнению с другими операциями, например при работе с файловой системой. • В случае системы подкачки страниц обычно реализуется некоторое приближение LRU.
Алгоритм NFU • NFU (Not Frequently Used) – редко используемая. • Алгоритм NFU предполагает выталкивание редко использующейся страницы. • Подсчитывается частота обращений к страницам. – при каждом прерывании от таймера операционная система сканирует таблицу страниц; – у каждой страницы с установленным флагом обращения увеличивает значение счетчика; – флаг обращения сбрасывается. • Выгружается страница с наименьшим значением счетчика. • Недостатки алгоритма NFU: – хранится историю обращений к странице; – счетчик может переполняться. • Возможна модификация алгоритма, в которой информация об обращения, сделанных достаточно давно, постепенно теряется. Для этого счетчик сдвигается вправо на один разряд перед прибавлением бита R, а бит R добавляется в крайний слева разряд.
Рабочее множество
Изменение частоты страничных прерываний • Рассматривая интенсивность страничных прерываний, генерируемых процессом во время его работы, можно обнаружить, что в некоторые периоды своей деятельности процесс резко увеличивает частоту подкачки страниц. • В качестве примеров такого поведения рассмотрим: – – начальную загрузку страниц; вызов подпрограмм; создание динамической структуры данных; недостаток памяти, выделенной процессу для его работы. • В дальнейшем предполагаем, что подкачка страниц выполняется по запросу.
Начальная загрузка страниц • Вновь созданные процессы генерируют много страничных прерываний в связи с необходимостью подкачки страниц, использующихся для хранения кода программы и размещения статических данных, а также необходимых для формирования области динамических данных и стека. • Даже при загрузке некоторого кластера, принадлежащего адресному пространству процесса, трудно ожидать наличия в памяти всех страниц, требуемых для нормальной работы процесса. • Интенсивная подкачка страниц на начальных этапах работы программы неизбежна, если размер выделенного процессу физического адресного пространства заметно меньше размера виртуального. • После того как процесс собрал большинство требуемых страниц, интенсивность страничных прерываний снижается.
Вызов подпрограмм • При вызове подпрограммы процесс должен загрузить из внешней памяти страницы, которые содержат ее код, и разместить в стеке ее локальные переменные. • В течение всего промежутка времени выполнения подпрограммы, к значительной части страниц, ранее загруженных в память, например содержащих код основной программы, обращений не выполняется и соответствующие страницы могут при необходимости выгружаться на диск. • Противоположная ситуация возникает после окончания работы подпрограммы, поскольку теперь ее страницы становятся ненужными. • Аналогично происходит обработка больших структур данных, например, если в программе выполняется обработка большого массива, то требуется загрузить из внешней памяти все страницы, содержащие его элементы. • В тоже время к страницам, загруженным ранее и содержащим элементы других структур данных, обращений не происходит. • После завершения обработки массива, страницы, содержащие его элементы, становятся ненужными.
Создание динамической структуры данных Если в программе создается динамическая структура данных, например связанный список или дерево, то: – по мере увеличения числа элементов происходит рост числа страниц, содержащих элементы данной структуры; – в то же время частота обращений к ранее загруженной информации уменьшается и, соответственно, некоторые страницы перестают использоваться.
Недостаток памяти • В рассмотренных ранее примерах временное увеличение частоты страничных прерываний обуславливалось в основном внутренней логикой работы программы. • Недостаток памяти в значительной степени обусловлен внешними причинами. • Он возникает если число страниц, активно используемых процессом, превышает количество страничных кадров, отданных в его распоряжение. • В этом случае процесс может резко увеличить частоту страничных прерываний, занимаясь подкачкой требуемых страниц. • Если при этом больше времени затрачивается на подкачку страниц, чем на выполнение команд программы, то принято говорить, что процесс попал в ситуацию пробуксовки.
Ситуация пробуксовки • Ситуация пробуксовки обусловлена недостатком оперативной памяти, выделенной процессу. • При использовании глобального алгоритма замещения, процесс, попавший в ситуацию пробуксовки, отбирает страничные блоки у других процессов, которые, в свою очередь, начинают пробуксовывать. • В результате все процессы попадают в очередь запросов к устройству внешней памяти, загрузка процессора снижается и операционная система увеличивает степень мультизадачности, подгружая новые процессы, если они имеются. • Таким образом, вычислительная система переходит в состояние непрерывной подкачки страниц. • Пробуксовка вредна и при использовании локальных алгоритмов, т. к. буксующий процесс генерирует много обращений к диску. • Таким образом, ситуацию пробуксовки процессов следует избегать. Для этого в каждый момент времени каждый процесс должен иметь достаточное количество страничных блоков.
Понятие рабочего множества • Число страничных блоков, требующихся процессу, можно приближенно определит на основе использования модели рабочего множества (working set). • Основой модели является концепция локальности, которая предполагает, что в каждый промежуток времени процесс использует ограниченное число страниц. • Такое поведение процесса позволяет ввести понятие рабочего множества, как некоторого набора страниц, которые должны использоваться совместно. • Тогда, в терминах модели рабочего множества, рассмотренные ранее примеры можно интерпретировать как некоторые изменения, происходящие с рабочим множеством процесса, считая, что выполняющийся процесс переходит от одного рабочего множества к другому. • Причем, каждый такой переход сопровождается значительным увеличением частоты страничных прерываний.
Интерпретация поведения процесса • Начальная загрузка страниц может рассматриваться как создание рабочего множества процесса. • Вызов процедуры, определяет новое рабочее множество, включающее команды процедуры, ее локальные переменные и часть глобальных переменных. • Команды вызывающей программы временно выпадают из рабочего множества. Таким образом, данную ситуацию можно интерпретировать как переход процесса от старого рабочего множества к новому. • При создании динамической структуры данных рабочее множество процесса расширяется. • Пробуксовка процесса возникает, если его рабочее множество не размещается в памяти.
Модель рабочего множества • Для поддержки модели рабочего множества, необходимо, чтобы операционная система отслеживала, какие страницы в нем находятся и могла определить входит ли некоторая страница в рабочее множество или нет. • Одним из признаков принадлежности страницы к рабочему множеству может являться время последнего обращения к ней. • Следовательно рабочее множество можно определить как множество страниц, к которым процесс обращался в течение некоторого фиксированного промежутка времени Δt. • В соответствии с принципом локальности если в период времени (T-Δt, T. ) программа обращалась к страницам (P 1, P 2, . . . , Pn), то, при надлежащем выборе Δt, эта программа будет обращаться к тем же страницам в период времени (T, T+ Δt). • Данное определение требует регистрации времени последнего обращения к каждой странице. • Менеджер памяти должен иметь информацию о составе рабочего множества, чтобы сразу загружать его в память.
Алгоритм «Рабочее множество» • Наличие информации о текущем состоянии рабочего множества процесса дает возможность сформулировать соответствующий алгоритм замещения страниц: – при страничном прерывании из памяти выгружается страница, не находящаяся в рабочем множестве процесса; – обычно страницы с установленным битом R в алгоритме не участвуют, т. к. заведомо известно, что к ним недавно было обращение; – если обнаружено, что у выбранной страницы установлен бит M, то такая страница по возможности обходится. • На практике принадлежность страницы к рабочему множеству определяется приближенно, поскольку хранение временных меток страниц затруднено. • Например, к рабочему множеству можно отнести страницы, входящие в классы с 1 -го по 3 -й алгоритма NRU или страницы, частота обращений к которым превышает некоторое заданное значение в алгоритме NFU.
Замещение страниц в многозадачной среде • Главной задачей, которая решается механизмом замещения страниц в многозадачной среде, является недопущение пробуксовки выполняющихся процессов. • Для решения этой задачи: – каждому процессу должно гарантироваться наличие минимального числа страничных кадров, требующихся для его нормальной работы, т. е рабочее множество процесса должно всегда размещаться в памяти; – при необходимости страничные кадры должны рационально перераспределяться между процессами на основе учета частоты страничных прерываний для каждого процесса. • Если объем основной памяти недостаточен для размещения рабочих множеств всех выполняющихся процессов, то для регулирование загрузки основной памяти применяется процедура свопинга. • При загрузке процесса в память всегда загружается все его текущее рабочее множество.
Алгоритм перераспределения страничных кадров • Размер области памяти, выделенный для размещения рабочего множества, может динамически настраиваться на основе учета текущей частоты страничных прерываний. • В рамках алгоритма перераспределения: – каждый процесс при запуске получает некоторое минимальное начальное количество страничных кадров; – определяется интервал допустимых значений частоты страничных прерываний; – выход текущей частоты за границы интервала является указанием на необходимость изменения числа кадров, выделенных процессу; – число кадров процесса может увеличиваться при наличии свободной физической памяти до некоторого максимального размера; – при возникновении пробуксовки максимальный размер может превышаться; – при недостатке памяти, кадры забираются у процессов с низкой частотой прерываний, размеры которых превышают минимальные; – если перераспределение страниц не помогает, выполняется выгрузка нескольких процессов на диск.
Вспомогательные процессы управления памятью • Алгоритмы, обеспечивающие поддержку системы в состоянии отсутствия пробуксовки, обычно реализованы при помощи фоновых процессов (демонов), которые периодически проверяют состояние памяти. • Их задача заключается в обеспечении наилучшей производительности за счет перераспределения страничных блоков между процессами. • Перераспределение страничных блоков существенно ускоряется, если система поддерживает список свободных страничных блоков. • Обычно управление памятью осуществляется с помощью трех процессов: сборщика страниц, менеджера рабочих множеств и менеджера свопинга.
Сборщик страниц • Сборщик страниц используется для поддержки списка свободных страничных кадров. • Процесс запускается в фоновом режиме и выполняется во время простоев системы. • Если количество свободных страничных кадров достигает установленного нижнего порога, то сборщик страниц запускается с высоким приоритетом. • Сборщик страниц: – освобождает страничные кадры путем копирования на диск модифицированных страниц, не входящих в рабочие наборы процессов; – при невозможности обеспечить приемлемую частоту страничных прерываний в системе запускает менеджер свопинга. • Наличие списка свободных страничных кадров позволяет ускорить работу системы, поскольку не требует поиска кадра, подлежащего освобождению.
Менеджер рабочих множеств • • • Менеджер рабочих множеств регулирует количество страничных кадров, закрепленных за процессами, пытаясь разместить в памяти рабочее множество каждого процесса. Менеджер рабочих множеств отслеживает частоту страничных прерываний процессов и перераспределяет страничные кадры так, чтобы устранить возможность пробуксовки выполняющихся процессов. Рабочее множество процесса с большой частотой страничных прерываний расширяется путем добавления ему страничных кадров из списка свободных кадров. Рабочее множество процесса с небольшой частотой страничных прерываний уменьшается за счет удаления некоторых страниц и освобождения страничных кадров. Если список свободных страничных кадров пуст, то запускает сборщик страниц.
Менеджер свопинга • • Менеджер свопинга начинает работать, если при обработке страничного прерывания требуется свободный страничный кадр, а список свободных страничных кадров пуст или содержит недостаточное число страничных кадров. Менеджер свопинга выгружает один или несколько процессов, находящихся в состоянии ожидания, на диск и освобождает занятых ими страничные кадры. В случае пустого списка страничных кадров перераспределение страниц между процессами без выгрузки процессов на диск может вызвать пробуксовку. В ответ на запрос пользователя или при снижении загрузки системы менеджер свопинга загружает процесс с диска, при необходимости предварительно выгружая другой процесс.
Управление памятью в операционной системе UNIX
Вспомогательные структуры данных • Ядро операционной системы UNIX выполняет программную поддержку сегментно-страничной организации памяти. • Виртуальное адресное пространство процесса разбивается на совокупность логических областей (сегментов). • Каждый сегмент представляет собой непрерывную часть виртуального адресного пространства процесса и рассматривается в качестве отдельного объекта для использования и защиты. • Операционная система обеспечивает отображение каждого виртуального сегмента на физическое адресное пространство. • Для управления областями поддерживается таблица областей, в которой выделяется запись для каждой активной области в системе. • Запись таблицы областей содержит информацию, позволяющую определить местоположение области в физической памяти, а также другие данные, необходимые для организации работы с ней.
Таблица областей включает в себя следующие поля: – указатель на индекс файла, содержимое которого было первоначально загружено в область (если файл существует); – тип области (область команд, разделяемая память, область частных данных или стека); – размер области; – указатель на таблицу страниц области. – состояние области, определяющееся комбинацией следующих признаков: • • заблокирована; запрошена; идет процесс загрузки содержимого области в память; готова (содержимое области загружено в память). – счетчик ссылок, в котором хранится количество процессов, ссылающихся на данную область.
Частная таблица областей • Каждый процесс имеет частную таблицу областей процесса. • Записи этой таблицы могут располагаться, в зависимости от конкретной реализации, в таблице процессов или пространстве процесса. • Каждая запись частной таблицы областей содержит: – указатель на соответствующую запись общей таблицы областей; – начальный виртуальный адрес процесса в данной области; – поле прав доступа, в котором указывается тип доступа, разрешенный процессу: чтение, запись или исполнение.
Совместное использование областей • Частные таблицы областей позволяют нескольким процессам совместно использовать физическое адресное пространство, в том случае если они ссылаются на одну область. • Если несколько процессов выполняют одну и ту же программу, то они используют одну и ту же область команд. • Несколько процессов могут использовать общую область разделяемой памяти для совместной обработки данных. • Для разделяемой области все частные таблицы областей использующих ее процессов ссылаются на одну общую запись таблицы областей системы. • Каждая частная таблица областей содержит собственный начальный виртуальный процесса в этой области.
Операции над областями К операциям работы с областями относятся: – – – – блокировка области; снятие блокировки с области; выделение области; присоединение области к пространству памяти процесса; изменение размера области; загрузка области из файла в пространство памяти процесса; освобождение области; отсоединение области от пространства памяти процесса и копирование содержимого области.
Блокировка области и снятие блокировки • Операции блокировки и снятия блокировки для области используются ядром при необходимости организации монопольного доступа к ней. • Такая необходимость возникает при работе ядра с выделенной областью, чтобы запретить доступ к ней со стороны других процессов. • Операции блокировки и снятия блокировки выполняются независимо от операций выделения и освобождения области. • Ядро может заблокировать и выделить область, а потом снять блокировку, не освобождая области.
Выделение области • Новая область выделяется во время выполнения системных вызовов fork, exec и shmget (получить разделяемую память). • Запись о новой области включается в таблицу областей, для этого выбирается первая свободная запись таблицы. • Затем область блокируется, и устанавливаются сведения о ее типе (разделяемая или частная). • Поле индекса в записи таблицы областей задается таким образом, чтобы оно указывало на индекс файла, ассоциированного с областью. Для области кода это файл, содержащий код программы.
Присоединение области к адресному пространству процесса • Область присоединяется к адресному пространству процесса во время выполнения системных функций fork, exec и shmat. • Для присоединения выбирается свободная запись в частной таблице областей процесса, устанавливается в ней поле прав доступа таким образом, чтобы они соответствовали области команд, данных, разделяемой памяти или стеку. • Записывается виртуальный адрес, по которому область будет размещаться в адресном пространстве процесса. Виртуальные адреса новой области не должны пересекаться с адресами уже существующих областей. • Увеличивается значение поля, описывающего размер памяти процесса в записи таблицы процессов, на величину присоединяемой области, а также прибавляется единица к значению счетчика ссылок на область. • Если область ранее не присоединялась к какому-либо процессу, для нее организуются новые таблицы страниц. В противном случае используются уже существующие таблицы страниц.
Изменение размера области • Процесс может расширять или сужать свое виртуальное адресное пространство. • При расширении области проверяется, не будут ли виртуальные адреса расширяемой области пересекаться с адресами какой-нибудь другой области и не повлечет ли расширение области за собой выход процесса за пределы максимально-допустимого виртуального пространства памяти. • Для отображения расширенной памяти на физическую, выделяются новые таблицы страниц или расширяются уже существующие. Если процесс сокращает размер области, то соответствующие таблицы страниц сокращаются. Во всех этих случаях размеры процесса переопределяются.
Загрузка области • В системе, где поддерживается подкачка страниц по запросу, ядро может «отображать» исполняемый файл в адресное пространство процесса во время выполнения функции exec, подготавливая последующее чтение по запросу отдельных физических страниц. • Отображение выполняется с помощью таблицы страниц, в которой указывается, что данные страницы отсутствуют в памяти. • Если же подкачка страниц по запросу не поддерживается, то выполняется копирование исполняемого файла в память, в результате которого загружается область памяти процесса по указанным в файле виртуальным адресам.
Отсоединение области от процесса • Области отсоединяются при выполнении системных функций exec, exit и shmdt. • При этом корректируется соответствующая запись таблицы областей и удаляется запись частной таблицы областей процесса. • Значение счетчика ссылок на область уменьшается. • Значение поля, описывающего размер процесса в таблице процессов, уменьшаются в соответствии с размером области. • Если значение счетчика становится равным нулю, то область освобождается.
Копирование содержимого области • Системная функция fork требует, чтобы ядро скопировало содержимое областей процесса. • Если область разделяемая (разделяемый текст команд или разделяемая память), то физического копирования не выполняется, вместо этого увеличивается значение счетчика ссылок на область, позволяя родительскому и порожденному процессам использовать ее совместно. • Если область не является разделяемой, то выделяется новая запись в таблице областей и строится новая таблица страниц. • После этого выполняется физическое копирование содержимого области.
Освобождение области • Если оказывается, что область уже не присоединена ни к какому процессу, она может быть освобождена, а соответствующая запись в таблице областей стерта. • Если область связана с индексом, то предварительно освобождается и индекс, учитывая значение счетчика ссылок на него. • Страничные блоки физической памяти включаются в список свободных блоков. • Таблица страниц области удаляется.
Управление памятью.ppt