Что происходит с содержимым физической памяти процесса во время переключения контекста

Предположим, что виртуальный адрес процесса A V1->P1 (виртуальный адрес (V1) отображается в физический адрес (P1) ).

Во время переключения контекста таблица страниц процесса A заменяется таблицей страниц процесса B.

Предположим, что виртуальный адрес процесса B V2->P1 ((виртуальный адрес (V2) отображается в физический адрес (P1)) со своим собственным содержимым в этой области памяти.

Что же произошло с содержимым физической памяти, на которое указывал V1? Сохраняется ли он в памяти, когда происходит переключение контекста? Если да, то что, если процесс A записал содержимое, равное или близкое к размеру доступной физической памяти или ОЗУ? Где тогда сохранить содержимое?


person Sujith    schedule 01.10.2017    source источник
comment
Два процесса могут иметь один и тот же виртуальный адрес, но не один и тот же физический адрес. Процесс B может иметь тот же виртуальный адрес, что и процесс A, но физический адрес будет другим.   -  person babon    schedule 02.10.2017


Ответы (1)


Существует множество способов, с помощью которых ОС может справиться со сценарием, описанным в вопросе, а именно, как эффективно справиться с нехваткой свободной оперативной памяти. В зависимости от архитектуры ЦП и целей ОС есть несколько способов решения этой проблемы.

Одним из решений является простое уничтожение процессов, когда они пытаются использовать malloc (или какой-либо другой подобный механизм), а свободных страниц нет. Это эффективно позволяет избежать проблемы, поставленной в исходном вопросе. На первый взгляд это кажется плохой идеей, но у нее есть преимущества, заключающиеся в упрощении кода ядра и потенциальном ускорении переключения контекста. На самом деле, в некоторых приложениях, если работающий код должен использовать пространство подкачки для размещения страниц, которые не могут поместиться в ОЗУ, с использованием энергонезависимого хранилища, приложение получит такой удар по производительности, что система все равно фактически выйдет из строя. С другой стороны, не все компьютеры даже имеют энергонезависимую память для использования в качестве пространства подкачки!

Как уже упоминалось, альтернативой является использование энергонезависимого хранилища для хранения страниц, которые не помещаются в ОЗУ. Фактические конкретные реализации могут варьироваться в зависимости от конкретных потребностей системы. Вот несколько возможных способов прямого ответа на то, как могут существовать отображения V1->P1 и V2->P1.

1 - Часто нет строгих требований к тому, чтобы ОС поддерживала сопоставление V1->P1 и V2->P1. Пока содержимое виртуального пространства остается неизменным, поддерживающий его физический адрес прозрачен для работающей программы. Если обе программы должны работать одновременно, ОС может остановить программу, работающую в V2, и переместить память P1 в новый регион, скажем, P2. Затем переназначьте V2 на P2 и возобновите выполнение программы в V2. Это предполагает наличие свободной оперативной памяти для отображения, конечно.

2 - ОС может просто не отображать полное виртуальное адресное пространство программы в физическое адресное пространство, поддерживаемое ОЗУ. Предположим, что не все адресное пространство V1 было напрямую отображено в физическую память. Когда программа в версии 1 сталкивается с неразмеченным разделом, ОС может перехватить вызванное этим исключение. Если доступной оперативной памяти мало, ОС может использовать пространство подкачки в энергонезависимой памяти. ОС может освободить часть ОЗУ, передав некоторые физические адреса региона, который в настоящее время не используется, для подкачки пространства в энергонезависимом хранилище (например, пространство P1). Затем ОС может загрузить запрошенную страницу в освободившуюся оперативную память, настроить сопоставление виртуального и физического, а затем вернуть выполнение программе в V1.

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

person vxWizard    schedule 02.10.2017
comment
Часто нет строгих требований к тому, чтобы ОС поддерживала сопоставление V1->P1 и V2->P1. - Можете ли вы назвать ОС, которая поддерживает разные виртуальные адреса для одного и того же физического адреса? - person babon; 03.10.2017
comment
Мой опыт в основном связан с VxWorks, и VxWorks сопоставляет что-то вроде первых 8 ГБ физического адресного пространства с одной большой виртуальной картой. Затем он также установит отдельные меньшие сопоставления виртуальных и физических адресов, что приведет к сопоставлению двух виртуальных адресов с одним и тем же физическим. Было несколько других причин, по которым мне нужно было больше двух или более виртуальных адресов для сопоставления с одним и тем же физическим адресом. - person vxWizard; 03.10.2017
comment
@babon Если я не слежу, разве это не происходит каждый раз, когда вы разветвляете процесс, предполагая, что ОС выполняет копирование при записи? Когда вы разветвляете процесс, обе таблицы страниц процесса будут указывать большинство виртуальных адресов на одни и те же физические адреса, пока один из них не запишет в одно из общих физических пространств. - person Jack Humphries; 21.11.2017