2014-07-12 3 views
2

Я знаю из моего чтения книги концепций ОС, что процесс в памяти состоит из: текстового раздела, раздела данных, стека и кучи.Общая память в адресном пространстве процесса?

Но я спрашиваю, когда процесс запрашивает ядро ​​для создания сегмента разделяемой памяти при создании этого раздела? в куче?


Другой вопрос Ядро знает информацию о каждом процессе в системе в формате печатной платы и сохранить эту печатную плату в процессе стола.

Вопрос заключается в следующем: список рабочих таблиц с двойной связью?

+1

Да, это вдвойне связанный список (STRUCT LIST_HEAD задачи;) Но планировщик CFS использует RB-дерево для поддержания runqueue – Sasi

ответ

6

Я полагаю, что ваш вопрос касается расположения памяти процесса. Если это так, Linux и Solaris процессы имеют следующие разделы:

Text 
Data 
BSS 
Heap 
MMS (memory mapping segment) 
Stack 

Массив памяти между Heap и стека, так называемый Memory Mapping сегмента, отвечает за общий отображение памяти. Да и не только. Общие библиотеки, открытые файлы также отображаются в этот раздел памяти.

Вы можете изучить расположение памяти процесса на Linux с помощью ртара команды или чтение карты файла процесс /Proc // отображает. Вот фрагмент макета памяти процесса DB2 рассмотренного на машине Linux с помощью утилиты ртар (посмотреть на стек и Шмид, общей памяти ID, записи):

0000000000400000  52K r-x-- /opt/ibm/db2/bin/db2vend 
000000000060d000  4K rwx-- /opt/ibm/db2/bin/db2vend 
000000000c33e000 132K rwx-- [ anon ] 
0000000200000000 35520K rwxs- [ shmid=0x57a58007 ] 
000000323f200000 112K r-x-- /lib64/ld-2.5.so 
and more more more shared libraries 
00002b55bb45b000  4K r-x-- /lib64/libnss_files-2.5.so 
00002b55bb45c000  4K rwx-- /lib64/libnss_files-2.5.so 
00002b55bb45d000 39252K rwxs- [ shmid=0x57a50006 ] 
00002b55bdab2000 1152K rwx-- [ anon ] 
00007ffffaf35000  84K rwx-- [ stack ] 
ffffffffff600000 8192K ----- [ anon ] 
+0

Перспектива для такого информационного ответа! –

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