操作系统-内存篇3(虚拟内存概念)

一、虚拟内存的起因

获得更大、更快、更便宜,好用不易失的存储器

二、覆盖技术

目标:在较小的可用内存中运行较大的程序,常用于多道程序设计,与分区存储管理配合使用

原理:

  • 将程序按照自身逻辑结构,划分为若干个功能独立的程序模块,那些不会同时执行的模块可共享同一块内存区域,按时间先后来运行
  • 常驻内存模块:必要的代码和数据
  • 可选模块:不常用功能存放于外存中,需要时才装入内存
  • 不存在调用关系的模块不必同时装入内存中,从而可以相互覆盖,即这些模块共用一个分区

例子:

覆盖技术缺点:

  • 由程序员来把一个大的程序划分为若干小的功能模块,并决定模块间的覆盖关系,增加了变成复杂度
  • 覆盖模块从外存装入内存,实际上是以时间延长来换取空间节省

三、交换技术

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

方法:

  • 将暂时不能运行的程序送到外存,从而获得空闲内存空间
  • 操作系统把一个进程的整个地址空间的内存保存到外存中(swap out),而将外存中的某个进程的地址空间读入内存(swap in)。换入换出内容的大小为整个程序的地址空间

问题:

  • 交换的时机: 只当内存空间不够或有不够的危险时换出
  • 交换区的大小:交换区必须足够大,以存放所有用户进程的所有内存映像的拷贝,必须能对这些内存映像进行直接存取
  • 程序换入时的重定位:换出后再换入的内存位置可能会变,最好采用动态地址映射的方法(通过页表的变化,实现逻辑地址与物理地址的动态映射)

覆盖与交换的比较:

  • 覆盖只能发生在相互之间没有调用关系的程序模块之间,因此程序需要指出各个模块之间的逻辑覆盖结构
  • 交换技术在内存中是以程序大小为单位进行的,不需要给出各个模块之间的逻辑覆盖结构
  • 综上,交换发生在内存中程序与管理程序或操作系统之间,覆盖发生在运行程序内部

四、虚存技术

1. 目标:

  • 覆盖技术需要开发者将程序划分为若干功能模块,确定覆盖关系,增加了开发者负担
  • 交换技术需要把进程的整个地址空间换入换出,增加处理器开销
  • 虚拟内存旨在实现进程在内存和外存间交换,但只对进程的部分内容进行交换;只将程序部分内容放入内存中,且对程序透明,无需开发者介入

2. 程序局部性原理:

程序在执行过程中的一个较短时期内,所执行的指令地址和指令的操作数地址,分别局限于一定区域。这可以表现为:

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

局部性原理表明,从原理上来说,虚拟存储技术是可以实现的,而且实现之后应该能够取得较好的结果

3. 程序的编写方法对缺页率的影响:

4. 基本概念:

5. 基本特征:

  • 大的用户空间:通过将物理内存与外存相互结合,提供给用户的虚拟内存空间通常大于实际的物理内存,即实现了两者的分离(32位的虚拟地址理论上可以访问4GB,而可能计算机上仅有256M的物理内存,但硬盘容量大于4GB)
  • 部分交换:与交换技术相比,换入换出的是程序的部分内容
  • 不连续:物理内存分配不连续,虚拟地址使用不连续

6. 虚拟页式内存管理:

大部分虚拟存储系统采用虚拟页式存储管理技术,在页式存储管理的基础上,增加请求调页和页面置换功能。

a. 基本思路:

  • 当一个用户程序要调入内存运行时,不是将该程序的所有页面都装入内存,而是只装入部分的页面,就可启动程序运行
  • 在运行的过程中,如果发现要运行的程序或者要访问的数据不在内存(根据页表项中resident标志位),则向系统发起缺页中断请求,系统在处理这个中断时,将外存中相应的页面调入内存,使得该程序能够继续运行。

b. 页表项结构:

c. 例子:

mov REG, 0: 逻辑地址为0,查页表,得物理地址基地址为 2*4K,通过偏移量可得到实际物理地址

mov REG, 32780: 逻辑地址为32780,查页表,得到8号页表,出现缺页中断

7. 缺页中断处理过程:

  1. 若物理内存中有空闲的物理页面,则分配物理页帧f,然后执行步骤4;否则执行步骤2
  2. 采用页面置换算法,选择一个将被替换的物理页帧f(假设其逻辑页为q)。如果改页在内存中被修改过,则写会外存
  3. 对q所对应的页表项进行修改,将驻留位置为0;
  4. 将需要访问的页p装入物理页面f当中
  5. 修改p所对应的页表项的内容,把驻留位置为1,把物理页帧号置为f
  6. 重新运行被中断的指令

8. 后备存储

一个虚拟地址空间的页面可以被映射到一个文件中某个位置

代码段:映射到可执行二进制文件

动态加载的共享库程序段:映射到动态调用的库文件

其他段:可能被映射到交换文件

9. 虚拟内存性能

为了便于理解分页的开销,使用EAT(有效存储器访问时间)

EAT = 访存时间 * 页表命中几率 + 缺页异常处理时间 * 缺页异常几率

例子:

q代表内存中数据被修改,需要从内存中写入磁盘,此时需要执行两次访问磁盘的操作(读&写)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值