メモリー記述子は一つのプロセスに一つあるメモリー空間を記述してくれるオブジェクトです。
まあ考え方としては各プロセスによってアドレス空間が異なるので、それを区別してアクセスするためにあるぐらいの理解をしてもらえば十分だと思います。
// /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