Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Лекция: Управление памятью

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

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

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

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

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

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

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

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

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

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

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

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

Основное применение свопинг находит в системах разделения времени.

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

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

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

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

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

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

 

Пример фиксированного распределения 64 Мб памяти

 

  Операционная система 8 м  
  8 м    
  8 м    
  8 м    
  8 м    
  8 м    
  8 м    
  Операционная система 8 м  
2 м
4 м  
  8 м    
  8 м    
    12 м      
  16 м      

 

а) Разделы одинакового размера б) Разделы разных размеров

 

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

При использовании разделов с одинаковым размеров возникает две трудности:

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

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

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

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

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

Хотя этот метод представляется оптимальным с точки зрения отдельного раздела, он не оптимален с точки зрения системы в целом. Представим. Что в системе в некоторый момент времени нет ни одного процесса размером от 12 до 16 Мб. В результате раздел размером 16 Мб будет пустовать, в то время как он мог бы с успехом использоваться меньшими процессами.

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

Использование разделов разного раздела по сравнению разделов одинакового размера придает дополнительную гибкость данному методу.

Фиксированное распределение в настоящее время практически не используется.

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

 

 

Операционная Система 8 Мб Операционная система 8 Мб Операционная система 8 Мб Операционная Система 8 Мб
    Процесс 1 20Мб Процесс 1 20Мб Процесс 1 20Мб
 
56Мб       36Мб Процесс 2 14Мб Процесс 2 14Мб
        22Мб Процесс 3   18Мб
   
      4мб

а) б) в) г)


 

Операционная Система 8 Мб Операционная система 8 Мб Операционная система 8 Мб Операционная Система 8 Мб
Процесс 1 20мб Процесс 1 20Мб   20Мб Процесс 2 14Мб
  14Мб Процесс 4 8Мб 6Мб Процесс 4 14Мб   6Мб
    6Мб Процесс 4 8Мб
  Процесс 3 18Мб   Процесс 3 18Мб     Процесс 3     Процесс 3  
  18 Мб 18Мб
     
  4Мб   4Мб   4Мб   4Мб

д) е) ж) з)

Изначально вся память пуста, за исключением области, используемой операционной системой (п. а).

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

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

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

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

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

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

 


Контрольные вопросы

1. Что такое физическая память?

2. Что понимают под виртуальной памятью?

3. Какая операция является главной в управлении памятью?

4. Что называют ядром операционной системы?

5. Что такое свопинг?

6. На какие классы делятся методы размещения процессов?

7. В чем состоит суть неразрывного метода распределения памяти?

8. Как происходит размещение процессов в памяти с разделами одинакового размера?

9. Какие схемы распределения памяти используются при разбиении памяти на несколько непрерывных разделов?

10. Какие трудности возникают при использовании разделов с одинаковым размером при использовании схемы фиксированного распределения?

11. Что такое оверлеи?

12. Что называют (понимают) под внутренней фрагментацией?

13. В чем состоит преимущество использования разделов разного размера при использовании схемы фиксированного распределения?

14. В чем состоит суть динамического распределения памяти для размещения процессов?

15. В чем состоит разница физического и динамического распределения памяти?

16. В чем недостатки физического распределения?

17. Каковы недостатки динамического метода распределения памяти?

 

<== предыдущая лекция | следующая лекция ==>
Управление конфликтной ситуацией | Организация в экономической теории. Лекция. Теория экономических организаций
Поделиться с друзьями:


Дата добавления: 2014-01-20; Просмотров: 1323; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.