Может создаться впечатление, что механизмы, обеспечивающие функционирование виртуальной памяти должны быть исключительно неэффективными. При больших непроизводительных затратах ресурсов, вызываемых отсутствием очередной виртуальной страницы в реальной оперативной памяти, одолевает беспокойство, что подкачка страниц сведет на нет показатель эффективности выполнения программы. Тем не менее, на практике виртуальная память работает совсем неплохо, главным образом благодаря свойству локальности.
Хотя общее количество различных страниц, на которые ссылаются программы в течение всего периода выполнения, может превысить весь объем физической оперативной памяти, тем не менее, принцип локальности предполагает, что в каждый момент времени они будут работать с меньшим набором активных страниц (active page), называемым рабочим набором (working set), или резидентным набором (resident set) страниц. После начальных затрат на размещение рабочего набора в реальной оперативной памяти последующие объекты ссылок находятся в рабочем наборе и не будут сопровождаться дополнительным обменом с диском.
|
|
До тех пор, пока программы расположены в физической оперативной памяти компактно, система виртуальной памяти функционирует без сбоев. В тоже время, не для каждой программы можно обеспечить оптимальное размещение в физической оперативной памяти. Если размер рабочего набора превышает размер физической оперативной памяти, то работа программы может привести к такой нежелательной ситуации, которая называется пробуксовкой, в условиях которой страницы непрерывно перекачиваются с диска в физическую оперативную память и обратно. Обычно виртуальная память работает эффективно, но если скорость выполнения программы заметно уменьшается, опытный программист сразу же заподозрит, что возможна пробуксовка памяти.
7.5. Достоинства виртуальной памяти
Упрощение совместного использования оперативной памяти
Раздельные адресные пространства программ предоставляют операционной системе согласованный механизм для управления совместным использованием физической оперативной памяти пользовательскими процессами и самой операционной системой. В общем случае, каждый процесс имеет свою область программы, данные, динамическую память и области стеков, которые используются исключительно этим процессом. При этом операционная система создает таблицы страниц, которые отображают соответствующие виртуальные страницы на не перекрывающиеся физические страницы.
В некоторых случаях желательно, чтобы процессы могли совместно использовать некоторые команды программ и данные. Возьмем, например, случай, когда каждый процесс должен вызывать одну и ту же программу ядра операционной системы, и каждая С-программа осуществляет вызовы подпрограмм из стандартной С-библиотеки, например, программы printf. Вместо того, чтобы включать отдельные копии ядра и стандартной С-библиотеки в каждый процесс, операционная система может обеспечить, чтобы несколько процессов совместно использовали единственную копию этой программы, отображая соответствующие виртуальные страницы различных процессов на одни и те же физические страницы.
|
|