Локализация и виртуальная память
Достоинства виртуальной памяти весьма привлекательны, но насколько практична данная схема? Одно время на эту тему шли оживленные дебаты, однако опыт ее использования многими операционными системами продемонстрировал бесспорную жизнеспособность этой схемы — виртуальная память стала неотъемлемым компонентом большинства современных операционных систем.
Чтобы понять, в чем заключается ключевое свойство виртуальной памяти и почему она вызвала такие бурные дебаты, обратимся вновь к задачам операционной системы, связанным с виртуальной памятью. Рассмотрим большой процесс, состоящий из длинного кода и ряда массивов данных. В каждый небольшой промежуток времени выполнение программы сосредотачивается в малой части кода (например, в одной из подпрограмм), и обращается эта часть кода, как правило, только к одному или двум массивам данных. В таком случае загружать в память все данные и код, в то время как перед приостановкой и выгрузкой процессаиз памяти будут использоваться только небольшие их части, — расточительство. Память будет использоваться гораздо эффективнее, если загружать в нее только необходимые части программы. Соответственно, в этом случае при обращении к данным или коду, которых в настоящий момент нет в основной памяти, происходит прерывание выполнения программы, которое говорит операционной системе о необходимости загрузки в основную память затребованной части программы.
Таким образом, в основной памяти в каждый момент времени находится только некоторая, как правило, небольшая, часть данного процесса и, следовательно, в основной памяти может быть одновременно размещено большее количество процессов. К тому же при этом получается определенная экономия времени, так как неиспользуемые части процессов не приходится постоянно выгружать из памяти и загружать вновь. Однако операционная система должна очень разумно работать с такой схемой управления памятью. В установившемся состоянии практически вся основная память занята фрагментами процессов, чтобы процессор и операционная система могли работать с как можно большим количеством процессов одновременно. Следовательно, при загрузке в основную память некоторого блока другой блок должен быть выгружен оттуда. Если из памяти выгрузить блок, который тут же потребуется вновь, операционная система будет заниматься постоянным перемещением одних и тех же блоков в основную память и на диск. Большое количество таких перебросок приводит к ситуации, известной какснижение пропускной способности (thrashing): процессор в основном занимается не выполнением процессов, а выгрузкой и загрузкой в основную память. Задаче устранения этого нежелательного эффекта посвящен ряд исследовательских работ, выполнявшихся в 70-х годах, приведших к появлению различных сложных, но эффективных алгоритмов. По сути, они сводятся к попыткам определить на основании последних событий в системе, какие блоки памяти потребуются в ближайшем будущем.
Эти методы базируются на принципе локализации(см. главу 1, "Обзор компьютерных систем"), который гласит, что обращения к коду и данным в процессе имеют тенденцию к кластеризации.
Таким образом, наличие принципа локализации позволяет надеяться на эффективность работы виртуальной памяти. Для этого требуется, чтобы, во-первых, имелась аппаратная поддержка страничной организации и/или сегментации, а во-вторых, операционная система должна включать программное обеспечение для управления перемещением страниц и/или сегментов между вторичной и основной памятью, В этом разделе мы рассмотрим аппаратный аспект проблемы и познакомимся с необходимыми управляющими структурами, создаваемыми и поддерживаемыми операционной системой, но используемыми аппаратным обеспечением; вопросы же работы операционной системы будут рассмотрены в следующем разделе.
Дата добавления: 2016-06-05; просмотров: 1559;