- 5
- 0
- 约4.35千字
- 约 24页
- 2018-10-14 发布于浙江
- 举报
Linux进程地址空间管理.ppt
Virtual Memory Areas 与进程地址空间相关的数据结构 mm_struct * 触发进程空间的内存动态分配的操作 进程创建:fork,execv,clone 扩充/紧缩堆内存:brk, sbrk 创建文件内存映射或匿名映射:mmap, mremap, munmap 创建进程间共享内存:shmat, shmdt 当用户堆栈不够用的时候,需要扩展堆栈 上述操作都可能引起线性区数据结构的创建和删除。 * 如何实现进程地址空间动态内存分配 查找进程虚拟地址空间是否存在大小合适的空闲区域。 如果有,则创建相应的线性区描述符vm_area_struct,并将其插入链表mmap 线性区创建成功后,立即返回(注意,没有分配相应的物理页框,也没有修改页表!) 当用户程序访问刚刚动态分配的内存时,会触发缺页异常。 在缺页异常的中断服务程序中按“一次一页”的方式分配物理页框,并修改页表。 * Linux OS analysis */24 增加或删除一个线性区 处理线性区的函数 内核进程需要对一个线性区进行处理,比如确定一个给定线性地址是否存在于一个线性地址空间中 find_vma(),查找一个线性地址所属的线性区 两个参数:进程内存描述符的地址mm和线性地址addr find_vma_intersection(),查找一个与给定地址区间重叠的线性区 get_unmapped_area(
原创力文档

文档评论(0)