本文我们将介绍两部分内容:
- 计算机体系结构/内存分层体系:
- 地址空间&地址生成:操作系统和程序的编译执行这个过程进行交互的
1.计算机体系结构及内存分层体系
1)计算机体系结构
- CPU:完成程序以及软件执行的控制
- 内存:存放代码&数据
- I/O:外设
2)内存分层体系
- 微处理器(CPU访问):以下这两种是位于CPU芯片内部的,OS没办法直接对其进行管理
- 寄存器
- cache(L1缓存 / L2缓存)
- 主存:在运行程序时所需要保存的数据空间
- 磁盘:用于持久化数据保存的数据空间
3)在操作系统的内存管理范例
内存管理目标
-
抽象:逻辑地址空间
希望应用程序在内存中运行的时候,不用考虑太多底层的细节,只需要访问一个连续的地址空间就可以了
-
保护:独立地址空间
内存中可以运行多个不同的应用程序,需要一种有效的机制,防止某个进程访问其它进程的地址空间
-
共享:访问相同内存
-
虚拟:更多的地址空间
当内存中放入了多个应用程序后,会出现内存不足的情况,如何让正在运行的程序获取它所需要的内存空间呢?把最需要存放在内存的数据放在内存中,把暂时不需要访问的数据放在磁盘上
如图所示,主存和硬盘是一种物理地址空间,而程序看到的是逻辑地址空间
而操作系统想要完成上述四点内容,就需要一定的机制和手段(内存管理方法):
- 程序重定位
- 分段
- 分页
- 虚拟内存
- 按需分页虚拟内存
实现起来高度依赖于硬件
内存管理单元(MMU):它是一种负责处理[中央处理器](CPU)的[内存]访问请求的[计算机硬件]。它的功能包括逻辑地址到物理地址的转换(即虚拟内存管理)等
2.地址空间&地址生成
分为三部分进行讲解:
- 地址空间定义:逻辑地址空间&物理地址空间定义
- 地址生成:地址空间是怎么生成的,什么时候生成逻辑地址空间,什么时候生成物理地址空间
- 地址安全检查:OS如何有效保护不同进程之间的访问,是他们不会互相干扰
1)地址空间的定义
- 物理地址空间 —— 硬件支持的地址空间( address : [0, Max_sys] )
- 逻辑地址空间 —— 一个运行的程序所拥有的的内存范围( address : [0, Max_prog] )
2)逻辑地址生成
如下图所示,可见:
- 在汇编之后转换成机器语言,其起始地址都是从0开始的连续地址空间
- 通过链接得到一个可执行的程序,此时该程序存放在硬盘中
- 把该执行程序放到内存中去执行,需要将逻辑地址载入到内存中。实现真正的逻辑地址空间
- 以上操作不需要OS进行辅助
3)物理地址生成
- CPU中有一个MMU,MMU中有一块区域表示了逻辑地址与物理地址的映射关系。
- 当CPU执行某条指令的时候,ALU部件会发出一个请求(携带逻辑地址的参数)
- CPU中的MMU会去查询逻辑地址的映射表中是否存在其物理地址;如果没找到就去内存里面去找
- 如果在内存中找到后,CPU的控制器会给主存发送一个请求(我需要某个物理地址的内容),主存会把该内容通过总线传给CPU
4)地址安全检查
声明:
- 本文仅作为个人学习笔记。
- 如有侵权,立即删除。