Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 800330

.pdf
Скачиваний:
3
Добавлен:
01.05.2022
Размер:
1.64 Mб
Скачать

ФГБОУ ВПО «Воронежский государственный технический университет»

А.Ю. Савинков

УПРАВЛЕНИЕ ПАМЯТЬЮ В СОВРЕМЕННЫХ ОПЕРАЦИОННЫХ СИСТЕМАХ

Утверждено Редакционно-издательским советом университета в качестве учебного пособия

Воронеж 2014

УДК 681.36

Савинков А. Ю. Управление памятью в современных операционных системах: учеб. пособие [Электронный ресурс]. – Электрон. текстовые, граф. данные (1,56 Мб ) / А. Ю. Савинков. Воронеж: ФГБОУ ВПО «Воронежский государственный технический университет», 2014. – 1 электрон. опт. диск (CDROM). – Систем. требования: ПК 500 и выше ; 256 Мб ОЗУ ; Windows XP ; Adobe Reader ; 1024x768 ; CD-ROM ; мышь. – Загл.

с экрана. – Диск и сопровод. материал помещены в контейнер

12x14 см.

В учебном пособии рассматриваются основные понятия и разделы, позволяющие получить представление о задачах и проблемах управления памятью в современных операционных системах. Содержащаяся в пособии информация является базовой для углубленного изучения вопросов решения задач защиты данных и взаимодействия программ.

Издание соответствует требованиям Федерального государственного образовательного стандарта высшего профессионального образования по специальности 090301 «Компьютерная безопасность», дисциплинам «Операционные системы», «Защита в операционных системах», по специальности 090303 «Информационная безопасность автоматизированных систем», дисциплине «Безопасность операционных систем».

Табл. 10. Ил. 12. Библиогр.: 8 назв.

Рецензенты: ОАО «Концерн «Созвездие» (канд. техн. наук, ст. науч. сотрудник О.В. Поздышева);

д-р техн. наук, проф. А.Г. Остапенко

©Савинков А.Ю., 2014

©Оформление. ФГБОУ ВПО «Воронежский государственный

технический университет», 2014

ВВЕДЕНИЕ

Память является одним из наиболее важных системных ресурсов, от эффективности управления которым существенно зависит работа компьютера.

Любая программа может выполняться только если ее код и данные размещены в оперативной памяти компьютера. В многозадачной системе оперативная память зачастую не может вместить все запущенные программы одновременно, поэтому операционная система должна динамически перераспределять память между конкурирующими задачами. Кроме того, механизмы управления памятью играют важную роль при решении задач защиты данных и взаимодействия программ.

Таким образом, подсистема управления памятью в составе операционной системы является одним из ключевых системных механизмов.

Рассмотрим организацию и работу подсистемы управления памятью в современных операционных системах. Несмотря на разнообразие существующих операционных систем, механизмы управления памятью в них схожи. Все современные операционные системы полагаются на концепцию виртуальной памяти, требующую аппаратной поддержки в процессоре и используют очень похожие структуры данных и алгоритмы для управления памятью.

Базовой концепцией, положенной в основу всех современных алгоритмов управления памятью, в том числе алгоритмов в системе виртуальной памяти, является локализация ссылок при обращении к памяти. Рассмотрим это явление более подробно и поясним, почему оно так важно.

3

1.ЛОКАЛИЗАЦИЯ ССЫЛОК ПРИ ОБРАЩЕНИИ

КПАМЯТИ

Еще в 60-е годы 20 века было замечено, что адреса обращения к памяти при выполнении программ имеют тенденцию к группировке. Данное наблюдение получило название принцип локальности или принцип локализации ссылок при обращении к памяти. Принцип локализации ссылок можно определить следующим образом: если

программа выполнила обращение по некоторому адресу в памяти, то существует высокая вероятность того, что в ближайшее время последуют новые обращения по этому же или близким адресам.

В литературе иногда встречается деление локализации ссылок на временную и пространственную

локализацию. Под временной локализацией понимают серию обращений по одному и тому же адресу через малые промежутки времени, а под пространственной – серию последовательных обращений по близким адресам. Но с точки зрения алгоритмов управления памятью такое разделение в большинстве случаев не принципиально и мы не будем в дальнейшем без необходимости конкретизировать тип локальности (временная или пространственная), понимая под локализацией ссылок высокую вероятность обращения в ближайшее время в ближайшую окрестность использованного адреса.

