Лекция 8. Логическая организация памяти
Основная (или как ее принято называть оперативная) память всегда была и остается до сих пор наиболее критическим ресурсом компьютеров. Организация управления этим ресурсом – задача для операционной системы. Поэтому всегда первичной функцией всех операционных систем (более точно, операционных систем, обеспечивающих режим мультипрограммирования) было обеспечение разделения основной памяти между конкурирующими пользовательскими процессами. В оперативной памяти мультипрограммных ЭВМ обычно постоянно хранится ядро ОС. Программы ядра ОС в процессе работы ЭВМ выполняются часто, время их выполнения невелико. Остальные части операционной системы, как правило, находятся во внешней памяти, и в случае необходимости требуемые модули загружаются в оперативную память, занимая ее часть. В оставшейся части ОП хранится несколько программ, выполняемых в мультипрограммном режиме, и используемые ими данные. Распределение памяти предполагает удовлетворение потребностей, как пользователей, так и системных средств. Эти требования в большей части противоречивы. Существуют три стратегии распределения оперативной памяти, как и любого ресурса: статическое, динамическое распределение и свопинг.
При статическом распределении вся необходимая оперативная память выделяется процессу в момент его порождения. При этом память выделяется единым блоком необходимой длины, начало которого определяется базовым адресом. Программа пишется в адресах относительно начала блока, а физический адрес команды или операнда при выполнении программы формируется как сумма базового адреса блока и относительного адреса в блоке. Значение базового адреса устанавливается при загрузке программы в оперативную память. Пусть ОП имеет объем 10 Мбайт, а для выполнения программ A, B, C, D требуются следующие объемы памяти: A - 2 Мбайт, B - 1 Мбайт, C - 4 Мбайт, D - 4 Мбайт. Начальное распределение памяти и распределение памяти после выполнения некоторых программ представлено на рис 8.1.
Рис. 8.1 Статическое распределение памяти: a - начальное распределение; б - после завершения программы A; в - после завершения программы B; г - после завершения программы C
Из рисунка видно, что программа D при статическом распределении памяти может быть загружена в оперативную память лишь после завершения выполнения всех предыдущих программ, хотя необходимый для нее объем памяти существовал уже после завершения работы программы A. В то же время для улучшения показателей работы мультипрограммной ЭВМ требуется, чтобы в оперативной памяти постоянно находилось, возможно, большее количество программ, готовых к выполнению. При свопинге (swapping) ОС по-прежнему располагает текущий процесс целиком в ОП, но при необходимости может целиком его (или образ) выбросить и заместить образом другого процесса. При динамическом распределении памяти каждой программе в начальный момент выделяется лишь часть от всей необходимой ей памяти, а остальная часть выделяется по мере возникновения реальной потребности в ней. Системные средства должны отслеживать возникновение требований на обращение к тем частям программы, которые в данный момент отсутствуют в ОЗУ, выделять этой программе необходимый блок памяти и помещать туда из внешнего ЗУ требуемую часть программы. Для этого может потребоваться предварительное перемещение некоторых блоков информации из ОЗУ во внешнюю память. Данные перемещения должны быть скрыты от пользователя и в наименьшей степени замедлять работу его программы. Динамическое распределение памяти тесно переплетается с понятием виртуальной памяти.
Принцип виртуальной памяти предполагает, что пользователь при подготовке своей программы имеет дело не с физической ОП, действительно работающей в составе компьютера и имеющей некоторую фиксированную емкость, а с виртуальной (кажущейся) одноуровневой памятью, емкость которой равна всему адресному пространству, определяемому размером адресной шины компьютера. Таким образом, виртуальная память – это эффективное использование ресурсов ОП и ВП, которые выделяются прикладным программам операционной системой.