Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Области виртуальной памяти





Область виртуальной памяти (virtual memory area, VMA) представляет собой структуру данных ядра, используемую для управления различными регионами адресного пространства процесса. VMA представляет собой однородный регион в виртуальной памяти процесса: непрерывный диапазон виртуальных адресов, которые имеют одинаковые флаги разрешения и созданы одним и тем же объектом (скажем, файлом, или пространством для своппинга). Она примерно соответствует концепции "сегмента", хотя это лучше описывается как "объект памяти со своими свойствами". Карта памяти процесса состоит (по крайней мере) из следующих областей:

 

•Область для исполняемого кода программы (часто называемого текстом).

•Несколько областей для данных, в том числе проинициализированные данные (те, которые имеют явно заданные значения в начале исполнения), неинициализированные данных (BSS), (* имя BSS является историческим пережитком старого ассемблерного оператора, означающего "блок, начатый символом" (“block started by symbol”). Сегмент BSS исполняемых файлов не сохраняется на диске и ядро отображает нулевую страницу в диапазоне адресов BSS.) и программный стек.

•По одной области для каждого активного отображения памяти.

 

Области памяти процесса можно увидеть, посмотрев в /proc/<pid>/maps (где pid, конечно, заменяется на ID процесса). /proc/self является особым случаем /proc/pid, потому что он всегда обращается к текущему процессу. Вот, например, несколько карт памяти (к которым мы курсивом добавили краткие комментарии):

 

# cat /proc/1/maps look at init

08048000-0804e000 r-xp 00000000 03:01 64652 /sbin/init text

0804e000-0804f000 rw-p 00006000 03:01 64652 /sbin/init data

0804f000-08053000 rwxp 00000000 00:00 0 zero-mapped BSS

40000000-40015000 r-xp 00000000 03:01 96278 /lib/ld-2.3.2.so text

40015000-40016000 rw-p 00014000 03:01 96278 /lib/ld-2.3.2.so data

40016000-40017000 rw-p 00000000 00:00 0 BSS for ld.so

42000000-4212e000 r-xp 00000000 03:01 80290 /lib/tls/libc-2.3.2.so text

4212e000-42131000 rw-p 0012e000 03:01 80290 /lib/tls/libc-2.3.2.so data

42131000-42133000 rw-p 00000000 00:00 0 BSS for libc

bffff000-c0000000 rwxp 00000000 00:00 0 Stack segment

ffffe000-fffff000 ---p 00000000 00:00 0 vsyscall page

 

# rsh wolf cat /proc/self/maps #### x86-64 (trimmed)

00400000-00405000 r-xp 00000000 03:01 1596291 /bin/cat text

00504000-00505000 rw-p 00004000 03:01 1596291 /bin/cat data

00505000-00526000 rwxp 00505000 00:00 0 bss

3252200000-3252214000 r-xp 00000000 03:01 1237890 /lib64/ld-2.3.3.so

3252300000-3252301000 r--p 00100000 03:01 1237890 /lib64/ld-2.3.3.so

3252301000-3252302000 rw-p 00101000 03:01 1237890 /lib64/ld-2.3.3.so

7fbfffe000-7fc0000000 rw-p 7fbfffe000 00:00 0 stack

ffffffffff600000-ffffffffffe00000 ---p 00000000 00:00 0 vsyscall

 

Поля в каждой строке:

 

start-end perm offset major:minor inode image

 

Каждое поле в /proc/*/maps (за исключением имени отображения) соответствует полю в структуре vm_area_struct:

 

start

end

Начало и окончание виртуальных адресов для этой области памяти.

 

perm

Битовая маска с разрешениями для области памяти на чтение, запись и исполнение. Это поле описывает, что процессу разрешено делать со страницами, которые принадлежат этой области. Последний символ в поле - это либо p для "закрытых" (“private”), или s для "общих" (“shared”).

 

offset

Где начинается область памяти в файле, с которым она связана. Смещение 0 означает, что начало области памяти соответствует началу файла.

 

major

minor

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

 

inode

Номер inode отображённого файла.

 

image

Имя файла (обычно это исполняемый файл), который был отображён.







Date: 2015-07-01; view: 457; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.012 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию