操作系统之虚拟内存技术的原理与实现

目录

定义

目的

虚拟内存的基本概念

虚拟内存的最大容量

虚拟内存的实际容量

页面调入调出时CPU不工作

虚拟存储器包括硬盘和内存,主存储器只有内存

寄存器是CPU的一部分

页缓冲队列是将被淘汰的页面缓存下来,暂时不写回磁盘,影响页面置换的速度,不影响缺页率

虚拟内存的特征

虚拟内存的实现方法

请求分页存储管理

请求分段存储管理

请求段页式存储管理

内存映射文件

 思想

基本机制     

特点

其他部分


定义

虚拟内存是一种存储管理技术,通过使用硬盘空间作为内存的扩展,使得程序可以使用比实际物理内存更大的存储空间。它允许操作系统将部分数据暂时存储在硬盘上,当需要时再将其调入内存.

目的

虚拟内存的主要目的是提供更大的地址空间,使得程序可以运行更大的数据集和更复杂的程序,同时提高内存的利用率.

虚拟内存的基本概念

虚拟内存基于局部性原理,在程序装入时,可以将程序中很快会用到的部分装入内存,暂时用不到的部分留在外存,就可以让程序开始执行。 在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序。若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存。

虚拟内存的最大容量
  • 由计算机的地址结构(CPU寻址范围)确定:虚拟内存的最大容量取决于CPU的地址位数。例如,32位CPU的寻址范围是4GB,而64位CPU的寻址范围可以达到16EB(Exabytes)或更大。这意味着虚拟内存的最大容量受限于CPU能够寻址的地址空间大小.
虚拟内存的实际容量
  • 虚拟内存的实际容量= min (内存和外存容量之和,CPU寻址范围):虚拟内存的实际容量是物理内存和硬盘上用于虚拟内存部分的容量之和,但不能超过CPU的寻址范围。例如,如果一个系统有4GB的物理内存和100GB的硬盘空间用于虚拟内存,而CPU的寻址范围是4GB,则虚拟内存的实际容量为4GB.
  • 影响因素:虚拟内存的实际容量还受到操作系统和应用程序的限制。操作系统需要管理虚拟内存的分配和回收,而应用程序的内存需求也会影响虚拟内存的实际可用容量.
页面调入调出时CPU不工作
  • 页面调入调出过程:当程序需要访问的页面不在内存中时,会发生缺页中断,操作系统会从硬盘中将缺失的页面调入内存。当内存不足时,操作系统会将一些不常用的页面调出到硬盘上。在这个过程中,CPU不会参与页面的调入调出操作,而是由操作系统和内存管理单元(MMU)来完成.
  • CPU的工作:CPU在页面调入调出时主要负责处理缺页中断,将控制权交给操作系统进行页面的调入调出操作。CPU本身不直接参与页面的传输过程,而是等待操作系统完成页面调入后继续执行程序.
虚拟存储器包括硬盘和内存,主存储器只有内存
  • 虚拟存储器:虚拟存储器是指计算机系统中可以被程序使用的全部存储空间,包括物理内存和硬盘上的虚拟内存部分。它为程序提供了一个统一的、连续的地址空间,使得程序可以像使用物理内存一样使用虚拟内存.
  • 主存储器:主存储器通常指的是计算机的物理内存,即RAM。它是CPU可以直接访问的存储设备,用于存储正在运行的程序和数据。主存储器的访问速度比硬盘快得多,因此CPU的指令和数据主要从主存储器中获取.
寄存器是CPU的一部分
  • 寄存器的作用:寄存器是CPU内部的小型存储单元,用于存储指令、数据和地址等信息。它们是CPU执行指令和处理数据的基础,可以快速地读写数据,从而提高CPU的工作效率.
  • 寄存器的类型:常见的寄存器类型包括指令寄存器(IR)、程序计数器(PC)、数据寄存器(DR)、地址寄存器(AR)等。每种寄存器都有其特定的功能和用途,共同支持CPU的正常工作.
页缓冲队列是将被淘汰的页面缓存下来,暂时不写回磁盘,影响页面置换的速度,不影响缺页率
  • 页缓冲队列的作用:页缓冲队列用于暂存将被淘汰的页面,这些页面可能还会被程序再次访问。通过将这些页面暂时保留在页缓冲队列中,可以减少对硬盘的写操作次数,从而提高页面置换的速度.
  • 对缺页率的影响:缺页率是指程序运行过程中发生缺页中断的频率。页缓冲队列主要影响页面置换的速度,即从硬盘中调入缺失页面的时间,而不会直接影响程序的缺页率。缺页率主要取决于程序的访问模式和内存管理策略,例如页面置换算法的选择.

虚拟内存的特征

  • 多次性:作业可以多次调入内存,不需要一次性全部装入.
  • 对换性:不需要作业常驻内存,可以根据需要进行换入换出.
  • 虚拟性:从用户视角来看,逻辑上扩大了内存容量.
  • 离散性:虚拟内存的实现需要建立在离散分配的内存管理方式基础上.

虚拟内存的实现方法

