OS笔记----计算机内存管理

一、计算机体系结构/内存分层体系

1、计算机基本硬件结构

计算机基本硬件结构

2、内存层次结构

内存层次结构

3、操作系统在内存管理方面需要完成的目标


抽象:应用程序在内存中运行的时候能够不考虑底层细节(如:物理内存在什么地方?外设在什么地方?),只需访问一个连续的地址空间,这个地址空间被称为逻辑地址空间。
保护:在内存中可以运行多个不同的应用程序,不同进程之间可能会相互干扰,我们需要一种机制来保护某个进程不被其他进程所破坏。
共享:进程之间也需要进行交互(如:进程之间的数据传递),操作系统能够保证各个进程之间能够安全可靠地进行数据传递。
虚拟化:当多个进程同时进行的时候,内存可能不够用,这时我们可以临时把一些不需要访问的数据放到硬盘上,以缓解内存的紧张。

操作系统任务

在这个例子中我们能看到正在占用内存的除了操作系统内核之外还有P1、P2、P3、P4,但是主存的空间不够了,这时P4进程可能正在等待某一个数据来继续执行,这个数据可能需要一定的时间来获取,所以此时我们可以将P4的数据暂时放到硬盘上以保证P1、P2、P3能够正常执行。


4、在操作系统中管理内存的基本方法

  • 程序重定位
  • 分段
  • 分页
  • 虚拟内存
  • 按需分页虚拟内存
以上方法的实现高度依赖硬件:
  • 必须知道内存架构
  • MMU(内存管理单元):硬件组件负责处理CPU的内存访问请求

二、地址空间与地址生成


1、地址空间定义

在这里插入图片描述

地址空间包括物理地址空间和逻辑地址空间:

物理地址空间:是硬件支持的地址空间,包括内内存条所代表的的主存和硬盘所代表的存储空间。
  • 起始地址0,到地址MAXsys
逻辑地址空间:一个运行的程序所拥有的的内存范围。
  • 起始地址0,到地址MAXprog
这两个地址空间之间的映射关系需要操作系统来完成。

2、地址生成

在这里插入图片描述

比如说我们写了一个C程序(.c file),其中的函数位置、变量名字就是逻辑地址的体现。这个程序经过编译之后得到汇编程序(.s file),这个程序依然是用符号来表示逻辑地址。之后再通过汇编得到对象文件(.o file),能够看到该程序的起始地址是0,并且会把变量的符号名和函数的符号名转换成相应的地址,这些地址都是相对于0开始的连续地址空间。多个.o程序链接成一个可执行程序也就是我们的.exe程序,这个程序就是目前存储在硬盘中并且可以加载到内存中执行的程序,这个程序中的地址已经是各个.o程序地址的合并,不同.o程序在该程序中占据不同地址,但是这个地址不是在内存中的地址。最终该程序经过操作系统加载程序进行载入,加载到内存中运行。那么以上就是一个文件从符号地址逐渐转化成能够在内存中运行的具体的逻辑地址的过程。



当一个程序需要执行某一条指令时,该指令的逻辑地址是如何对应到物理地址中去的?

在这里插入图片描述

CPU方面

  1. 运算器需要在逻辑地址的内存内容
  2. 内存管理单元寻找在逻辑地址和物理地址之间的映射
  3. 控制器从总线发送在物理地址的内存内容的请求
内存方面
  1. 总线发送物理地址内存的内容给CPU
操作系统方面
  • 建立逻辑地址和物理地址之间的映射(在CPU中的MMU进行该操作)

3、地址安全检查


在这里插入图片描述

操作系统需要确保每一个程序可以访问的有效逻辑地址空间,包括起始地址和它的长度,通过这两个参数我们可以知道有一块逻辑地址空间是这个程序可以合理访问的,一旦超出这个区域这个访问就是一个不合法的访问。

当请求的逻辑地址位于这个区域内,就可以根据映射关系找到相应的物理地址空间并将内存中的内容取出来;若请求的逻辑地址空间不在这个范围内,CPU就会产生一个内存访问异常,之后让操作系统进一步处理。

发布了4 篇原创文章 · 获赞 1 · 访问量 145

猜你喜欢

转载自blog.csdn.net/qq_42520894/article/details/104536512