进程地址空间(虚拟内存)

发布时间 2023-08-13 10:50:38作者: stu--wy
  • 进程地址空间,进程虚拟内存的管理。某个进程地址空间的全部区域可以以红黑树+链表的形式存放。
  • 内核线程没有mm_struct没有进程地址空间,没有相关的内存描述符,这也是内核线程的真实含义--它们没有用户上下文。当一个进程被调度时,该进程的mm域指向的地址空间被装载到内存,PCB中的active_mm 会更新,当一个内核线程被调度时,内核发现它的mm为空,就会保留前一个进程的地址空间,更新active_mm。
  • 每个相关的内存区域都对应一个vm_area_struct 结构体。vm_area_struct 结构体描述了指定地址空间内连续区间上的一个独立内存范围。
  • 内核使用do_mmap()创建一个新的线形地址空间,从空闲的虚拟内存中拿一块到某个进程的地址空间。do_mummap()删除一块vm_area_struct放回空闲虚拟内存中,还内存的时候肯定会释放和物理内存相关的页表项。组织虚拟内存可以用链表等数据结构。
  • 内核通过mm_struct 表示进程地址空间,内核通过vm_area_struct表示该空间的内存区域,内核通过do_mmap do_mummap 建立和撤销这些内存区域。进程地址空间的描述性数据结构的内存都是由内核动态分配的。
  • 内存管理一定是先做物理内存管理,然后才是虚拟内存管理,因为管理虚拟内存所需要的数据结构建立在物理内存管理的基础上。