Linux内核设计与实现浅谈(2)-内存管理

linux内存管理是个很大的概念,我也没有能力把它完整的表述清楚,只是为了记录一下我自己学习时对一些概念的理解;

1.什么是物理内存?

物理内存就是我们计算机的真实内存,换言之,你的内存条写的多少,你的物理内存就是多少;

2.什么是虚拟内存?

虚拟内存就是虚拟的内存,好吧,是有点废话哈,虚拟内存仅仅是一个概念,只在逻辑上存在,它并不能存储任何数据,但是它却有很大的作用,包括对内存访问的保护,使每个进程可以独享计算机所有的内存资源;简单理解就是,你的内存条上的内存被每一个进程所共享,物理内存就好比酒店,每个人都可以用,但是,你用过之后,会有专门的人来打扫干净,以供其他人再次使用,这里的人就代表了进程,打扫的工作就是由操作系统来干了,当然,其中的内部原理并不像如此简单,可能这家酒店你整个人并不能完全住进去(进程的数据并不是一次性全部拷贝到内存,一次仅拷贝一部分),还有可能你是这家酒店的会员,当你离开时,酒店并不会把你的东西扔掉,它可能会换一个地方帮你保存起来,以便你下次再次来的时候,可以直接去使用(进程的时间片转完之后,进程的数据会被丢到交换空间swap中,当再次轮到他执行时,直接从swap中读到内存中);虚拟内存就是起这个作用,具体的实现也就是通过mmu(内存管理单元)存储的页表来映射虚拟内存的地址和物理空间的关系,虚拟内存上的地址时连续的,所以获得它也会很容易,映射关系又存好了,再找物理内存的地址就简单了,可以把页表就想像成一个函数,它接受虚拟空间地址(线性地址),返回值就是物理空间地址(物理地址);当然,其中过程却也不仅仅如此简单,考虑的事情要多着呢;

3.什么是页?页表?页面?页框?

这几个概念我曾也一脸懵逼,我画个图就好理解了;


这是我个人的理解,也不知道对不对,欢迎批评指正;

4.什么是TLB?

这里还有一个TLB(转换检测缓冲区)没有画出来,TLB的作用是为了解决页表存储的东西太多,不好找,就把经常使用的映射关系在TLB中缓存一份,这样就可以先在TLB找,找不到的话,再到页表找,TLB也是一个硬件,真实存在的;

5.什么是分段?

首先强调一点,linux虽然有分段机制,但是用的不多,但是也很重要;段式内存管理,就是将内存分成段,每个段的起始地址就是段基地址。地址映射的时候,由逻辑地址加上段基地址而得到物理地址。纯粹的段式内存管理的缺点很明显,就是灵活性和效率比较差。首先是段的长度是可变的,这给内存的换入换出带来诸多不便,如何选择一个段的长度是一个棘手的问题;其次进程在运行过程中,可能会扩充地址空间,这就要增加段,从而造成进程的地址空间由很多小段构成,在进程运行过程中,访问不同的段时,就需要频繁切换段基地址;再一点,段式内存管理如果有太多的小段,在释放段的时候,会造成外部碎片。

关于内存管理的一些基本概念就说到这,我理解的程度也不深,很难往深了说,至于那些页面置换的算法,二级页面,具体缺页中断怎么处理的,涉及到代码的部分我都说不清,仅仅记录自己的理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值