Лекции Абстракция памяти Виртуальная память Разработка, реализация и сегментация страничной реализации памяти
Скачать 2.76 Mb.
|
Тема 5. Управление памятьюЧасть 2Содержание лекцииАбстракция памяти Виртуальная память Разработка, реализация и сегментация страничной реализации памяти Методы распределения памятиНеобходимым условием для того, чтобы программа могла выполняться, является ее нахождение в оперативной памяти.Только в этом случае процессор может извлекать команды из памяти и интерпретировать их, выполняя заданные действия.Методы распределения памятиВсе алгоритмы распределения памяти разделены на два класса:Алгоритмы, в которых используется перемещение сегментов процессов между оперативной памятью и диском; Алгоритмы, в которых внешняя память не привлекается. Алгоритмы, в которых внешняя память не привлекается:Распределение памяти фиксированными разделами; Распределение памяти динамическими разделами; Распределение памяти перемещаемыми разделами. Распределение памяти фиксированными разделамиПростейший способ управления оперативной памятью состоит в том, что память разбивается на несколько областей фиксированной величины, называемых разделами. Такое разбиение может быть выполнено вручную оператором во время старта системы или во время ее установки. После этого границы разделов не изменяются. Сравнивает объем памяти, требуемый для вновь поступившего процесса, с размерами свободных разделов и выбирает подходящий раздел; Осуществляет загрузку программы в один из разделов и настройку адресов. Уже на этапе трансляции разработчик программы может задать раздел, в котором ее следует выполнять.Это позволяет сразу, без использования перемещающего загрузчика, получить машинный код, настроенный на конкретную область памяти.При очевидном преимуществе — простоте реализации, данный метод имеет существенный недостаток — жесткость. Так как в каждом разделе может выполняться только один процесс, то уровень мультипрограммирования заранее ограничен числом разделов. Независимо от размера программы она будет занимать весь раздел. Так, например, в системе с тремя разделами невозможно выполнять одновременно более трех процессов, даже если им требуется совсем мало памяти. С другой стороны, разбиение памяти на разделы не позволяет выполнять процессы, программы которых не помещаются ни в один из разделов, но для которых было бы достаточно памяти нескольких разделов. В этом случае память машины не делится заранее на разделы. Сначала вся память, отводимая для приложений, свободна. Каждому вновь поступающему на выполнение приложению на этапе создания процесса выделяется вся необходимая ему память (если достаточный объем памяти отсутствует, то приложение не принимается на выполнение и процесс для него не создается). После завершения процесса память освобождается, и на это место может быть загружен другой процесс. По сравнению с методом распределения памяти фиксированными разделами данный метод обладает гораздо большей гибкостью, но ему присущ очень серьезный недостаток — фрагментация памяти. Фрагментация — это наличие большого числа несмежных участков свободной памяти очень маленького размера (фрагментов). Настолько маленького, что ни одна из вновь поступающих программ не может поместиться ни в одном из участков, хотя суммарный объем фрагментов может составить значительную величину, намного превышающую требуемый объем памяти. Одним из методов борьбы с фрагментацией является перемещение всех занятых участков в сторону старших или младших адресов, так, чтобы вся свободная память образовала единую свободную область. В дополнение к функциям, которые выполняет ОС при распределении памяти динамическими разделами в данном случае она должна еще время от времени копировать содержимое разделов из одного места памяти в другое, корректируя таблицы свободных и занятых областей - процедура называется сжатием. 1. Самый простой из них, называемый свопингом, заключается в размещении в памяти всего процесса целиком, в запуске его на некоторое время, а затем в сбросе его на диск. Бездействующие процессы большую часть времени хранятся на диске и в нерабочем состоянии не занимают пространство оперативной памяти. 2. Второй подход называется виртуальной памятью, он позволяет программам запускаться даже в том случае, если они находятся в оперативной памяти лишь частично. Виртуальная памятьВиртуальная память — это подход к управлению памятью компьютером, который скрывает физическую память (в различных формах, таких как: оперативная память или жесткие диски) за единым интерфейсом, позволяя создавать программы, которые работают с ними как с единым непрерывным массивом памяти с произвольным доступом. Последствия развития мультимедиа и др. ПО выразились в необходимости запуска программ, объем которых не позволяет им поместиться в памяти, при этом возникает потребность в системах, поддерживающих несколько одновременно запущенных программ, каждая из которых помещается в памяти, но все вместе они превышают имеющийся объем памяти. Свопинг для данного случая не слишком привлекателен, так как обычный диск обладает пиковой скоростью передачи данных в несколько сотен мегабайт в секунду, а это означает, что свопинг программы объемом 1 Гбайт займет секунды, и еще столько же времени будет потрачено на загрузку другой программы в 1 Гбайт. Для каждого процесса выделяется свое адресное пространство, далее это пространство разбивается на отдельные фрагменты одинакового размера, которые называются страницами. Такая организация памяти называется виртуальной памятью. Виртуальная память — метод управления памятью, которая реализуется с использованием аппаратного и программного обеспечения компьютера. Она отображает используемые программами виртуальные адреса в физические адреса в памяти компьютера. Основная память представляется в виде непрерывного адресного пространства или набора смежных непрерывных сегментов. Программное обеспечение в операционной системе может расширить эти возможности, чтобы обеспечить виртуальное адресное пространство, которое может превысить объем оперативной памяти и таким образом иметь больше памяти, чем есть в компьютере. К основным преимуществам виртуальной памяти относят:Избавление программиста от необходимости управлять общим пространством памяти, Повышение безопасность использования программ за счет выделения памяти, Возможность иметь в распоряжении больше памяти, чем это может быть физически доступно на компьютере. Виртуальная память делает программирование приложений проще:Скрывая фрагментацию физической памяти; Устраняя необходимость в программе для обработки наложений в явном виде; Когда каждый процесс запускается в своем собственном выделенном адресном пространстве, нет необходимости переместить код программы или получить доступ к памяти с относительной адресацией. Виртуализация памяти может рассматриваться как обобщение понятия виртуальной памяти. Почти все реализации виртуальной памяти делят виртуальное адресное пространство на страницы, блоки смежных адресов виртуальной памяти. В основе технологии виртуальной памяти лежит идея, что у каждой программы имеется собственное адресное пространство, которое разбивается на участки, называемые страницами. Каждая страница представляет собой непрерывный диапазон адресов. Эти страницы отображаются на физическую память, но для запуска программы одновременное присутствие в памяти всех страниц необязательно. Страничное распределение:При таком способе все фрагменты программы, на которые она разбивается (кроме последней части) получаются одинаковыми. Одинаковыми должны быть и единицы памяти, предоставляемые для размещения фрагментов программы. Оперативная память разбивается на физические страницы; Программа разбивается на виртуальные страницы. Когда программа ссылается на часть своего адресного пространства, находящегося в физической памяти, то операция выполняется сразу. Когда программа ссылается на часть своего адресного пространства, которое НЕ находится в физической памяти, операционная система предупреждается о том, что необходимо получить недостающую часть, загружает эту часть в ОП и повторно выполняет команду, которая не была выполнена. Страничная организация памятиС точки зрения программиста:Процессам виртуальное адресное пространство представляется непрерывным, от байта 0 до байта N N зависит от аппаратной поддержки (например 32бит. - адр.пространство 4Гб), делится соответственно. В реальности виртуальные страницы распределены по страницам физической памяти далеко не непрерывно и не один к одному. Это два разных мира – физические страницы и виртуальные страницы. Управление памятью Страничный способ организации виртуальной памяти – способ разрывного размещения задач в памяти, при котором все фрагменты задачи имеют одинаковый размер, кратный степени двойки (для использования операции конкатенации). При таком способе все фрагменты программы, на которые она разбивается (кроме последней части) получаются одинаковыми. Одинаковыми должны быть и единицы памяти, предоставляемые для размещения фрагментов программы. Виртуальный адрес состоит из двух полей:Указатель на часть программы (с которой идет работы) для определения местоположения этой части; Относительный адрес нужного фрагмента памяти (по отношению к найденному адресу). Часть виртуальных страниц располагается в оперативной памяти, а часть – во внешней (файл подкачки, страничный файл, swap-файл). Трансляция адресовТрансляция виртуального адреса:Виртуальный адрес состоит из двух частей: номер виртуальной страницы (VPN) и смещение внутри страницы Номер виртуальной страницы (VPN- virtual page number) это индекс в таблице страниц (Pagetable) Запись в таблице страниц (PTE – page table entry) содержит номер фрейма (PFN –page frame number) Фрейм – это страница физической памяти. Номер фрейма (PFN) – это номер физической страницы. Смысл таблицы страниц – одна запись в таблице страниц (PTE) на одну страницу виртуального адресного пространства (VPN), отображает VPN на PFN. Какая виртуальная страница соответствует какому фрейму физической памяти. Трансляция адресов№ вирт. страницы Виртуальный адрес смещение № фрейма смещение № фрейма Таблица страниц Физический адрес Фрейм 0 Фрейм 1 Фрейм 2 Фрейм 3 Фрейм Y … Физическая память Таблица страницЗапись в таблице – дескриптор страницыНомер физической страницы, в которую загружена данная виртуальная страница; Признак присутствия = 1, если виртуальная страница находится в ОП; Признак модификации страницы 1, когда производится запись по адресу, относящемуся к данной странице; Признак обращения (бит доступа) 1, при каждом обращении по адресу, относящемуся к данной странице; Признаки присутствия, модификации и обращения в большинстве моделей процессоров устанавливаются аппаратно при выполнении операций с памятью; Сами таблицы страниц размещаются в оперативной памяти; Адрес таблицы страниц включается в контекст соответствующего процесса; При активизации очередного процесса ОС загружает адрес его таблицы страниц в специальный регистр процессора. Страничное прерываниеНомер виртуальной страницы определяется нужный элемент таблицы страниц извлечение информации о станице (в том числе адрес в ОП) Анализ признака присутствия, если страница в ОП есть преобразование адреса (ВА – ФА), если страницы нет, то страничное прерывание (действия) Задачи ОСВедение таблиц свободных и занятых областей, в которых указываются начальные адреса и размеры участков памяти; При поступлении новой задачи анализ таблицы свободных областей и выбор раздела, размер которого достаточен для размещения поступившей задачи; Задачи ОСЗагрузка задачи в выделенный ей раздел и корректировка таблиц свободных и занятых областей; После того, как задача завершится освобождение памяти, которую занимала задача, т.е. выполнение корректировки таблиц свободных и занятых областей. Программист обращается к памяти с помощью некоторого набора логических имен. Имена переменных и входных точек модулей составляют область имен. Операционная система должна связать каждое указанное пользователем имя с физическим адресом памяти, т.е. осуществить отображение пространства имен на физическую память компьютера. Это происходит в два этапа:Посредством системы программирования; Посредством операционной системы (с помощью специальных программных модулей управления памятью и использования соответствующих аппаратных средств вычислительной системы). с Символьные имена Идентификатор переменных в программе на алгоритмическом языке Виртуальные адреса Условные адреса, вырабатываемые транслятором Физические адреса Номера ячеек физической памяти Транслятор Между этими этапами обращение к памяти имеет форму виртуального. Множество всех допустимых значений виртуального адреса для некоторой программы определяет ее виртуальное адресное пространство или виртуальную память. Страничная организация памяти - выводСтраничная память — способ организации виртуальной памяти, при котором единицей отображения виртуальных адресов на физические является фрагмент постоянного размера — страница. При использовании страничной модели вся виртуальная память делится на N страниц таким образом, что часть виртуального адреса интерпретируется как номер страницы, а часть — как смещение внутри страницы. Сегментное распределениеВиртуальное адресное пространство процесса делится на сегменты, размер которых определяется программистом с учетом смыслового значения содержащейся в них информации. Отдельный сегмент может представлять собой подпрограмму, массив данных и т.п. Иногда сегментация программы выполняется по умолчанию компилятором. При загрузке процесса часть сегментов помещается в оперативную память (при этом для каждого из этих сегментов операционная система подыскивает подходящий участок свободной памяти), а часть сегментов размещается в дисковой памяти. Сегменты одной программы могут занимать в оперативной памяти несмежные участки. Во время загрузки система создает таблицу сегментов процесса (аналогичную таблице страниц), в которой для каждого сегмента указывается начальный физический адрес сегмента в оперативной памяти, размер сегмента, правила доступа, признак модификации, признак обращения к данному сегменту за последний интервал времени и некоторая другая информация. Если виртуальные адресные пространства нескольких процессов включают один и тот же сегмент, то в таблицах сегментов этих процессов делаются ссылки на один и тот же участок оперативной памяти, в который данный сегмент загружается в единственном экземпляре. Система с сегментной организацией функционирует аналогично системе со страничной организацией:Время от времени происходят прерывания, связанные с отсутствием нужных сегментов в памяти; При необходимости освобождения памяти некоторые сегменты выгружаются; При каждом обращении к оперативной памяти выполняется преобразование виртуального адреса в физический. Сегментное распределение - выводСегментная организация виртуальной памяти реализует следующий механизм: вся память делиться на сегменты фиксированной или произвольной длины, каждый из которых характеризуется своим начальным адресом. Виртуальный адрес в такой системе состоит из 2-х компонент: базы сегмента, к которому мы хотим обратиться, и смещения внутри сегмента. Странично-сегментное распределениеДанный метод представляет собой комбинацию страничного и сегментного распределения памяти и, вследствие этого, сочетает в себе достоинства обоих подходов. Виртуальное пространство процесса делится на сегменты, а каждый сегмент в свою очередь делится на виртуальные страницы, которые нумеруются в пределах сегмента. Оперативная память делится на физические страницы. Загрузка процесса выполняется операционной системой постранично, при этом часть страниц размещается в оперативной памяти, а часть на диске. Для каждого сегмента создается своя таблица страниц, структура которой полностью совпадает со структурой таблицы страниц, используемой при страничном распределении. Для каждого процесса создается таблица сегментов, в которой указываются адреса таблиц страниц для всех сегментов данного процесса. Адрес таблицы сегментов загружается в специальный регистр процессора, когда активизируется соответствующий процесс. Виртуальное адресное пространство зависит от:Архитектуры процессора; Системы программирования. Виртуальное адресное пространство не зависит от:Объема реальной физической памяти, установленной в компьютере.Все методы управления памятью могут быть разделены на два класса:методы, которые используют перемещение процессов между оперативной памятью и диском, методы, которые не делают этого. Распределение памяти фиксированными разделами. Распределение памяти разделами переменной величины. Перемещаемые разделы. Сегментное распределение; Страничное распределение; Сегментно-страничное распределение. Распределение памяти фиксированными разделами. Распределение памяти разделами переменной величины. Перемещаемые разделы. Самым простым способом управления оперативной памятью является разделение ее на несколько разделов фиксированной величины. Это может быть выполнено вручную оператором во время старта системы или во время ее генерации Подсистема управления памятью в этом случае выполняет следующие задачи:сравнивая размер программы, поступившей на выполнение, и свободных разделов, выбирает подходящий раздел, осуществляет загрузку программы и настройку адресов. Распределение памяти фиксированными разделами. Распределение памяти разделами переменной величины. Перемещаемые разделы. При распределение памяти разделами переменной величины память машины не делится заранее на разделы. Сначала вся память свободна. Каждой вновь поступающей задаче выделяется необходимая ей память. Если достаточный объем памяти отсутствует, то задача не принимается на выполнение и стоит в очереди. После завершения задачи память освобождается, и на это место может быть загружена другая задача. Таким образом, в произвольный момент времени оперативная память представляет собой случайную последовательность занятых и свободных участков (разделов) произвольного размера.Распределение памяти фиксированными разделами. Распределение памяти разделами переменной величины. Перемещаемые разделы. Сегментное распределение; Страничное распределение; Сегментно-страничное распределение. Виртуальный адрес можно представить состоящим из двух полей:указатель на часть программы (с которой идет работы) для определения местоположения этой части; относительный адрес нужной ячейки памяти (по отношению к найденному адресу). Сегментное распределение; Страничное распределение; Сегментно-страничное распределение. Для сегментного способа организации виртуальной памяти программу нужно разбить на части и уже каждой части выделить физическую память.Каждый программный модуль или их совокупность могут быть восприняты как отдельные сегменты. Каждый сегмент размещается в оперативной памяти как самостоятельная единица. Логически обращение к элементам программы производится как указание имени сегмента и смещения относительно его начала.Физически имя (или порядковый номер) сегмента соответствует некоторому адресу, с которого этот сегмент начинается при его размещении в памяти, и смещение должно прибавляться к этому адресу.Сегментное распределение; Страничное распределение; Сегментно-страничное распределение. При таком способе все фрагменты программы, на которые она разбивается (кроме последней части) получаются одинаковыми. Одинаковыми должны быть и единицы памяти, предоставляемые для размещения фрагментов программы. оперативная память разбивается на физические страницы; программа разбивается на виртуальные страницы. Сегментное распределение; Страничное распределение; Сегментно-страничное распределение. При сегментно-страничном способе организации виртуальной памяти программа разбивается на логически законченные части – сегменты, виртуальный адрес содержит указание на номер соответствующего сегмента. |