Современные операционные системы

Современные операционные системы
Управление памятью / Управление памятью

Управление памятью




Память представляет собой очень важный ресурс, требующий четкого управления. Несмотря на то что в наши дни объем памяти среднего домашнего компьютера в десятки тысяч раз превышает ресурсы IBM 7094, бывшего в начале 60-х годов самым большим компьютером в мире, размер компьютерных программ растет быстрее, чем объем памяти. Закон Паркинсона можно перефразировать следующим образом: «Программы увеличиваются в размерах, стремясь заполнить всю память, доступную для их размещения». В этой главе мы рассмотрим, как операционные системы создают из памяти абстракции и как они этими абстракциями управляют.

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

Тогда чем же нам придется довольствоваться? Со временем была разработана концепция иерархии памяти, согласно которой компьютеры обладают несколькими мегабайтами очень быстродействующей, дорогой и энергозависимой кэш-памяти, несколькими гигабайтами памяти, средней как по скорости, так и по цене, а также несколькими терабайтами памяти на довольно медленных, сравнительно дешевых дисковых накопителях, не говоря уже о сменных накопителях, таких как DVD-диски и флеш-устройства USB. Превратить эту иерархию в абстракцию, то есть в удобную модель, а затем управлять этой абстракцией — и есть задача операционной системы.

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

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



Полное описание: Управление памятью




С этим описанием рассматриваются следующие темы:


Адресные пространства
Каждый компьютер обладает определенным объемом оперативной памяти, используемой для хранения исполняемых программ. В самых простых операционных системах в памяти присутствует только одна программа. Для запуска второй программы сначала нужно удалить первую, а затем загрузить в память вторую на её место. Более изощренные операционные системы позволяют одновременно находиться в памяти нескольким программам. Чтобы исключить взаимные помехи (и помехи работе операционной системы), нужен какой-то защит ... Читать

Память без использования абстракций
Простейшей абстракцией памяти можно считать полное отсутствие какой-либо абстракции. Ранние универсальные машины (до 1960 года), ранние мини-компьютеры (до 1970 года) и ранние персональные компьютеры (до 1980 года) не использовали абстракции памяти. Каждая программа просто видела физическую память. Когда программа выполняла следующую команду MOV REGISTER1.1000 компьютер просто перемещал содержимое физической ячейки памяти 1000 в REG-ISTER1. Таким образом, модель памяти, предоставляемая программи ... Читать

Виртуальная память
Виртуальная память (которая будет рассмотрена в главе 3) позволяет запускать программы, размер которых превышает объем установленной на машине физической памяти, за счет перемещения фрагментов адресного пространства между оперативной памятью и диском. Она прошла похожий путь развития, появившись впервые на универсальных машинах, затем переместившись на мини- и микрокомпьютеры. Виртуальная память также позволяла программам во время работы динамически компоноваться с библиотеками, вместо того чтоб ... Читать

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

Большие объемы памяти
У первых универсальных машин был ограниченный объем памяти. В полной конфигурации машины IBM 7090 или 7094, доминировавшие на рынке с конца 1959 и до 1964 года, имели память объемом всего лишь в 128 Кбайт. Разработка программ для них велась в основном на ассемблере, и операционная система также была написана на ассемблере, чтобы сэкономить драгоценную по тем временам память. Со временем компиляторы для таких языков, как FORTRAN и COBOL, стали настолько качественными, что ассемблер был объявлен у ... Читать