目录
- 计算机体系结构
- 内存的层次结构
- 操作系统在内存中的目标
- 地址空间&地址生成
- 逻辑地址空间的生成
- 地址空间的定义
- 操作系统的作用
正文
计算机体系结构
计算机体系结构分为三大块内容。如图所示
CPU:CPU完成了整个程序、软件的控制
内存:放置程序的代码和它所处理的数据
设备:各种外设,配合执行一系列额外的工作(比如保存数据到硬盘中,需要鼠标点点点)。输入输出(IO操作)
内存的层次结构
内存层级结构:就是CPU要访问的指令或者数据他所在的位置在什么地方。从上到下,CPU可以访问的数据是寄存器和闪存。这两部分是位于CPU芯片内部的,操作系统不能对其直接管理。他们速度很快容量很小,所以访问的数据有限。为此我们需要主存(物理内存),主存需要存放OS本身和OS运行的代码,主存的容量比寄存器和闪存大很多,速度相对比较慢。主存一掉电,其中的数据就会丢失,而且主存容量仍然小于硬盘容量,所以我们需要保存数据到硬盘上。
所以越靠近CPU,读取速度越快,存储容量越小。
操作系统在内存中的目标
1.抽象:应用程序在内存中运行时,由于OS的管理,能够不用考虑过多的底层细节(不需考虑物理内存在哪,外设在哪)只需要掌握一个连续的地址空间(逻辑地址空间)。
2.保护:内存中可以同时运行多个应用程序,多个不同的应用程序相互之间可能会访问彼此的地址空间,所以我们需要隔离这些应用程序隔离。这个机制的实现就需要OS来完成。
3共享:访问相同内存,使进程之间可以安全可靠的数据传递。
4.虚拟化:当内存中储存程序比较多时,很容易出现内存不够的情况。所以我们需要更多的地址空间,我们把最需要放到内存中的数据放在内存中,把那些没那么必要的程序暂时放到硬盘中。这个管理过程我们希望对应用程序透明,同时令应用程序尽量用所需要的数据和空间。这个过程就是虚拟化。
地址空间&地址生成
有两种地址空间。物理/逻辑地址空间(连续的物理地址空间)
物理地址空间和硬件直接对应,比如内存条代表的主存和硬盘代表的另一种存储空间。
逻辑内存空间是一个运行中的程序所看到的内存空间,相对而言吗他看到的地址空间更加简单(线性的),我们的应用程序因此很容易去访问和做控制及数据访问操作。图中的指令最终一定会放在主存或者硬盘中,现在位于箭头指向的程序中的某一位置。这个映射关系是需要OS进行管理的。
我们在机器里,总线上看到的地址是物理地址。所有的物理地址构成的空间由硬件支持的。
逻辑地址空间的生成
C程序变为汇编语言再变成机器语言,他会把编的函数名和符号名变成新的地址。.o程序起始地址全都是从零开始,里面的函数名和符号名都会变成相应的地址。另外一个编译过程中用到的工具lniker会把多个.0程序变成单一的应用程序,这个程序可以在内存中执行但是目前还存在硬盘中的程序,最后一步,放在硬盘中的执行程序再通过loader放到内存中去运行,这一步需要去完成一个分配逻辑地址的工作。相对于执行程序而言,地址会有一定的偏移量,可以为0,然后所有的程序会依照偏移量进行正确的访问和指令的操作。
程序放到内存中去后,他仍然是一个逻辑地址,而不是物理地址。
地址空间的定义
映射关系完成了一个从逻辑地址到物理地址的映射,一个逻辑地址具体的对应的物理地址知道了的话,就可以从具体的外设中读写数据。
流程描述:当CPU需要某条指令时,当前指令需要ALU,会将相应参数传给ALU。CPU里的MMU会去查找逻辑地址的映射表中是否有对应的物理地址,如果有直接找到对应地址;没有的话,就会去内存中找。找到后会给CPU发出请求,需要某条物理地址的指令内容,主存会把内存的内容通过总线传给CPU,然后CPU开始执行指令。这过程里OS起到的作用就是:1,在这些步骤之前需要建好这个映射关系表,这就是物理地址生成的过程。这个关系可以放在内存中由CPU来缓存,可以加快这个访问的过程。
操作系统的作用
操作系统需要确保放到内存中的程序之间不能相互干扰,为此需要保证每个程序访问的地址程序是合法的(限制在约束范围之内的)。限制和约束也由OS完成。
一个程序可以有效访问的地址空间:1,起始地址;2,长度(有一块区域属于这个程序的合理访问区间,超出这个范围,那么这个程序的访问就不合法)。逻辑地址如果不满足区域限制,CPU会产生一个内存访问异常,OS将会进一步处理这个问题;满足则正常的去找到对应物理地址的位置,从中取出指令的数据。