On 09.08.2010 15:43, Selman Rasit Cesur wrote:
> Ayni virtual
> address'e B process'i ulasmak istediginde cevrilen adresler ayni
> olmuyor.

Dediginiz gibi her process'in kendi address space'i var ondan.

> Bu cok mantikli fakat bunun nasil yapildigini bir turlu
> bulamadim.

Kernel her process'in address space'ini mm_struct olarak tutar.  Yani
her process'in kendi mm_struct'i var.  Bu struct <linux/mm_types.h> de
satir 222 gibi tanimlanir (yanlarinda ne ise yaradiklarini belirten
comment'ler de var).  Fork sirasinda copy_mm() fonksiyonu ile mm_struct
kopyalanir (parent'dan child'a).  Istisna olarak bu kopyalama sirasinda
CLONE_VM flag'i verirseniz mm_struct kopyalanmaz.  Sadece child'in
mm_struct'i parent'in mm_struct'ina point eder.  Yani parent ile ayni
hafizayi paylasan bir process yaratmis olursunuz (yani thread yarattiniz).

mm_struct'daki vm_area_struct process'in hafiza alanlarini gosterir
(virtual memory areas).  Bu alanlar mmap() ile yaratilip munmap() ile
yok edilir ve gene mm_struct'daki mmap veya mm_rb ile erisilebilir.
Ilki linked list, ikincisi reb-black binary tree.   Hangisi isinize
gelirse onu kullanirsiniz.

Process'in bu address space'ine /proc/<pid>/maps ile ulasabilirsiniz:

# cat /proc/1/maps
00400000-00409000 r-xp 00000000 08:03 7193684
 /sbin/init
00608000-00609000 r--p 00008000 08:03 7193684
 /sbin/init
00609000-0060a000 rw-p 00009000 08:03 7193684
 /sbin/init
024fd000-0251e000 rw-p 00000000 00:00 0
 [heap]
7f469f610000-7f469f760000 r-xp 00000000 08:03 7750332
 /lib64/libc-2.11.2.so
7f469f760000-7f469f95f000 ---p 00150000 08:03 7750332
 /lib64/libc-2.11.2.so
[...]

Sirasi ile "start-end permissions offset node inode ve dosya" bilgileri.
 pmap de ayni bilgiyi verir.

Daha fazla bilgi icin google ve read the source :)

-- 
Eray
_______________________________________________
Linux E-Posta Listesi
[email protected]
Liste kurallari: http://liste.linux.org.tr/kurallar.php

Bu Listede neden bulunduğunuzu bilmiyorsanız veya artık bu listeden gelen 
e-postaları almak istemiyorsanız aşağıdaki bağlantı adresini kullanarak 1 
dakika içinde üyeliğinizi sonlandırabilirsiniz.
https://liste.linux.org.tr/mailman/listinfo/linux

Cevap