菜鸟学内存后感悟篇1

由于后续的学习需求,我需要提前预习一些有关内存的知识,在这里,我主要是想理清楚预习过程中所收获的知识以及我遇到的问题以待后续解决(有疑惑的地方我会用彩色标出),其中内容不可作为学习参考,仅限于和我一样的菜鸟可以大致浏览后与我交流想法,如有不对的地方,还请各路大神不吝指正。
首先,我想从CPU谈起,众所周知,cpu是一台计算机的核心,CPU像是一台计算机的大脑一样,作为最高级的指挥官来处理来自于计算机其他部分的信息,cpu与外部进行信息传递的公用通道就是总线,CPU的三大总线分别为:控制总线,数据总线,以及地址总线。
引用学长的一句话,其中的地址总线决定了CPU能向外部输出的地址宽度, 也就是CPU的寻址能力 .,在这里我说一下cpu的寻址范围如何计算以及要注意的点,如果CPU的地址总线宽度为322位,那么它的寻址范围应该为2的32次方等于4GB,那么为什么计算是232/1024/1024/1024而不是232/8/1024/1024/1024呢,这是因为CPU的寻址宽度是32位,意思是有32跟线来表示地址,一个地址对应了一个内存的存储单元,而存储单元的最小单位是1B,故而会有如上的计算方式,这个小问题在初期,肯定会有很多像我一样的菜鸟遇到。
由上文,终于提出了今天的主角———内存!
前面提到,CPU所使用的数据都是来自于内存(通过地址来访问内存),不论是软件程序还是文件数据都必须读入内存以后cpu才能利用,故而可以将内存比作脑袋中正在被思考的数据的区块。
那么问题来了,我们知道,一个系统中的进程是与其他的进程共享CPU和主存资源的,那么假设随着进程数目的增长,随之对CPU的需求也在增长,不用说肯定需要更多的内存,当进程的数目较少时,可能还可以正常运行,但是当进程的数目非常多呢?这个时候他们中的一些将面临无法运行的尴尬状况,而且此时内存也很容易被破坏,如果内存出了问题,那么就可能导致多个进程同时凉凉了!
为了解决这个问题,为了更加有效的管理内存并且少出错,现代系统提供了一种对主存的抽象概念,即虚拟内存.
虚拟内存的三个重要能力(摘自深入理解计算机系统,我也一知半解,没太理解):
1. 它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效的使用了主存储。
2. 它为每个进程提供了一致的地址空间,从而简化了内存管理。
3. 它保护了每个进程的地址空间不被其他进程破坏。
上文提到,CPU通过地址来访问内存中的单元,地址又有虚拟地址(va)和物理地址(pa)之分。
物理地址:如果CPU没有MMU(内存管理单元),或者有但并未启动,CPU核在取指令或者访问内存时发出的地址将直接传到CPU芯片的外部地址引脚上,直接被内存芯片接收,这称为物理地址。
虚拟地址:如果CPU启用了MMU,CPU核发出的地址将被MMU捕获,从CPU到MMU的地址称为虚拟地址,而MMU将这个地址翻译成另一个地址发到CPU芯片的外部地址引脚上,也就是将虚拟地址映射成物理地址。
地址空间是一个非负整数地址的有序集合,分为虚拟地址空间和物理地址空间;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值