• 虚拟存储器-11.1


    虚拟存储器-11.1

    1.虚拟存储器概述

    1.1局部性原理

    1.程序的局部性原理:程序在运行的时候局限在某个局部的地方。

    2.虚拟存储器的工作基本情况

    • 运行时在内存
    • 运行时不在内存
    • 需要时调入内存
    • 不需要调出内存

    2.虚拟存储器实现的方法

    2.1请求分页技术

    2.1.1思想

    分页:

    • 运行时只装入当前需要运行的界面
    • 运行后动态装入其他的页面
    • 满的话淘汰某个页面

    2.1.2数据结构

    • 页号
    • 状态位:0代表不在内存,1代表调入内存。判断是不是调入了内存中。
    • 内存块号:内存中的地址块号。
    • 外存地址:页在外存中的地址。
    • 修改位:调入内存后是不是被修改过。
      • 当发生置换的时候,回写。
      • 当不发生置换的时候,不回写。
    • 访问位:作为页面置换算法的依据。

    2.1.3缺页中断

    缺页中断可以发生在程序执行的过程中,但是一般的程序的中断都是发生在程序执行完之后才会发生的。

    1.缺页中断和一般的中断的区别

    相同点:

    • 都是中断
    • 保护现场 中断处理 恢复现场

    不同点:

    • 一般中断是一条指令完成后中断,缺页中断是一条指令执行时中断
    • 一条指令执行时可能产生多个缺页中断。如指令可能访问多个内存地址,这些地址在不同的页中。

    2.缺页中断的过程

    当某一条指令找对应的页号的时候没有找到,就会发生缺页中断。

    发生缺页->缺页中断(将当前要执行的程序挂起,调用缺页中断程序)->采用某种置换算法,将缺页的调入内存->恢复现场(唤醒中断的程序)

    3.中断处理的特例:

    涉及到6次中断的过程。

    原因:一条指令在两个页面中,指定一条指令都会置换两次。

    2.2请求分页技术内存分配

    2.2.1内存分配策略

    可变分区的全局置换是用的次数最多的。

    1.内存分配策略

    • 固定分区
      • 分区太多:老是出现缺页中断
      • 分区太少:造成CPU或其他资源的浪费
    • 可变分区

    2.内存置换策略

    • 局部置换
    • 全局置换

    2.2.2物理块的分配算法-基于固定分区分配策略

    1.物理块的分配算法-基于固定分区分配策略

    • 平均分配:按照进程的数目进行平局的分配
    • 按比例分配:用的最多。按照进程的大小进行分配。
    • 基于优先权的分配:先按照比例进行分配,再去按照对应的优先级进行分配。优先级高的进程对应的份额多一点。

    2.3页面调入策略

    就是事先调入内存中的部分程序和数据。

    2.3.1何时调入

    1.何时调入

    • 预调页策略:50%。
    • 请求调页策略:常用,容易实现的。但是每次调入一页,系统的开销是比较大的。

    2.3.2何处调入

    1.常见的调入的三种情况

    • 对换空间足够大:把所有的页面放入对换区。
    • 对换空间不够大:
      • 不会修改的放到文件区
      • 已经修改放到对换区
    • UNIX方式:
      • 未运行过的放到对换区
      • 曾经运行但是被对换出的页面,下次调入的时候还是从对换区调入

    2.3.3如何调入

    调入的过程就是发生缺页中断处理的过程

    发生缺页->缺页中断(将当前要执行的程序挂起,调用缺页中断程序)->采用某种置换算法,将缺页的调入内存->恢复现场(唤醒中断的程序)

    2.3.4缺页率

    1.缺页率的计算公式

    • f=F/A
      • f:缺页率
      • F:缺页的次数
      • A:缺页的次数+成功的次数

    2.4页面置换算法

    1.常见的5中页面置换的算法

    • 理想淘汰算法—最佳页面算法(OPT)
    • 先进先出页面淘汰算法(FIFO)
    • 最近最久未使用页面淘汰算法(LRU)
    • 最不经常使用(LFU)
    • 页面缓冲算法 (PBA)

    2.4.1最佳页面算法(OPT)

    算法简介,只是一种最理想话的算法。具有最好的性能但是最难实现。将永不使用的和长时间最不会被访问到的调出内存。

    作用:可以用来评价其余算法的好坏。

    注意点:如果预先装入内存的话,算是命中。没有预先装入的就算是失败的。

    案例:

    假定系统为某进程分配了三个物理块, 并考虑有以下的页面号引用串:

    • 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
    • 进程运行时, 先将7,0,1三个页面装入内存。(预先装入内存中)

    内存分配图如下:

    所以:缺页率为:30%

    期待下期再见!ヾ(•ω•`)o

  • 相关阅读:
    OneFlow v0.8.0正式发布
    C++类和对象(二)(类对象的存储方式)
    【多线程】线程管理
    申银万国期货通过ZStack Cube信创超融合一体机打造金融信创平台
    Flask部署pytorch服务
    webpack:css-loader和style-loader关系
    操作系统实验二、进程和线程管理(Windows 2学时)多线程创建
    FFmpeg和rtsp服务器搭建视频直播流服务
    技术4面+HR面,花了一个半月的时间准备,终于上岸阿里测开岗
    React之Hooks基础
  • 原文地址:https://blog.csdn.net/weixin_41957626/article/details/127636085