操作系统(二)内存地址空间与虚拟内存

计算机基本硬件结构

CPU 内存, 设备
在这里插入图片描述

在这里插入图片描述

操作系统的内存管理功能

  • 抽象
    逻辑地址空间
  • 保护
    独立地址空间
  • 共享
    访问相同的内存
  • 虚拟化
    更多的地址空间

在等待的进程可以先放在硬盘上去(虚拟地址空间)

操作系统管理内存不同方法

程序重定位
分段
分页
虚拟内存
按需分页虚拟内存

实现高度依赖硬件
MMU

地址空间

物理地址空间,硬件支持的地址空间
主存,磁盘

逻辑地址空间-一个运行得程序所拥有的内存范围
在这里插入图片描述

逻辑地址空间的生成

  • 编译 函数变量的名字就是地址
  • 汇编 更加贴近于机器语言,用符号代替变量和函数的地址,通过汇编器可以转换为机器语言.o file程序
  • 链接,把多个.o程序编程一个.exe程序
  • 载入,偏移量程序在内存中
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

理想的存储器

更大、更快、更便宜和非易失性的存储器。
在这里插入图片描述
在这里插入图片描述

手动的覆盖和自动的交换。
如果想要在有限容量的内存中,以更小的页粒度为单位装入更多更大的程序,可以采用自动的虚拟存储技术。

覆盖技术

把程序按照其自身逻辑结构,划分为若干个功能上相对独立的程序模块,那些不会同时执行的模块共享同一块内存区域,按时间先后运行。

交换技术

多道程序在内存中,让正在运行的程序或需要运行的程序获得更多的内存资源。

方法:
可将暂时不能运行的程序送到外存,从而获得空闲内存空间。
操作系统把一个进程的整个地址空间的内容保存到外存中,而将外存这种某个进程的地址空间读入到内存中。换入换出内容的大小为整个程序的地址空间。
在这里插入图片描述

交换技术

何时需要发生交换,只当内存空间不够或有不够的危险时换出。

交换区的大小:必须足够大以存放所有用户进程的所有内存映像的拷贝:必须能对这些内存映像进行直接存取

程序换入时的重定位 : 换出后再换入的内存位置一定要在原来的位置上吗?最好采用动态地址映射的方法。

页表,动态地址映射。

覆盖发生在一个程序里面,由程序员负责操作,程序员手动指定。
交换直接交换暂时无法执行的程序,是操作系统完成的,对程序员是透明的。

虚存技术

在内存不够用的情形下,可以采用覆盖技术和交换技术,但是:

  • 覆盖技术: 需要程序员自己把整个程序划分为若干个小的功能模块,并确定各个模块之间的覆盖关系,增加了程序员的负担。
  • 交换技术: 以进程为单位,进行交换。开销较大。

虚存技术,像覆盖技术那样,不是把程序的所有内容都放在内存中,因而能够运行比当前的空间还要大的程序,但做得更好,由操作系统自动来完成,无须程序员的干涉。
像交换技术那样,能够实现进程在内存与外存之间的交换,因而获得更多的空闲内存空间。但做得更好,只对进程的部分内容在内存和外存之间交换。

虚拟技术-程序的局部性原理

时间局部性: 一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都集中在一个较短时期内:
空间局部性:当前指令和临近的几条指令,当前访问的数据和邻近的几个数据都集中在一个较小的区域内。

在这里插入图片描述

在这里插入图片描述
缺页中断。

虚拟技术-基本概念
可以在页式或段式内存管理的基础上实现。

在装入程序时,不必将全部装入内存中,而只需将当前需要执行的部分页面或段装入内存,就可让程序开始执行。
在程序执行过程中,如果需执行的指令或访问的数据尚未在内存(称为缺页或缺段),则由处理器通知操作系统将相应的页面或段调入到内存,然后继续执行程序。

把不常用页换出内存。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/fairyloycine/article/details/88311897