Что содержится в первой странице виртуальной памяти выделенной процессу?
Вопрос в заголовке.
Пример:
root@N34300 test # cat /proc/14023/maps
00400000-0041e000 r--p 00000000 08:01 654153 /bin/bash
0041e000-0049c000 r-xp 0001e000 08:01 654153 /bin/bash
0049c000-004cd000 r--p 0009c000 08:01 654153 /bin/bash
004ce000-004d1000 r--p 000cd000 08:01 654153 /bin/bash
004d1000-004da000 rw-p 000d0000 08:01 654153 /bin/bash
004da000-004e4000 rw-p 00000000 00:00 0
02152000-02194000 rw-p 00000000 00:00 0 [heap]
В данном случае вопрос касается конкретно первых трех страниц. И почему, когда я перевожу начальные адреса виртуальных страниц в физические, иногда нахожу совпадения с другими процессами. То есть физические адреса начала первых страниц двух процессов могут совпадать.
00400000 -> 129f91000 (process1)
00400000 -> 129f91000 (process2)
Ответы (1 шт):
Обычно, с адреса 00400000 загружается исполнимый код приложения. Так как у Вас два процесса похоже одинаковы (по всей видимости это баш), то ядро делает известную оптимизацию и использует один и тот же кусок памяти, что бы не делать дублирование данных в памяти. Точно также делают и другие ОС. Так как эта память содержит исполнимый код, то она доступна только на чтение и ее никто так просто не поменяет. Если же кто то захочет снять такой признак, то память будет скопирована в отдельную физическую память и там уже будет модифицироваться.