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
