Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
$B%a%b%j4IM}!"%"%I%l%96u4V!"%Z!<%8%F!<%V%k(B
[go: Go Back, main page]

$B%a%b%j4IM}!"%"%I%l%96u4V!"%Z!<%8%F!<%V%k(B

					2010$BG/(B02$B7n(B02$BF|(B
$B>pJs2J3XN`(B $B%*%Z%l!<%F%#%s%0%7%9%F%`(B II

                                       $BC^GHBg3X(B $B%7%9%F%`>pJs9)3X8&5f2J(B 
                                       $B%3%s%T%e!<%?%5%$%(%s%9@l96(B, $BEE;R!&>pJs9)3X7O(B
                                       $B?7>k(B $BLw(B
                                       <yas@is.tsukuba.ac.jp>

$B$3$N%Z!<%8$O!" http://www.coins.tsukuba.ac.jp/~yas/coins/literacy-2009/2010-02-02
$B$"$k$$$O!" http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/

$B"#O"Mm;v9`(B

$BB46HM=Dj$N#4G/@8$KBP$9$kFCJLA]

$B"#:#F|$NBg;v$JOC(B

$B"#A02s;qNA(B

$B"!(Bkmem_cache_create()

$B0u:~;qNA$O!"@h=5G[I[:Q$_!#(B

$B"#%f!<%6!&%W%m%;%9$N%a%b%j(B

$B%+!<%M%kFb$N%a%b%j3dEv$F(B $B%f!<%66u4V$N%a%b%j3dEv$F(B

$B"!%"%I%l%96u4V(B

$BMxMQA[%"%I%l%9(B $B$r;H$C$F5!3#8lL?Na$rFI$_=P$7$?$j!"%G!<%?$rFI$_=q$-$9$k!#(B (x86 $B$G$O!"%;%0%a%s%F!<%7%g%s$b;H$($k$N$G!"@~7A$G$O$J$$%"%I%l%96u4V$b2D(B $BG=$@$,!"(BLinux $B$G$O!"B>$N%"!<%-%F%/%A%c$H$N7s$M9g$$$b$"$j!"@~7A$J6u4V$r(B $B;H$&!#(B)

$B@~7A$J%"%I%l%96u4V$O!"%a%b%j!&%(%j%"(B(memory area)($B$^$?$O!"(Bmemory resion$B!"(Bmemory interval)$B$KJ,3d$5$l$k!#(B

$B"!(Btask_struct$B9=B$BN$H(Bmm_struct$B9=B$BN(B

$B%+!<%M%kFb$G$O!"%W%m%;%9$N%a%b%j$O!"
  • $B9=B$BN(B task_struct: 1$B%W%m%;%9$G(B1$B8D!#(B
  • $B9=B$BN(B mm_struct: $BIaDL!"(B1$B%W%m%;%9$G(B1$B8D!#(B($BJ#?t%W%m%;%9$G6&M-$5$l$F$$$k$3$H$,$"$k!#(B)
  • $B9=B$BN(B vm_area: 1$B%W%m%;%9$GJ#?t!#(B
    include/linux/sched.h
    1166: struct task_struct {
    ...
    1221:         struct mm_struct *mm, *active_mm;
    ...
    1483: };
    
    tast_struct $B$N(B mm $B%U%#!<%k%I(B

    task_struct$B!

    $B?^(B? $B%W%m%;%94XO"$N%a%b%j$N9=B$BN(B

    $B"!(Bmm_struct$B9=B$BN(B

    include/linux/mm_types.h
     202: struct mm_struct {
     203:         struct vm_area_struct * mmap;           /* list of VMAs */
     204:         struct rb_root mm_rb;
     205:         struct vm_area_struct * mmap_cache;     /* last find_vma result */
    ...
     214:         pgd_t * pgd;
     215:         atomic_t mm_users;                      /* How many users with user space? */
     216:         atomic_t mm_count;                      /* How many references to "struct mm_struct" (users count as 1) */
     217:         int map_count;                          /* number of VMAs */
     218:         struct rw_semaphore mmap_sem;
     219:         spinlock_t page_table_lock;             /* Protects page tables and some counters */
     220: 
     221:         struct list_head mmlist;                /* List of maybe swapped mm's.  These are globally strung
     222:                                                  * together off init_mm.mmlist, and are protected
     223:                                                  * by mmlist_lock
     224:                                                  */
    ...
     237:         unsigned long start_code, end_code, start_data, end_data;
     238:         unsigned long start_brk, brk, start_stack;
     239:         unsigned long arg_start, arg_end, env_start, env_end;
    ...
     289: };
    

    $B"!(Bvm_area_struct$B9=B$BN(B

    
     134: struct vm_area_struct {
     135:         struct mm_struct * vm_mm;       /* The address space we belong to. */
     136:         unsigned long vm_start;         /* Our start address within vm_mm. */
     137:         unsigned long vm_end;           /* The first byte after our end address
     138:                                            within vm_mm. */
    ...
     141:         struct vm_area_struct *vm_next;
    ...
     144:         unsigned long vm_flags;         /* Flags, see mm.h. */
    ...
     146:         struct rb_node vm_rb;
    ...
     174:         struct vm_operations_struct * vm_ops;
    ...
     177:         unsigned long vm_pgoff;         /* Offset (within vm_file) in PAGE_SIZE
     178:                                            units, *not* PAGE_CACHE_SIZE */
     179:         struct file * vm_file;          /* File we map to (can be NULL). */
     180:         void * vm_private_data;         /* was vm_pte (shared mem) */
    ...
     189: };
    
    vm_area_struct$B$N(Bvm_flags$B$NCM(B
    $B%U%i%0(B$B@bL@(B
    VM_READ $BFI$_9~$_2D(B
    VM_WRITE $B=q$-9~$_2D(B
    VM_EXEC $B
    VM_SHARED $B6&M-$5$l$F$$$k(B
    VM_GROWSDOWN $B%"%I%l%9$,>.$5$$J}$K?-$S$k(B
    VM_GROWSUP $B%"%I%l%9$,Bg$-$$J}$K?-$S$k(B
    VM_DENYWRITE $B=q$-9~$_IT2D!#(B
    VM_EXECUTABLE $B
    VM_LOCKED $B%m%C%/$5$l$F$$$k!#(B
    VM_DONTCOPY $B%3%T!
    VM_DONTEXPAND $B3HD%IT2D!#(B

    $B"!%W%m%;%9$N%"%I%l%96u4V$N%l%$%"%&%H(B($B

    $B%W%m%;%9$NELF $B7A<0(B(2009$BG/(B12$B7n(B1$BF|$N;qNA;2>H(B)$B!#(B
    $B=EMW$J%;%/%7%g%s(B
    .text $B5!3#8lL?Na(B
    .data $B=i4|2=$5$l$?Bg0hJQ?t$d(Bstatic$BJQ?t(B
    .rodata (.data$B$KCV$/$Y$-$b$N$N$&$A(B)$BFI$_FI$_@lMQ$N$b$N(B)
    .bss $B=i4|2=$5$l$J$$Bg0hJQ?t$d(Bstatic$BJQ?t(B(OS$B$,(B0$B$K=i4|2=(B)
    .symtab $B%7%s%\%k!&%F!<%V%k(B
    .strtab $BJ8;zNs$N%F!<%V%k!#%7%s%\%k!&%F!<%V%k$NFbMF$NJ8;zNs!#(B
    $B$3$l$,!"%a%b%j$K%^%C%W$5$l$k$H!"
  • $B%F%-%9%H(B: $B5!3#8l$rCV$/!#(Bexec $BB0@-$H(B read $BB0@-$r$D$1$k!#(Bmm_struct $B$N(B start_code $B$H(B end_code $B$,!"(B $B3+;OHVCO$H=*N;HVCO$rJ];}$9$k!#(B
  • $B%G!<%?(B: read/read $BB0@-$r$D$1$k!#6&M-IT2D!#(Bmm_struct $B$N(B start_data $B$H(B end_data $B$,!"(B $B3+;OHVCO$H=*N;HVCO$rJ];}$9$k!#(B $B=i4|2=$5$l$?%G!<%?$O!"(BELF $B%U%!%$%k$+$iFI$_9~$^$l$k!#(B $B=i4|2=$5$l$F$$$J$$%G!<%?$O!"(BOS $B$,(B 0 $B$G=i4|2=$9$k!#(B
  • $B%R!<%W(B: malloc() $B$N86;q(B($B$N#1$D(B)$B!#(Bbrk() $B$d(B sbrk() $B%7%9%F%`!&%3!<%k$GBg$-$5$,JQ99$5$l$k!#(B $BHVCO$,Bg$-$$J}$K?-$S$k!#(B mm_struct $B$N(B start_brk $B$H(B brk $B$,3+;OHVCO$H=*N;HVCO$rJ];}$9$k!#(B
  • $B%9%?%C%/(B: $B4X?t8F$S=P$7$N%9%?%C%/$,CV$+$l$k!#%9%?%C%/!&%]%$%s%?$,;X$9!#(B $B6I=jJQ?t$d4X?t$NLa$jHVCO$,CV$+$l$k!#(B

    mm_struct$B!

    $B?^(B? $B%W%m%;%9$N%"%I%l%96u4V(B

    $B"!%W%m%;%9$N%"%I%l%96u4V$N%l%$%"%&%H(B($BF0E*%j%s%/%i%$%V%i%j(B)

    $B$=$NB>$K!"F0E*%j%s%/!&%i%$%V%i%j$K$h$j%a%b%j!&%(%j%"$,:n$i$l$k!#(B
    % echo $$ [$B
    29068
    % ls /proc/$$ [$B
    attr     coredump_filter  exe  limits    mem         root   statm   wchan
    auxv     cwd              fd   loginuid  mounts      smaps  status
    cmdline  environ          io   maps      mountstats  stat   task
    % head /proc/$$/maps [$B
    00111000-00115000 r-xp 00000000 08:02 8454184    /lib/libnss_dns-2.3.4.so
    00115000-00116000 r-xp 00003000 08:02 8454184    /lib/libnss_dns-2.3.4.so
    00116000-00117000 rwxp 00004000 08:02 8454184    /lib/libnss_dns-2.3.4.so
    00117000-0011a000 r-xp 00000000 08:02 2332418    /usr/lib/gconv/EUC-JP.so
    0011a000-0011c000 rwxp 00002000 08:02 2332418    /usr/lib/gconv/EUC-JP.so
    0024a000-00259000 r-xp 00000000 08:02 8454169    /lib/libresolv-2.3.4.so
    00259000-0025a000 r-xp 0000f000 08:02 8454169    /lib/libresolv-2.3.4.so
    0025a000-0025b000 rwxp 00010000 08:02 8454169    /lib/libresolv-2.3.4.so
    0025b000-0025d000 rwxp 0025b000 00:00 0 
    00280000-00289000 r-xp 00000000 08:02 8454260    /lib/libnss_files-2.3.4.so
    % tail /proc/$$/maps [$B
    08048000-0808f000 r-xp 00000000 08:02 4685902    /bin/tcsh
    0808f000-08093000 rw-p 00047000 08:02 4685902    /bin/tcsh
    08093000-080c3000 rw-p 08093000 00:00 0 
    086c5000-08790000 rw-p 086c5000 00:00 0 
    b7c69000-b7d4c000 r--p 01bba000 08:02 147457     /usr/lib/locale/locale-archive
    b7d4c000-b7f4c000 r--p 00000000 08:02 147457     /usr/lib/locale/locale-archive
    b7f4c000-b7f4e000 rw-p b7f4c000 00:00 0 
    b7f5d000-b7f63000 r--s 00000000 08:02 2326613    /usr/lib/gconv/gconv-modules.cache
    bfe79000-c0000000 rw-p bfe79000 00:00 0 
    ffffe000-fffff000 r-xp 00000000 00:00 0 
    % wc /proc/$$/maps [$B
    45 261 2975 /proc/29068/maps
    % []
    
    /proc/PID/maps $B$N%U%#!<%k%I$N0UL#(B
    1. $B%a%b%j!&%;%0%a%s%H$N3+;OHVCO$H=*N;HVCO!#(B
    2. $B%"%/%;%95v2D!#(Br(read), w(write), x(executable), p(private), s(shared)
    3. $B%V%m%C%/!&%G%P%$%9$N%a%8%c! % ls -l /dev | egrep '8,.*2' [$B brw------- 1 root root 8, 2 Jan 5 18:38 root brw-rw---- 1 root disk 8, 2 Jan 5 18:38 sda2 % [] $B%G%P%$%9$K7k$S$D$$$F$$$J$$>l9g$K$O!"(B00:00 $B$K$J$k!#(B
    4. $B%U%!%$%k$N(Binode$BHV9f!#Nc!#(B
      % ls -l /lib/libnss_dns-2.3.4.so [$B
      -rwxr-xr-x  1 root root 22524 Jan 10  2009 /lib/libnss_dns-2.3.4.so
      % ls -li /lib/libnss_dns-2.3.4.so [$B
      8454184 -rwxr-xr-x  1 root root 22524 Jan 10  2009 /lib/libnss_dns-2.3.4.so
      % []
      
    5. $B%U%!%$%kL>!#(B

    $B"!2>A[%"%I%l%9$HJ*M}%"%I%l%9(B

    MMU $B$K$h$kJQ49J}K!$O!"%Z!<%8%F!<%V%k$KJ]B8$5$l$k!#(B

    CPU$B!

    $B?^(B? MMU$B$K$h$k2>A[%"%I%l%9$+$iJ*M}%"%I%l%9$X$NJQ49(B

    $B"!(B1$BCJ$N%Z!<%8!&%F!<%V%k(B

    $B2>A[%"%I%l%9$N9=@.$NNc!#(B1$B%Z!<%8$,(B4KB$B$G!"2>A[%"%I%l%9$,(B32$B%S%C%H$N;~!#(B

    32$B%S%C%H$N2A[%"%I%l%9(B">

    $B?^(B? 1$BCJ$N%Z!<%8%F!<%V%k(B

    $B%Z!<%8%F!<%V%k$O!" unsigned int page_table[0x100000]; unsigned long int physical_address( unsigned long int virtual v ) { p = v >> 12; q = v & 0xfff; return( page_table[p] + q ); }

    mm_struct$B!

    $B?^(B? 1$BCJ$N%Z!<%8%F!<%V%k(B

    page_table[] $B$O!"(B0x100000 $B8D(B == 1024 * 1024 $B8D(B == 1M $B8D$NMWAG$+$i$J$k!#(B 1$BMWAG$,(B 4 $B%P%$%H(B(32$B%S%C%H(B) $B$J$i!"(B4MB $B$N%a%b%j$,I,MW$K$J$k!#(B

    $B"!B?CJ$N%Z!<%8!&%F!<%V%k(B

    $B

    $B2>A[%"%I%l%9$N9=@.$NNc!#(B1$B%Z!<%8$,(B4KB$B!"2>A[%"%I%l%9$,(B32$B%S%C%H$N;~$NJ,3d(B $B$NNc(B($BB>$NJ,3dJ}K!$b9M$($i$l$k(B)

    • $B>e0L(B1$B%S%C%H(B-5$B%S%C%H(B: PGD$B$N%$%s%G%C%/%9(B(5$B%S%C%H(B)
    • $B>e0L(B5$B%S%C%H(B-10$B%S%C%H(B: PUD$B$N%$%s%G%C%/%9(B(5$B%S%C%H(B)
    • $B>e0L(B11$B%S%C%H(B-15$B%S%C%H(B: PMD$B$N%$%s%G%C%/%9(B(5$B%S%C%H(B)
    • $B>e0L(B16$B%S%C%H(B-20$B%S%C%H(B: pt$B$N%$%s%G%C%/%9(B(5$B%S%C%H(B)
    • $B2<0L(B12$B%S%C%H(B: $B%Z!<%8Fb%*%U%;%C%H(B(12$B%S%C%H(B)

    5+5+5+5+12

    $B?^(B? $B2>A[%"%I%l%9$N(B4$B$D$NItJ,$X$NJ,3dNc(B

    mm_struct$B!

    $B?^(B? 4$BCJ$N%Z!<%8%F!<%V%k(B

    • PGD: Page Global Directory
    • PUD: Page Upper Directory
    • PMD: Page Middle Directory
    • Page Table Entry$B$NG[Ns(B (pte $B$NG[Ns(B)
    unsigned int pgd[0x20];
    
    unsigned long int physical_address( unsigned long int virtual v ) {
        p = v >> (32-5) ;
        q = (v >> (32-10)) & 0x1f;
        r = (v >> (32-15)) & 0x1f;
        s = (v >> (32-20)) & 0x1f;
        t = v & 0xfff;
        unsigned int *pud = pgd[p];
        unsigned int *pmd = pud[q];
        unsigned int *pte = pmd[r];
        return( pte[s] + t );
    }
    

    $B"!(Bx86$B$N%Z!<%8!&%F!<%V%k(B

    x86 $B$G$O!"=>Mh!"(B2$BCJ$N%Z!<%8%F!<%V%k$rMQ$$$F$$$k!#
  • p $B$,(B 10 $B%S%C%H(B
  • q $B$,(B 0 $B%S%C%H(B
  • r $B$,(B 0 $B%S%C%H(B
  • s $B$,(B 10 $B%S%C%H(B
  • t $B$,(B 12 $B%S%C%H(B x86 $B$G(B PAE$B!J(BPhysical Address Extension)$B$,M-8z$N;~$K$O!"A[%"%I%l%9$O!"(B32$B%S%C%H$G$"$k$,!"J*M}%"%I%l%9$O!"(B36$B%S%C%H$^$G;H$($k$h$&$K$J$k!#(B

    $B"#%/%$%:(B7 $B%a%b%j4IM}!"%"%I%l%96u4V!"%Z!<%8%F!<%V%k(B

    $B!zLdBj(B(701) /proc/PID/maps

    /proc/PID/maps$B$NFbMF$O!"$3$N%Z!<%8$NCf$G$I$N9=B$BN$N%j%9%H$rI=<($7$?$b$N$H(B $B9M$($i$l$k$+!#
  • $B%j%9%H$N5/E@$rJ];}$7$F$$$k9=B$BN$NL>A0$H%U%#!<%k%I(B
  • $B%j%9%H$K$D$J$,$l$F$$$k9=B$BN$NL>A0(B

    $B!zLdBj(B(702) 1$BCJ$N%Z!<%8%F!<%V%k(B

    $B2>A[%"%I%l%9$N%5%$%:$,(B32$B%S%C%H!"(B1$B%Z!<%8$NBg$-$5$,(B4KB$B$H$9$k!#(B $B
  • 0x00000000 $B$+$i(B 0x00000fff $B$^$G(B
  • 0x00001000 $B$+$i(B 0x00001fff $B$^$G(B
  • 0xfffff000 $B$+$i(B 0xffffffff $B$^$G(B 1$BCJ$N%Z!<%8%F!<%V%k$rMQ$$$F$$$?>l9g!"%Z!<%8%F!<%V%k$KI,MW$J%a%b%j$O2?%P(B $B%$%H$K$J$k$+!#%Z!<%8%F!<%V%k$N(B1$B%(%s%H%j$N%P%$%H$O!"(B4$B%P%$%H$H$9$k!#(B

    $B!zLdBj(B(703) 2$BCJ$N%Z!<%8%F!<%V%k(B

    $BLdBj(B(702) $B$G!"
  • $B>e0L(B10$B%S%C%H(B
  • $B>e0L(B11$B%S%C%H(B-20$B%S%C%H(B $B$3$N;~!"%Z!<%8%F!<%V%k$KI,MW$J%a%b%j$O2?%P%$%H$K$J$k$+!#%Z!<%8%F!<%V%k(B $B$N(B1$B%(%s%H%j$N%P%$%H$O!">e0L$N%Z!<%8%F!<%V%k$b2<0L$N%Z!<%8%F!<%V%k$b(B4$B%P(B $B%$%H$H$9$k!#(B
    Last updated: 2010/02/02 03:48:53
    Yasushi Shinjo / <yas@is.tsukuba.ac.jp>