Виртуальная память
Еще на заре компьютерной техники люди столкнулись с проблемой размещения программ, оказавшихся слишком большими и поэтому не помещавшиеся в доступной физической памяти. Обычно принималось решение о разделении программы на части, называемые оверлеями (overlays). Нулевой оверлей запускался первым. По завершению своего выполнения он вызывал следующий оверлей. Некоторые оверлейные системы были очень сложными, позволяя одновременно находиться в памяти нескольким оверлеям. Оверлеи хранились на диске и по мере необходимости динамически перемещались между памятью и диском средствами операционной системы.
Хотя фактическая работа по загрузке оверлеев с диска и выгрузке на диск выполнялась системой, делить программы на части должен был программист. Однако такая ситуация длилась недолго, так как вскоре удалось поручить всю работу компьютеру.
Разработанный подход стал известен как виртуальная память. Основная идея этого подхода состоит в том, что хотя общий размер программы, данных и стека может превышать объем доступной физической памяти, операционная система хранит части программы, используемые в настоящий момент, в оперативной памяти, остальные – на диске.
Например, программа размером 512 Мбайт сможет работать на машине с объемом памяти 256 Мбайт, если тщательно продумать, какие 256 Мбайт должны находиться в памяти в каждый момент времени. При этом по мере необходимости части программы, находящиеся на диске, будут меняться местами с частями в памяти.
Виртуальная память вполне работоспособна и в многозадачной системе при наличии множества одновременно загружаемых в память программ. Когда программа ждет перемещения в память очередной ее части, она находится в состоянии ожидания ввода-вывода и не работает, поэтому центральный процессор может быть отдан другому процессу тем же самым способом, как в любой другой многозадачной системе.
Адреса виртуальной памяти формируются программным путем с использованием для этой цели специальных регистров (базовых или сегментных). Программно формируемые адреса, называемые виртуальными, образуют виртуальное адресное пространство. На компьютерах без виртуальной памяти виртуальные адреса подаются непосредственно на шину памяти и при чтении или записи читается или записывается слово в физической памяти с тем же самым адресом. При применении виртуальной памяти виртуальные адреса не передаются напрямую шиной памяти. Вместо этого они направляются в блок управления памятью (Memory Management Unit, MMU), который отображает виртуальные адреса на физические адреса (рис. 4.3).
Рис. 4.3. Расположение и функции блока управления памятью (MMU)
Большинство систем виртуальной памяти опираются на прием, называемый замещение страниц (paging). Пространство виртуальных адресов разделено на единичные блоки, называемые страницами. Соответствующие блоки в физической памяти называются страничными блоками (page frame). Размер страниц и их блоков всегда одинаков. Используются размеры от 512 байт до 64 Кбайт. Передача данных между ОЗУ и диском всегда происходит постранично.
Дата добавления: 2014-12-13; просмотров: 1438;