Явление локализации ссылок при обращении к памяти объясняется следующими причинами:

последовательное выполнение кода программы

вбольшинстве случаев, процессор, выполнив очередную инструкцию программы, принимает на выполнение следующую инструкцию, расположенную в памяти непосредственно за только что выполненной;

4

группировка данных в структуры – разрабатывая программу, программисты обычно группируют логически связанные данные в структуры и широко используют массивы для работы с векторами однотипных данных, обработка всех логически связанных данных обычно выполняется в одном и том же месте программы, и после обращения к одному элементу массива, последует обращение к следующему элементу, и т.д.;

наличие циклов – выполнение тела цикла неизбежно повлечет многократные обращения к одним и тем же данным;

наличие подпрограмм – в программах часто вызываются одни и те же функции и процедуры для выполнения некоторых стандартных действий, в результате многократно используется один и тот же фрагмент кода.

Локализацию ссылок при работе реальных программ можно наблюдать с использованием специальных инструментов отладки, например Valgrind (http://valgrind.org), который может быть использован в системах Linux и Android для трассировки адресов обращения программы к памяти.

На рис. 1 показана карта обращений к памяти программы Mozilla Firefox, взятая с сайта http://cartesianproduct.wordpress.com/2011/12/17/working- set-heuristics-and-the-linux-kernel-my-msc-report/.

5

Рис. 1. Карта обращений к памяти программы Mozilla Firefox

6

По оси ординат на рис. 1 отложен номер страницы, к которой выполнялось обращение, а по оси абсцисс – порядковый номер инструкции программы (другими словами, время, прошедшее с момента запуска программы).

Характерная структура карты с горизонтальными полосами свидетельствует о том, что на протяжении относительно длительных интервалов времени программа работала с близким адресами памяти, т.е. имела место локализация ссылок при обращении к памяти.

Локализация ссылок также может быть подтверждена посредством анализа распределения расстояния (дистанции) между двумя соседними обращениями к памяти. Так на рис. 2 показано экспериментально полученное с помощью Valgrind распределение расстояний между двумя соседними обращениями к памяти, полученное при выполнении компилятора gcc (учитывались только обращения к инструкциям программы). Последний закрашенный столбец аккумулирует все обращения к памяти, отстоящие на 64 и более байтов от предыдущего. На приведенной гистограмме хорошо видно, что обращения к памяти, отстоящие от предыдущего обращения более, чем на 10 байт крайне мало вероятны.

Локализация ссылок при обращении к памяти позволяет реализовать иерархическую модель памяти на основе взаимодействия различных типов запоминающих устройств различного объема и быстродействия. Иерархическая модель памяти позволяет получить высокое быстродействие и большой объем памяти при сохранении относительно невысокой сложности и стоимости памяти.

7

6e+004

5e+004

4e+004

3e+004

2e+004

1e+004

-0

5

10

15

20

25

30

35

40

45

50

55

60

65

Рис. 2. Распределение расстояний между двумя соседними обращениями к памяти, полученное при выполнении компилятора gcc

8

2. ИЕРАРХИЧЕСКАЯ МОДЕЛЬ ПАМЯТИ

Основная идея иерархической модели памяти состоит в следующем. Память системы разделяется на уровни иерархии, представленные запоминающими устройствами различного типа – с разным объемом и быстродействием. При этом, чем меньше быстродействие устройства памяти, тем больше его объем.

На верхнем уровне иерархии располагается наиболее быстродействующее устройство памяти, на нижнем – наименее быстродействующее, но зато с набольшим объемом.

Для всей иерархической структуры памяти соблюдается следующее правило: при переходе от вышележащего уровня к нижележащему, быстродействие памяти уменьшается, но ее объем увеличивается.

Процессор непосредственно взаимодействует с верхним, наиболее быстрым уровнем памяти. Верхний уровень пытается самостоятельно обслужить запросы процессора к памяти, но если вдруг требуемых данных на верхнем уровне памяти не оказалось, то подсистема управления памятью обращается к нижележащему уровню памяти, и т.д., пока требуемые данные не будут обнаружены, или пока не будет получен отказ от самого нижнего уровня в иерархии памяти.

Современные компьютеры реализуют многоуровневую модель построения памяти, включающую, как минимум, три уровня иерархии, как показано на рис. 3.

9

Рис. 3. Иерархия памяти в современном компьютере

10