请求分页存储管理

  • 页表项结构
    • 状态位P(也即合法位):用于指示页面是否已调入内存。如果状态位为1,表示页面已在内存中,可以直接访问;如果状态位为0,表示页面不在内存中,此时访问该页面会触发页故障.
    • 访问字段A(访问位):记录页面最近被访问的情况,可以是访问次数或上次访问的时间。访问字段为页面置换算法提供了参考信息,帮助算法选择合适的页面进行置换.
    • 修改位M:指示页面调入内存后是否被修改过。如果修改位为1,表示页面在内存期间被修改过,需要在置换时将其写回外存;如果修改位为0,表示页面未被修改,置换时不需要写回外存.
    • 外存地址:记录页面在外存中的存放位置,以便在需要时将页面调入内存.
    • 页号/内存块号/状态位/访问字段(位)/修改位/外存地址:页表项通常包含这些信息,用于描述页面的状态和位置.
  • 缺页中断机构
    • 步骤
      1. 在请求分页系统中,每当要访问的页面不在内存时,便产生一个缺页中断,然后由操作系统的缺页中断处理程序处理中断.
      2. 此时缺页的进程阻塞,放入阻塞队列,调页完成后再将其唤醒,放回就绪队列.
      3. 如果内存中有空闲块,则为进程分配一个空闲块,将所缺页面装入该块,并修改页表中相应的页表项.
      4. 如果内存中没有空闲块,则由页面置换算法选择一个页面淘汰,若该页面在内存期间被修改过,则要将其写回外存。未修改过的页面不用写回外存.
    • 一条指令可产生多次缺页中断:如果一条指令需要访问多个不在内存中的页面,那么在执行该指令的过程中,可能会产生多次缺页中断.
  • 地址变换机构
    1. 只有“写指令”才需要修改“修改位”。并且,一般来说只需修改快表中的数据,只有要将快表项删除时才需要写回内存中的慢表。这样可以减少访存次数.
    2. 和普通的中断处理一样,缺页中断处理依然需要保留CPU现场:在处理缺页中断时,需要保存CPU的寄存器和其他相关状态,以便在中断处理完成后能够恢复程序的执行.
    3. 需要用某种“页面置换算法”来决定一个换出页面:常见的页面置换算法包括先进先出(FIFO)、最近最少使用(LRU)和最佳置换算法(OPT)等.
    4. 换入/换出页面都需要启动慢速的I/O操作,可见,如果换入/换出太频繁,会有很大的开销:频繁的页面置换会导致系统性能下降,因为I/O操作的速度远慢于内存访问速度.
    5. 页面调入内存后,需要修改慢表,同时也需要将表项复制到快表中:慢表是完整的页表,存储在内存中,而快表是页表的一部分,存储在硬件中,用于快速查找页表项.
    6. 查快表(未命中)→查慢表(发现未调入内存)→调页(调入的页面对应的表项会直接加入快表)→查快表(命中)→访问目标内存单元:这是地址变换的过程,首先在快表中查找页表项,如果未命中,则在慢表中查找,如果发现页面未调入内存,则进行调页操作,最后再次查找快表并访问目标内存单元.

请求分段存储管理

  • 段表项结构
    • 段号:标识一个段.
    • 内存起始地址:段在内存中的起始地址.
    • 段长度:段的长度,即段在内存中占用的空间大小.
    • 状态位:指示段是否已调入内存.
    • 访问权限:定义段的访问权限,如读、写、执行等.
  • 缺段中断机构
    • 当要访问的段不在内存时,会产生缺段中断,操作系统会处理缺段中断,将缺失的段调入内存,并修改段表项的状态.
    • 缺段中断的处理过程类似于缺页中断,但操作的对象是段而不是页面.
  • 地址变换机构
    • 段内地址:由段号和段内偏移量组成.
    • 地址变换过程:首先根据段号查找段表项,得到段在内存中的起始地址和段长度,然后将段内偏移量与起始地址相加,得到物理地址.
    • 段表的作用:段表用于记录段的状态和位置,支持段的动态分配和共享.

请求段页式存储管理

  • 段页表结构
    • 段表:每个段有一个段表,段表项包含段号、内存起始地址、段长度、状态位和访问权限等信息.
    • 页表:每个段的页表记录该段的页面状态和位置,页表项包含状态位、访问字段、修改位、外存地址等信息.
  • 缺段缺页中断机构
    • 缺段中断:当要访问的段不在内存时,会产生缺段中断,操作系统会将缺失的段调入内存,并修改段表项的状态.
    • 缺页中断:当要访问的页面不在内存时,会产生缺页中断,操作系统会将缺失的页面调入内存,并修改页表项的状态.
    • 缺段缺页中断的处理过程结合了缺段中断和缺页中断的特点.
  • 地址变换机构
    • 地址结构:由段号、页号和页内偏移量组成.
    • 地址变换过程:首先根据段号查找段表项,得到段在内存中的起始地址和段长度,然后根据页号查找页表项,得到页面在内存中的位置,最后将页内偏移量与页面位置相加,得到物理地址.
    • 段页表的作用:段页表结合了段表和页表的优点,支持段的动态分配和共享,同时提供页面级别的内存管理,提高了内存的利用率和灵活性

内存映射文件

 思想

用虚拟内存技术来将文件I/O作为普通内存访问。这种方法称为文件的内存映射)它允许一部分虚拟内存与文件逻辑相关联,进程可以使用系统调用来进行文件映射,传统文件读取写入要使用系统调用readO和writeO

基本机制     

将一磁盘块映射成内存的一页(或多页)。 开始的文件访问按普通请求页面调度来进行,会产生页错误。 一页大小的部分文件从文件系统读入物理页(有的系统会一次读入多个一页大小的内容)。以后文件的读写就按通常的内存访问来处理,由于是通过内存操作文件而不是使用系统调用readO和writeO,从而简化了文件访问和使用,不需要缓冲区,文件只需要拷贝一次  

特点

多个进程可以允许将同一文件映射到各自的虚拟内存中,以允许数据共享。其中任一进程修改虚拟内存中的数据,都会为其他映射相同文件部分的进程所见

其他部分

操作系统之虚拟存储的具体分配-优快云博客 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值