2015-05-21 4 views
0

У меня есть несколько разделяемых библиотек, отображаемых в виртуальное адресное пространство моей задачи. Что происходит, когда я изменяю некоторые данные, например, в разделе .bss? Я делаю это с использованием kmap с физическим адресом страницы в качестве аргумента. Я могу предложить два способа. Данные изменяются, и это влияет на все задачи, которые используют библиотеку, или определенная страница копируется из-за COW.Что происходит, когда я изменяю данные в общей библиотеке?

ответ

0

Я думаю, что это не так. Область .bss настраивается при загрузке исполняемого файла. В это время для нее выделяется пространство виртуальной памяти, и это пространство не будет использоваться совместно с какой-либо другой задачей. Первоначально страницы не будут выделены (по умолчанию mlock * может изменить это); они будут сбиты с ошибкой (то есть с нулевым требованием), как указано.

Я думаю, что даже если процесс вилки перед касанием памяти, новый процесс просто получит эквивалент (то же самое пространство виртуальной памяти, которое будет обозначено как нулевой спрос).

Так что если у вас уже есть физический адрес, я бы подумал, что это уже произошло, и вы ничего не измените, кроме одной страницы, принадлежащей текущему процессу.

Смежные вопросы