第60章 メモリー記述子( mm_struct )

 メモリー記述子は一つのプロセスに一つあるメモリー空間を記述してくれるオブジェクトです。

 まあ考え方としては各プロセスによってアドレス空間が異なるので、それを区別してアクセスするためにあるぐらいの理解をしてもらえば十分だと思います。

// /usr/src/linux-headers-4.18.16-041816-generic/include/linux/mm_types.h
340 struct mm_struct {
341   struct vm_area_struct *mmap;    /* list of VMAs */
342   struct rb_root mm_rb;
343   u64 vmacache_seqnum;                   /* per-thread vmacache */
344 #ifdef CONFIG_MMU
345   unsigned long (*get_unmapped_area) (struct file *filp,
346         unsigned long addr, unsigned long len,
347         unsigned long pgoff, unsigned long flags);
348 #endif
349   unsigned long mmap_base;    /* base of mmap area */
350   unsigned long mmap_legacy_base;         /* base of mmap area in bottom-up alloc
351 #ifdef CONFIG_HAVE_ARCH_COMPAT_MMAP_BASES
352   /* Base adresses for compatible mmap() */
353   unsigned long mmap_compat_base;
354   unsigned long mmap_compat_legacy_base;
355 #endif
356   unsigned long task_size;    /* size of task vm space */
357   unsigned long highest_vm_end;   /* highest vma end address */
358   pgd_t * pgd;

 もっとも割愛しているんで、もうちょっと長いんですが…

 一番抑えておきたいのは mmap ポインターです。

341   struct vm_area_struct *mmap;    /* list of VMAs */

 このように仮想メモリー領域 ( vm_area_struct ) のリストを指すポインターとなっています。

 仮想メモリー領域は次の項目で説明しますね。

Copyright 2018-2019, by Masaki Komatsu