Слайд 1Лекция 6
Управление памятью.
Алгоритмы распределения памяти.
Слайд 2Функции ОС по управлению памятью:
отслеживание свободной и занятой памяти;
выделение памяти
процессам и освобождение памяти по их завершении;
вытеснение кодов и данных
процессов из оперативной памяти на диск, когда размеры основной памяти не достаточны, и возвращение их в оперативную память, когда в ней освобождается место;
настройка адресов программы на конкретную область физической памяти;
динамическое распределение памяти;
дефрагментация памяти;
защита памяти.
Слайд 3Типы адресов
Для идентификации переменных и команд используются символьные имена (метки),
виртуальные адреса и физические адреса.
Символьные имена присваивает пользователь при написании
программы.
Виртуальные вырабатывает транслятор, переводящий программу на машинный язык.
Физические адреса соответствуют номерам ячеек оперативной памяти, где в действительности расположены или будут расположены переменные и команды.
Слайд 4Совокупность виртуальных адресов процесса называется виртуальным адресным пространством. Например, при
использовании 32-разрядных виртуальных адресов диапазон возможных адресов виртуального пространства задается
границами 0000000016 и FFFFFFFF16.
Каждый процесс имеет собственное виртуальное адресное пространство.
Слайд 5Виртуальным называется ресурс, который пользователю или пользовательской программе представляется обладающим
свойствами, которыми он в действительности не обладает. В данном случае
в распоряжение пользователя предоставляется виртуальная оперативная память, размер которой намного превосходит всю имеющуюся в системе реальную оперативную память.
Слайд 7Используются разные способы структуризации виртуального адресного пространства.
1.Линейная. Виртуальным адресом
является единственное число, представляющее собой смещение относительно начала (обычно это
значение 000...000) виртуального адресного пространства. Адрес такого типа называют линейным виртуальным адресом.
Слайд 92. Сегментная. Виртуальное адресное пространство делится на части, называемые сегментами.
В этом случае помимо линейного адреса может быть использован виртуальный
адрес, представляющий собой пару чисел (п, m), где п определяет сегмент, a m — смещение внутри сегмента.
Слайд 11Алгоритмы распределения памяти
Распределение памяти фиксированными разделами
Простейший способ управления оперативной памятью
состоит в том, что память разбивается на несколько областей фиксированной
величины, называемых разделами. После этого границы разделов не изменяются.
Очередной новый процесс, поступивший на выполнение, помещается либо в общую очередь, либо в очередь к некоторому разделу.
Слайд 13Подсистема управления памятью в этом случае выполняет следующие задачи.
Сравнивает объем
памяти, требуемый для вновь поступившего процесса, с размерами свободных разделов
и выбирает подходящий раздел.
Осуществляет загрузку программы в один из разделов и настройку адресов.
Так как в каждом разделе может выполняться только один процесс, то уровень мультипрограммирования заранее ограничен числом разделов.
Слайд 14Распределение памяти динамическими разделами
Память не делится заранее на разделы. Сначала
вся память, свободна. Каждому поступающему на выполнение приложению выделяется вся
необходимая ему память (если достаточный объем памяти отсутствует, то приложение не принимается на выполнение).
После завершения процесса память освобождается, и на это место может быть загружен другой процесс.
Метод обладает гораздо большей гибкостью, но ему присущ очень серьезный недостаток — фрагментация памяти.
Слайд 16Перемещаемые разделы
Одним из методов борьбы с фрагментацией является перемещение всех
занятых участков в сторону старших или младших адресов, так, чтобы
вся свободная память образовала единую свободную область. В дополнение к функциям, которые выполняет ОС при распределении памяти динамическими разделами, в данном случае она должна еще время от времени копировать содержимое разделов из одного места памяти в другое. Эта процедура называется сжатием.
Слайд 18В условиях, когда для обеспечения приемлемого уровня мультипрограммирования имеющейся оперативной
памяти недостаточно, был предложен метод организации вычислительного процесса – виртуальная
память, при котором образы некоторых процессов целиком или частично временно выгружаются на диск.
Слайд 19В настоящее время все множество реализаций виртуальной памяти может быть
представлено тремя классами.
Страничная виртуальная память организует перемещение данных между памятью
и диском страницами — частями виртуального адресного пространства, фиксированного и сравнительно небольшого размера.
Слайд 20Сегментная виртуальная память предусматривает перемещение данных сегментами — частями виртуального
адресного пространства произвольного размера, полученными с учетом смыслового значения данных.
Сегментно-страничная
виртуальная память использует двухуровневое деление: виртуальное адресное пространство делится на сегменты, а затем сегменты делятся на страницы. Единицей перемещения данных здесь является страница.
Слайд 21Страничное распределение
Виртуальное адресное пространство каждого процесса делится на части одинакового,
фиксированного для данной системы размера, называемые виртуальными страницами. Вся оперативная
память машины также делятся на части такого же размера- физические страницы.
Размер страницы выбирается равным степени двойки: 512, 1024, 4096 байт и т.д. Это позволяет упростить механизм преобразования адресов.
Слайд 22Для каждого процесса операционная система создает таблицу страниц — информационную
структуру, содержащую записи обо всех виртуальных страницах процесса.
Слайд 24Запись таблицы, называемая дескриптором страницы, включает следующую информацию:
номер физической
страницы, в которую загружена данная виртуальная страница;
признак присутствия, устанавливаемый в
единицу, если виртуальная страница находится в оперативной, памяти;
Слайд 25признак модификации страницы, который устанавливается в единицу всякий раз, когда
производится запись по адресу, относящемуся к данной странице;
признак обращения к
странице, называемый также битом доступа, который устанавливается в единицу при каждом обращении по адресу, относящемуся к данной странице.
Слайд 26Виртуальный адрес при страничном распределении может быть представлен в виде
пары (р, sv), где р — порядковый номер виртуальной страницы
процесса (нумерация страниц начинается с 0), a sv — смещение в пределах виртуальной страницы. Физический адрес также может быть представлен в виде пары (n, sf), где n— номер физической страницы, a sf — смещение в пределах физической страницы.
Слайд 27Базисные свойства страничной организации.
Объем страницы выбирается равным степени двойки —
2к. Из этого следует, что смещение s может быть получено
простым отделением к младших разрядов в двоичной записи адреса, а оставшиеся старшие разряды адреса представляют собой двоичную запись номера страницы (виртуальной или физической).
Слайд 28Например, если размер страницы 1 Кбайт (210), то из двоичной
записи адреса 50718 = 101 000 111 0012 можно определить,
что он принадлежит странице, номер которой в двоичном выражении равен 102 и смещен относительно ее начала на 1 000 111 0012 байт (рис. 5.13). Начальный адрес страницы называется базовым адресом.
Слайд 30В пределах страницы непрерывная последовательность виртуальных адресов однозначно отображается в
непрерывную последовательность физических адресов, а значит, смещения в виртуальном и
физическом адресах sv и sf равны между собой (рис. 5.14).
Слайд 32Отсюда следует простая схема преобразования виртуального адреса в физический.
Младшие
разряды физического адреса, соответствующие смещению, получаются переносом такого же количества
младших разрядов из виртуального адреса. Старшие разряды физического адреса, соответствующие номеру физической страницы, определяются из таблицы страниц, в которой указывается соответствие виртуальных и физических страниц.
Слайд 33Сегментное распределение
При страничной организации виртуальное адресное пространство процесса делится на
равные части механически, без учета смыслового значения данных. Такой подход
не позволяет обеспечить дифференцированный доступ к разным частям программы, а это свойство могло бы быть очень полезным во многих случаях.
Слайд 34Разбиение виртуального адресного пространства на “осмысленные” части делает принципиально возможным
совместное использование фрагментов программ разными процессами. Пусть, например, двум процессам
требуется одна и та же подпрограмма, которая к тому же обладает свойством реентерабельности.
Слайд 35Реентерабельность (reentrantable) — свойство повторной входимости кода, которое позволяет одновременно
использовать его несколькими процессами.
Тогда коды этой подпрограммы могут быть
оформлены в виде отдельного сегмента и включены в виртуальные адресные пространства обоих процессов. При отображении в физическую память сегменты, содержащие коды подпрограммы из обоих виртуальных пространств, проецируются на одну и ту же область физической памяти. Таким образом оба процесса получат доступ к одной и той же копии подпрограммы (рис. 5.18).
Слайд 37Отдельный сегмент может представлять собой подпрограмму, массив данных и т.
п. Деление виртуального адресного пространства на сегменты осуществляется компилятором на
основе указаний программиста или по умолчанию. Максимальный размер сегмента определяется разрядностью виртуального адреса, например при 32-разрядной организации процессора он равен 4 Гбайт.
Слайд 38В каждом сегменте виртуальные адреса находятся в диапазоне от 0000000016
до FFFFFFFF16. Сегменты не упорядочиваются друг относительно друга, так что
общего для сегментов линейного виртуального адреса не существует, виртуальный адрес задается парой чисел: номером сегмента и линейным виртуальным адресом внутри сегмента.
Слайд 39Для каждого загружаемого сегмента операционная система подыскивает непрерывный участок свободной
памяти достаточного размера. Смежные в виртуальной памяти сегменты одного процесса
могут занимать в оперативной памяти несмежные участки.
Слайд 40На этапе создания процесса система создает таблицу сегментов процесса (аналогичную
таблице страниц), в которой для каждого сегмента указывается:
базовый физический адрес
сегмента в оперативной памяти;
размер сегмента;
правила доступа к сегменту;
признаки модификации, присутствия и обращения к данному сегменту, а также
некоторая другая информация.
Слайд 41Механизмы преобразования адресов этих двух способов управления памятью тоже весьма
схожи, однако в них имеются и существенные отличия, так как
сегменты в отличие от страниц имеют произвольный размер. Виртуальный адрес при сегментной организации памяти может быть представлен парой (g, s), где g — номер сегмента, a s — смещение в сегменте. Физический адрес получается путем сложения базового адреса сегмента, который определяется по номеру сегмента g из таблицы сегментов и смещения s
Слайд 43В данном случае нельзя обойтись операцией конкатенации, как это делается
при страничной организации памяти. Страницы имеют одинаковый размер, а значит,
их начальные адреса кратны размеру страниц и выражаются также числами с нулями в младших разрядах. Именно поэтому ОС заносит в таблицы страниц не полные адреса, а номера физических страниц, которые совпадают со старшими разрядами базовых адресов.
Слайд 44Сегмент же может в общем случае располагаться в физической памяти
начиная с любого адреса, следовательно, для определения местоположения в памяти
необходимо задавать его полный начальным физический адрес. Использование операции сложения вместо конкатенации замедляет процедуру преобразования виртуального адреса в физический по сравнению со страничной организацией.
Слайд 45Другим недостатком сегментного распределения является избыточность. При сегментной организации единицей
перемещения между памятью и диском является сегмент, имеющий в общем
случае объем больший, чем страница. Однако во многих случаях для работы программы вовсе не требуется загружать весь сегмент целиком, достаточно было бы одной или двух страниц.
Слайд 46Но главный недостаток сегментного распределения — это фрагментация, которая возникает
из-за непредсказуемости размеров сегментов. В процессе работы системы в памяти
образуются небольшие участки свободной памяти, в которые не может быть загружен ни один сегмент.
Слайд 47Одним из существенных отличий сегментной организации памяти от страничной является
возможность задания дифференцированных прав доступа процесса к его сегментам. Например,
один сегмент данных, содержащий исходную информацию для приложения, может иметь права доступа «только чтение», а сегмент данных, представляющий результаты, — «чтение и запись». Это свойство дает принципиальное преимущество сегментной модели памяти над страничной.