Опубликован: 02.11.2010 | Доступ: свободный | Студентов: 5087 / 1573 | Оценка: 4.32 / 4.07 | Длительность: 17:08:00
ISBN: 978-5-9963-0416-5
Лекция 6:

Управление памятью. Методы, алгоритмы и средства

< Лекция 5 || Лекция 6: 123456 || Лекция 7 >
Аннотация: Организация памяти современного компьютера. Функции ОС по управлению памятью. Распределение памяти. Страничная организация виртуальной памяти. Оптимизация функционирования страничной виртуальной памяти. Сегментная организация виртуальной памяти. Сегментно-страничная виртуальная память.
Ключевые слова: память, адресное пространство, операционная система, аппаратное обеспечение, ресурс, Windows, выход, процессор, доступ, слово, блок данных, отношение, время доступа, операции, диск, очередь, Виртуализация, virtual memory, ПО, затраты, виртуальная память, memory, монитор, ядро, memory manager, управление памятью, загрузка, ОЗУ, MS-DOS, динамическое выделение памяти, дефрагментация памяти, цикла, пользователь, транслятор, машинный язык, место, программа, адрес, диапазон, байт, загрузчик, время выполнения, сегменты, разделы, Размещение, путь, фиксированный раздел, расходы, распределение памяти, IBM, мультипрограммирование, multiprogramming, with, множества, external, fragmentation, compaction, Дополнение, относительная адресация, исключение, регистр, значение, команда, прерывание, виртуальное, MMU, диспетчер, storage system, страничная виртуальная память, файл, paging file, виртуальная страница, virtual, запись, дескриптор, информация, минимум, контекст процесса, поиск, физическая страница, стратегия замещения, бит присутствия, виртуальный адрес, нумерация, физический адрес, компьютер, поле, длина, кэширование, производительность, максимум, таблица, бит, кэш, TLB, индексация, отображение, mapping, выборка, график, VAX, MIPS, DEC, alpha, visual, стратегия выборки, стратегия размещения, поток, неоднородный доступ к памяти, алгоритм, FIFO, буфер, policy, область видимости, указатель, кадр, время компиляции, логический, объект, reentrant, able, избыточность, сегментация, private, LDT, Local, descriptor, table, GDT, global, стек, индекс, уровень привилегий, DPL, RPL, состояние программы, PSW, CPL, контроль

6.1. Организация памяти современного компьютера

Со времен создания ЭВМ фон Неймана основная память в компьютерной системе организована как линейное (одномерное) адресное пространство, состоящее из последовательности слов, а позже байтов [10]. Аналогично организована и внешняя память. Хотя такая организация и отражает особенности используемого аппаратного обеспечения, она не соответствует способу, которым обычно создаются программы. Большинство программ организованы в виде модулей, некоторые из которых неизменны (только для чтения, только для исполнения), а другие содержат данные, которые могут быть изменены.

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

  1. Модули могут быть созданы и скомпилированы независимо друг от друга, при этом все ссылки из одного модуля в другой разрешаются системой во время работы программы.
  2. Разные модули могут получать разные степени защиты (только чтение, только исполнение) за счет весьма умеренных накладных расходов.
  3. Возможно применение механизма, обеспечивающего совместное использование модулей разными процессами (для случая сотрудничества процессов в работе над одной задачей).

Память – важнейший ресурс вычислительной системы, требующий эффективного управления. Несмотря на то, что в наши дни память среднего домашнего компьютера в тысячи раз превышает память больших ЭВМ 70-х годов, программы увеличиваются в размере быстрее, чем память. Достаточно сказать, что только операционная система занимает сотни Мбайт (например, Windows 2000 – до 30 млн строк), не говоря о прикладных программах и базах данных, которые могут занимать в вычислительных системах десятки и сотни Гбайт.

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

  • чем меньше время доступа, тем дороже бит;
  • чем выше емкость, тем ниже стоимость бита;
  • чем выше емкость, тем больше время доступа.

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

  • снижается стоимость бита;
  • возрастает емкость;
  • возрастает время доступа;
  • снижается частота обращений процессора к памяти.
Иерархия памяти

Рис. 6.1. Иерархия памяти

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

Обозначим через Т2 = 10 нс время обращения ко второму уровню памяти, а через Ротношение числа нахождений нужного слова в быстрой памяти к числу всех обращений. Пусть в нашем примере Р = 0,95 (т.е. 95% обращений приходится на быструю память, что вполне реально), тогда среднее время доступа к памяти можно записать так:

Tср = 0,95*1нс + 0,05* (1нс+10нс)=1,55нс

Этот принцип можно применять не только к памяти с двумя уровнями. Реально так и происходит. Объем оперативной памяти существенно сказывается на характере протекания вычислительного процесса, так как он ограничивает число одновременно выполняющихся программ, т.е. уровень мультипрограммирования. Если предположить, что процесс проводит часть р своего времени в ожидании завершения операции ввода-вывода, то степень загрузки Z центрального процессора (ЦП) в идеальном случае будет выражаться зависимостью

Z = 1 - pn, где n – число процессов.

На рис. 6.2 показана зависимость Z=p(n) для различного времени ожидания завершения операции ввода-вывода (20%, 50% и 80%) и числа процессов n. Большое количество задач, необходимое для высокой загрузки процессора, требует большого объема оперативной памяти. В условиях, когда для обеспечения приемлемого уровня мультипрограммирования имеющейся памяти недостаточно, был предложен метод организации вычислительного процесса, при котором образы некоторых процессов целиком или частично временно выгружаются на диск.

Загрузка процессора при различном числе процессов

Рис. 6.2. Загрузка процессора при различном числе процессов

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

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

В данном случае в распоряжение прикладного программиста предоставляется виртуальная оперативная память, размер которой намного превосходит реальную память системы и ограничивается только возможностями адресации используемого процесса (в ПК на базе Pentium 232 = 4 Гбайт). Вообще виртуальным (кажущимся) называется ресурс, обладающий свойствами (в данном случае большой объем ОП), которых в действительности у него нет.

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

Виртуализация памяти возможна на основе двух возможных подходов [17]:

  • свопинг (swapping) – образы процессов выгружаются на диск и возвращаются в оперативную память целиком;
  • виртуальная память (virtual memory) – между оперативной памятью и диском перемещаются части образов (сегменты, страницы, блоки и т.п.) процессов.

Недостатки свопинга:

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

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

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

< Лекция 5 || Лекция 6: 123456 || Лекция 7 >
Даниил Баёв
Даниил Баёв

Как узнать оценку за курс?

 

Анастасия Якимова
Анастасия Якимова