Linux内存管理

(1)物理内存管理
struct page结构体,每个结构体代表一个页
mem_map是一个全局变量,他是一个指针,指向page结构体数组。系统初始化,根据实际物理内存的大小建立起数组,也就是mem_map是物理内存的仓库。
仓库里面的物理页面划分为zone管理区。zone管理区维护一个数组,数组的每个元素是一个空闲队列,维护连续的页面1,2,4.。。。。。2^10,2^11。zone结构体有offect成员记录其实页面号。
页表项高20位用做下标就可以找到物理页对应的page结构体,硬件方面来看,就是物理页的起始地址

伙伴系统
zone区域中的链表,如果一个内存区被分配了一般,另一半会加入合适的链表,释放的话,两个连续空闲的,如果是伙伴,就会合并

(2)虚拟内存管理
没有统一仓库
物理内存说明:有什么,从供应方来说的
每个进程有一个mm_struct结构体,记录代码段数据段堆栈。。。。。的起始地址和结束地址
mm_struct管理vma,有缓存,记录最近一次访问的区间,如果给个虚拟地址,没在这个区间,就要去搜索
这个结构体里面的数据段已经初始化的《深入Linux内核架构》


vm_area_struct结构体,是一个虚拟内存区间。vm_start vm_end左闭右开。同一区间权限相同,属于同一个区间的访问权限相同。
属于同一个进程的区间会以链表进行管理。给一个虚拟地址,找出所在的区间是频繁的操作,所以还会用红黑树来管理,找vma的函数是find_vma。(情形分析写的是AVL树,这个再确定一下)
两种情况区间会和磁盘***,页面换出,或者mmap映射把磁盘文件映射到进程地址空间


缺页异常的情况:
1.映射没建立
2.相应的物理页面不在内存
3.访问方式与规定的访问方式不符
产生异常,i386会把导致异常的线性地址放在cr2寄存器。



堆的管理
brk系统调用,堆的结束地址必须按页对齐

全部评论

相关推荐

若怜君欢:驾驶证去掉吧,PPT啥的也去掉,本硕课程去掉,导师和研究方向去掉;加入本硕排名(好才写);技能栏加入你会的那些控制算法和滤波算法,这个比你会啥啥啥软件更有用;获奖写上去,奖学金啊,有没有专利啊之类的 电机和硬件这一块,属于传统制造业,制造业实习并不多。多投一些攒攒经验,有实习最好,没有也不需要焦虑(制造业实习其实除了转正,没多大用处) 最后,划重点,等秋招开始后,把你所有社交软件都发一份简历上去,并经常更新,找人内推你!
点赞 评论 收藏
分享
重生我想学测开:嵌入式的问题,我准备入行京东外卖了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务