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

 

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

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

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

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

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

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

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

Виртуальная память — это устройство, позволяющее программистам рас­сматривать память с логической точки зрения, не заботясь о наличии физиче­ской памяти достаточного объема. Принципы работы с виртуальной памятью были разработаны, чтобы задания нескольких пользователей, выполняясь па­раллельно, могли одновременно присутствовать в основной памяти. При такой организации процессов нет задержки между их выполнением: как только один из процессов заносится на вспомогательное запоминающее устройство, считыва­ется следующий процесс. Из-за различий в количестве памяти, требующемся для разных процессов, при переключении процессора с одного процесса на другой трудно компактно разместить их в основной памяти. Поэтому были разработаны системы со страничной организацией памяти, при которой процесс разбивается на блоки фиксированного размера, которые называются страницами. Обращение программы к слову памяти происходит по виртуальному адресу (virtual address), который состоит из номера страницы и смещения относительно ее начала. Стра­ницы одного и того же процесса могут быть разбросаны по всей основной памя­ти. Система разбивки на страницы обеспечивает динамическое соответствие ме­жду виртуальным адресом, использующимся программой, и реальным (real ad­dress), или физическим, адресом основной памяти.

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

 

Рис. 2.9. Концепция виртуальной памяти

 

Аппаратное обеспечение процессора вместе с операционной системой пре­доставляют пользователю "виртуальный процессор", который имеет доступ к виртуальной памяти. Это хранилище может быть организовано в виде линейного адресного пространства или в виде набора сегментов, представляющих собой непрерывные блоки переменной длины. При каждом из этих способов организации с помощью средств языка программирования можно обращаться к ячейкам вир­туальной памяти, в которых содержится программа и ее данные. Чтобы изоли­ровать процессы друг от друга, каждому из них можно выделить свою область памяти, не пересекающуюся с областью памяти другого процесса. Общее исполь­зование памяти можно организовать, частично перекрывая участки двух облас­тей виртуальной памяти. Файлы создаются на долговременном запоминающем устройстве. Чтобы с ними могли работать программы, файлы или их фрагменты могут копироваться в виртуальную память.

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

Рис. 2.10. Адресация виртуальной памяти