• 清华操作系统笔记4——虚拟内存技术


    CSDN话题挑战赛第2期
    参赛话题:学习笔记

    系列文章目录



    前言

    参照B站上面的操作系统视频所写的笔记
    第三部分 ——非连续内存分配
    另外,在写笔记的过程中,也搬运了一些其他博客的内容,有些地方没有标注来源,如果原创作者觉得有任何问题都可以联系我,侵删。


    一、 虚拟内存的需求背景

    在这里插入图片描述

    起因

    -覆盖技术(早期)/交换技术(早期)/虚存技术
    -虚拟内存技术:目标/程序局部性原理/基本概念/基本特征/虚拟页式内存管理

    经常出现内存不够了。程序规模的增长大于存储器容量的增长。
    理想的存储器:更大,更快,更便宜,非易失性存储。
    在这里插入图片描述

    问题

    在计算机系统中,尤其是在多道程序运行的环境下,可能会出现内存不够用的情况,怎么办?

    • 如果是程序太大,超过了内存的容量,可以采用手动的覆盖(overlay)技术,只把需要的指令和数据保存在内存当中
    • 如果是程序太多,超过了内存的容量,可以采用自动的交换(swapping)技术,把暂时不能执行的程序送到外存中
    • 如果想要在有限容量的内存中,以更小的页粒度为单位装入更多更大的程序,可以采用自动的虚拟存储技术
      -在这里插入图片描述

    二、覆盖技术

    在这里插入图片描述
    在这里插入图片描述

    (1)目标

    在较小的可用内存中运行较大的程序。常用于多道程序系统,与分区存储管理配合使用。

    (2)原理

    把程序按照其自身逻辑结构,划分为若干个功能上相对独立的程序模块,那些不会同时执行的模块共享同一块内存区域,按时间先后来运行。
    ->必要部分(常用功能)的代码和数据常驻内存
    ->可选部分(不常用功能)在其它程序模块中实现,平时存放在外存中,在需要时才装入内存。
    ->不存在调用关系的模块不必同时装入内存,从而可以相互覆盖,即这些模块共用一个分区。
    在这里插入图片描述
    在这里插入图片描述

    缺点

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

    三、交换技术

    在这里插入图片描述

    (1)目标

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

    (2)方法

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

    (3)交换技术实现中的几个问题

    交换时机的确定:只有当内存空间不够或有不够的危险时换出
    -交换区的大小:必须足够大以存放所有用户进程的所有内存映像的拷贝,必须能对这些内存映像进行直接存取
    -程序换入时的重定位:因为换出换入后的内存位置不一定相同,所以最好采用动态地址映射的方法

    (4)覆盖与交换技术的比较

    覆盖只能发生在那些(程序内)相互之间没有调用关系的程序模块之间,因此程序员必须给出程序内的各个模块之间的逻辑覆盖结构。
    -交换技术是以在内存中的程序大小为单位来进行的,它不需要程序员给出各个模块之间的逻辑覆盖结构。
    —>交换发生在内存中 程序 与 管理程序或操作系统 之间,而覆盖则发色会跟你在运行程序的内部。
    在这里插入图片描述

    四、虚(拟)(内)存(管理)技术

    在这里插入图片描述
    在这里插入图片描述
    注意,方法1是按行访问,也就是每跳过1024个访问一个,考虑到4k只能放1024个数字(一个int占32位,4个byte),所以每次访问都会换入换出,不满足空间局部性。

    (1)虚存技术的目标

    解决覆盖技术给程序员负担大和交换技术处理器开销大的问题。
    -像覆盖技术一样,不是把程序的所有内容都放在内存中,因而能够运行比当前的空闲内存空间还要大的程序。但做得更好,能由操作系统自动完成,无需程序员介入
    -能像交换技术那样,能够实现进程在内存和外存之间的交换,因而获得更多的空闲内存空间。但能做得更好,只对进程的部分内容在内存和外存之间进行交换。

    在这里插入图片描述

    (2)程序的局部性原理(principle of locality)

    在这里插入图片描述

    (3)虚存技术的基本概念

    在这里插入图片描述

    在这里插入图片描述

    (4)虚存技术的基本特征

    在这里插入图片描述

    (5)虚拟页式内存管理

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    页表表项

    在这里插入图片描述
    在这里插入图片描述

    缺页中断处理过程

    在这里插入图片描述

    1、如果在内存中有空闲的物理页面,则分配一物理页帧 f,然后转第 4 步;否则转第 2 步
    2、采用某种页面置换算法,选择一个将被替换的物理页帧f,它所对应的逻辑页为 q;如果该页在内存期间被修改过,则需把它写回外存
    3、对 q 所对应的页表项进行修改,把驻留位置为 0
    4、将需要访问的页 p 装入到物理页面 f 当中
    5、修改 p 所对应的页表项的内容,把驻留位置为 1,把物理页帧号置为 f
    6、重新运行被中断的指令
    在这里插入图片描述

    (6)后备存储

    在这里插入图片描述
    在这里插入图片描述

    (7)虚拟内存性能

    在这里插入图片描述

  • 相关阅读:
    嵌套快元素垂直外边距的塌陷以及清除网页元素的内外边距
    IT入门知识第七部分《移动开发》(7/10)
    解读大模型(LLM)的token
    Day23:安全开发-PHP应用&后台模块&Session&Cookie&Token&身份验证&唯一性
    math_高数公式每日一过_part2(private)
    Netty 3 - 组件和设计
    Android 13.0 修改wifi信号强度
    由浅入深——晶体管放大电路基础
    Kafka偏移量自动提交设置
    Linux网络编程
  • 原文地址:https://blog.csdn.net/qq_41810415/article/details/127462839