计组_虚拟存储器

news2024/12/22 23:10:16

2024.06.09:计算机组成原理学习笔记

第11节 虚拟存储器*

  • 1.1 分页思想
    • 1.1.1 虚拟地址/逻辑地址
    • 1.1.2 主存地址/物理地址
    • 1.1.3 页表
    • 1.1.4 分页方式的缺陷
  • 1.2 分段思想
    • 1.2.1 虚拟地址/逻辑地址
    • 1.2.2 主存地址/物理地址
    • 1.2.3 段表
  • 1.3 段页式思想
    • 1.3.1 虚拟地址/逻辑地址
    • 1.3.2 主存地址/物理地址
  • 1.4 页式虚拟存储器
    • 1.4.1 虚拟存储器的思想
    • 1.4.2 实页与虚页
    • 1.4.3 请求页表
    • 1.4.4 地址转换
    • 1.4.5 页表的缺陷(块表)
      • (1) 全相联映射块表
      • (2) 2路组相联块表
    • 1.4.7 CPU访存过程
      • (1) TLB命中,则页表一定命中
      • (2) TLB缺失,但页表命中
      • (3) TLB缺失,且页表也缺失
        • 主存中无空闲页框
        • 主存中有空闲页框
  • 1.5 段式虚拟存储器
  • 1.6 段页式虚拟存储器(了解不考)


存储系统中考频最高的一个考点。

基于操作系统中的内存管理来延展的

1.1 分页思想

学完cache之后,我们应该对分单位块这种思路非常熟悉。就像cache和主存一样,单单给主存划分是不够的,因为你想要做的是,在主存和cache之间找到一个数据交换的单位,这里也是一样的,在主存和进程之间找到一个数据交换的单位

  • 分页思想就是将主存划分固定长且比较小的存储块,称为页框(page frame)或物理块。
  • 将进程划分为固定长的程序块,称为页(page)
  • 页框==页

在这里插入图片描述

一旦出现这种给两个对象划分单元的情况,就是因为我们想要做数据交换或者信息交换

  • 程序运行时,进程的页会离散地装入到主存的页框中(分页思想的好处)

1.1.1 虚拟地址/逻辑地址

  • 进程里面的地址,程序员编程所使用的地址就是虚拟地址,不考虑进程有没有装到主存里去
  • 程序中所用的地址,并非最终放到主存后的地址
  • 逻辑地址的构成:页号 + 页内偏移量

在这里插入图片描述


1.1.2 主存地址/物理地址

  • 程序真正运行时被调入主存后所用的地址
  • 物理地址的构成:页框号 + 页内偏移量

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


如何得知进程的某一页会放入主存的哪个页面?

1.1.3 页表

  • 页表记录一个进程从页号到页框号的映射
  • 页表项(一行):页号 + 页框号
  • 由于页面大小固定,且页表会记录进程所有页面对应的页框号,因此页表中的页号可以隐含
  • 借助页表,我们就能知道某个逻辑地址对应的单元装入内存后的物理地址

在这里插入图片描述

此处注意映射的先后关系!

  • 主存与cache之间映射的先后关系
  • 主存与进程之间映射的先后关系

在这里插入图片描述


1.1.4 分页方式的缺陷

分页方式要求一个进程的所有页面都要一次性调入主存,这种方式没有考虑到局部性原理,使有限的页框资源被不活跃的页占有,浪费主存


1.2 分段思想

  • 将用户进程的逻辑地址空间划分成(大小不等的段)
  • 分段思想是面向(程序员)的思想,程序员可以根据代码里面不同的逻辑段将进程分段,由程序员自行决定
  • 分段思想只给进程分段,而不对主存进行操作可以根据逻辑对段的大小进行划分,但是主存你找不到逻辑
  • 段内的物理地址连续,段间可以离散(与分页的共同点)

在这里插入图片描述


1.2.1 虚拟地址/逻辑地址

  • 程序中所用的地址,并非最终放到主存之后的地址
  • 段号:段号的位数决定每个进程的段的最大数量
  • 段内偏移量:段内偏移量的位数决定进程内单个段的最大大小由于段的大小不同,你无法找到固定的段内偏移量。因此选择最大的段内偏移量,才能囊括

在这里插入图片描述
分段思想是为了方便程序员而提出的内存管理方案

  • 段号和段内偏移量这两个字段必须由用户显示提供

1.2.2 主存地址/物理地址

  • 程序真正运行时被调入主存后所用的地址
  • 由于段式系统的特殊性,并未将主存划分成任何单位,因此物理地址也不划分字段
  • 只要知道某段在主存内的基地址和段长,即可推出段中每个存储单元的物理地址

在这里插入图片描述


1.2.3 段表

  • 每个进程都有一张逻辑空间与内存空间映射的段表
  • 短号+段长+基址
  • 进程的短号顺序递增,因此在段表中可以隐含
  • 基址+段长就可以定位一个段在主存中的连续地址空间

在这里插入图片描述


1.3 段页式思想

在这里插入图片描述


1.3.1 虚拟地址/逻辑地址

程序中所用的地址,并非最终放到主存后的地址
在这里插入图片描述

  • 系统为每个进程建立一张段表
  • 每个段对应一个段表项
  • 一个段表项引出一张页表
  • 页表记录一个段占用了主存的哪些页框

1.3.2 主存地址/物理地址

在这里插入图片描述


步入正题:虚拟存储器

1.4 页式虚拟存储器

1.4.1 虚拟存储器的思想

在这里插入图片描述

前面的各种思想没有考虑到局部性原理,虚拟存储器的思想与cache类似,二者都考虑到了局部性原理

  • 虚拟存储器会将硬盘的一部分空间作为扩展的内存来使用,对用户虚拟出一片巨大的内存空间
  • 进程运行时,只将活跃的页面调入内存,用不到的页面存放在外存中,一旦需要就换入到内存用户不知道
  • 每个程序都认为自己在使用一个连续的、私有的地址空间,实际上它们使用的地址是虚拟地址
  • 操作系统通过一个映射表来将这些虚拟地址转换为物理地址

1.4.2 实页与虚页

  • 在分页存储,就是还没有虚拟的时候,进程划分的页,我们就把它叫做页
  • 在页式虚拟存储器里面,进程划分的这个单元我们就把它划分称虚页
  • 主存在普通的分页管理里面,它就叫做页框或者物理块
  • 在页式虚拟存储器里面,它叫实页,和虚页做对比

操作系统给每个进程都提供同样大小的虚拟地址空间

  • 每个进程的最大虚页数个数是确定的
  • 进程不一定把这些虚拟全部用完
  • 但是最大虚页个数决定了虚拟地址的虚页号

在这里插入图片描述
虚页个数比实页个数要多,否则引入虚存就毫无意义。因此,虚拟地址位数往往比物理地址位数要多


1.4.3 请求页表

每个虚拟页在页表中都会有一个对应表项
在这里插入图片描述

  • 状态位(存在位P):请求分页系统中只会将进程的一部分调入内存,还有一部分仍在外存的磁盘上,故需要页表中增加存在位字段指示该页是否已调入内存,供进程参考。
  • 访问字段A:用于记录本页在一段时间内被访问的次数,或记录本页最近已有多长时间未访问,提供给置换算法在选择换出页面时参考
  • 修改位M:标识该页在调入内存后是否被修改过,若被修改必须将该页重写到外存上,以保证外存中所保留的副本始终是最新的,供置换页面时参考
  • 外存地址:用于指出该页在外存上的地址,通常是物理块号,供调入该页时参考

1.4.4 地址转换

虚拟存储系统中,指令给出的地址是虚拟地址,因此CPU执行指令时,必须将虚拟地址转换成物理地址才可以访存
在这里插入图片描述

  • 页表基址寄存器:每个进程都有一个页表基址寄存器用于存放该进程的页表首地址

1.首先页表基址寄存器会把页表的基地址告诉你,你就会知道这个页表从哪里去查(告诉你图中绿色表在哪里)
2.接下来,根据虚拟地址里面的虚页号去查这张请求页表(去绿色表里查装入位,1为有,实页号有效)
3.最后,根据实页号去完成虚拟地址到物理地址的转换


1.4.5 页表的缺陷(块表)

  • 页表常驻内存,每次访问都需要访存,效率较低
  • 可以模仿cache的设计思路,设计一个“存放常用页表项的cache”以提升效率
  • 块表又叫TLB,是一种特殊的硬件,用于存放经常访问的虚页的页表项,可加速虚拟地址到物理地址的转换过程

(1) 全相联映射块表

在全相联映射下,TLB的tag就是虚页号
在这里插入图片描述


(2) 2路组相联块表

在这里插入图片描述


1.4.7 CPU访存过程

在这里插入图片描述

(1) TLB命中,则页表一定命中

根据虚页号在TLB中逐个对比每个表项的tag,若相等且有效位为1,则可将表象中的实页号和页内地址进行拼接,得到物理地址(主存地址)
在这里插入图片描述


(2) TLB缺失,但页表命中

路线:根据CPU给出的虚拟地址,得到1个物理地址,我们要访存!!!

  • 若tag相等但有效位为0,或TLB中不存在该表项,需要进行TLB缺失处理
  • 页表命中,将页表中的实页号与页内地址拼接在一起即可得到主存地址
  • 更新TLB表

(3) TLB缺失,且页表也缺失

缺失处理属于异常,发生异常时会中断指令的执行,处理结束后需要重新执行本条指令

主存中无空闲页框
  • 若页表中表项的有效位为0,则页表缺失,需要进行缺页处理,将需要的虚页从外存调入主存
  • 此时主存所有的页框都被占用,根据页置换算法将主存中某个页框中的虚页调出
  • 腾出的页框就会留给缺失的虚页,调入后存放在主存的此位置

主存中有空闲页框

根据请求页表里面的外存地址字段,从外存中读出虚页到主存的空闲页框


1.5 段式虚拟存储器

虚拟存储系统中,指令给出的地址是虚拟地址,因此CPU执行指令时必须将虚拟地址转换成物理地址才可以访存

在这里插入图片描述


1.6 段页式虚拟存储器(了解不考)

虚拟存储系统中,指令给出的地址是虚拟地址,因此CPU执行指令时必须将虚拟地址转换成物理地址才可以访存
在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1887871.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式技术专题 | TCP在分布式网络中的通信机制与底层实现

深入解析分布式网络中的TCP通信协议实现 跨地域通信与资源共享网络节点与主机的定义网络技术通信机制TCP/IP协议模型TCP/IP分层机制TCP的Socket链接处理控制TCP的优势和特性自动差错控制正确性和有序性 TCP的Socket使用端口在应用程序间通信TCP的Socket使用端口套接字操作 跨地…

5G(NR) NTN 卫星组网架构

5G(NR) NTN 卫星组网架构 参考 3GPP TR 38.821 5G NTN 技术适用于高轨、低轨等多种星座部署场景,是实现星地网络融合发展的可行技术路线。5G NTN 网络分为用户段、空间段和地面段三部分。其中用户段由各种用户终端组成,包括手持、便携站、嵌入式终端、车…

鸿蒙应用开发-时间屏幕

点击下载源码: https://download.csdn.net/download/liuhaikang/89509449 做一个时间屏幕,可以点击切换白色和黑色,有渐变效果,使用到了鸿蒙的动画效果。 在这个设计中,我们首先引入了通用能力包,以实现功…

uniapp做小程序内打开地图展示位置信息

使用场景&#xff1a;项目中需要通过位置信息打开地图查看当前位置信息在地图那个位置&#xff0c;每个酒店有自己的经纬度和详细地址&#xff0c;点击地图按钮打开内置地图如图 方法如下&#xff1a; <view class"dttu" click"openMap(info.locationY,info.…

24/07/02数据结构(1.1201)算法效率顺序表

数据结构基本内容:1.时间复杂度 空间复杂度2.顺序表链表3.栈 队列4.二叉树5.排序 数据结构是存储,组织数据的方式.指相互之间存在一种或多种特定关系的数据元素的集合 算法是定义良好的计算过程.取一个或一组值为输入并产生一个或一组值为输出. 需要知道虽然选择题有20-30个…

什么是Java泛型擦除?

JDK1.5之后引入泛型擦除的概念。 目录 验证逻辑 实际编译后的结果&#xff1a; 验证例子&#xff1a; 两个类型相同&#xff0c;表面泛型都被擦出了&#xff0c;都是Arraylist。 List<String> list1 new Arraylist<>(); List<Integer> list2 new Arrayli…

自动化一些操作

下拉选择框 from selenium import webdriver from time import sleep # 导包 from selenium.webdriver.support.select import Select driver webdriver.Edge() driver.get(r"D:\WORK\ww\web自动化_day01_课件笔记资料代码\web自动化_day01_课件笔记资料代码\02_其他资料…

配置windows环境下独立浏览器爬虫方案【不依赖系统环境与chrome】

引言 由于部署浏览器爬虫的机器浏览器版本不同&#xff0c;同时也不想因为部署了爬虫导致影响系统浏览器数据&#xff0c;以及避免爬虫过程中遇到的chrome与webdriver版本冲突。我决定将特定版本的chrome浏览器与webdriver下载到项目目录内&#xff0c;同时chrome_driver在初始…

【车载开发系列】SPI总线通信技术

【车载开发系列】SPI总线通信技术 【车载开发系列】SPI总线通信技术 【车载开发系列】SPI总线通信技术一. 什么是SPI二. 应用范围三. 协议特点1&#xff09;传输速率2&#xff09;主要功能3&#xff09;拓扑结构4&#xff09;接口配置 四. SPI总线原理五. 信号列表六. SPI传输时…

攻防世界-WEB-catcat-new

前言 .................. 开干 正文 信息收集 有意思 估计是权限不够导致无法访问 我们点击几只小猫看看有什么东西 好的,?File 试试看是否存在任意文件读取 思路 成功,接下来我们尝试获取历史记录 这里补充一下知识点 /proc/self proc是一个伪文件系统&#xff0c;它提…

PDF文档如何统计字数,统计PDF文档字数的方法有哪些?

在平时使用pdf阅读或者是处理文档的时候&#xff0c;常常需要统计文档的字数。pdf在查看文字时其实很简单。 PDF文档是一种常见的电子文档格式&#xff0c;如果需要对PDF文档中的字数进行统计&#xff0c;可以使用以下方法&#xff1a; Adobe Acrobat DC&#xff1a;Adobe Ac…

Linux 防火墙开放端口

启动防火墙服务&#xff1a;systemctl start firewalld 查看防火墙开放端口 &#xff1a;firewall-cmd --list-ports 开放3306端口&#xff1a;firewall-cmd --zonepublic --add-port2375/tcp --permanent 防火墙重启&#xff1a;firewall-cmd --reload

html+css+js气球消除小游戏

气球消除小游戏 消除15个就成功 源码在图片后 点赞加关注&#xff0c;谢谢 左上角的数字显示消除气球的数量 定时随机生成气球 &#x1f388;&#x1f388;&#x1f388; 图片 源代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset&…

2.3.2 主程序和外部IO交互 (文件映射方式)----IO Client实现

2.3.2 主程序和外部IO交互 &#xff08;文件映射方式&#xff09;----IO Client C实现 和IOServer主要差别&#xff1a; 1 使用Open_Client 连接 2 一定要先打开IOServer&#xff0c;再打开IO_Client 效果显示 1 C 代码实现 1.1 shareddataClient.h 头文件中引用 和sharedd…

0 TMS320F28379D 开坑

开坑原因 最近开始做实验&#xff0c;实验室的主控采用的是F2812FPGA&#xff0c;属于够用但不好用的状态。FPGA用于生成调制信号&#xff0c;DSP完成采样和控制。师兄师姐研究拓扑及调制策略&#xff0c;对驱动数量以及驱动逻辑有比较高的要求&#xff0c;因此不好脱离FPGA&a…

机器学习原理之 -- 支持向量机分类:由来及原理详解

支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是统计学习理论的一个重要成果&#xff0c;广泛应用于分类和回归问题。SVM以其高效的分类性能和良好的泛化能力在机器学习领域中占据重要地位。本文将详细介绍支持向量机的由来、基本原理、构建过程及其优缺点。…

【Excel操作】Python Pandas判断Excel单元格中数值是否为空

判断Excel单元格中数值是为空&#xff0c;主要有下面两种方法&#xff1a; 1. pandas.isnull 2. pandas.isna判断Excel不为空&#xff0c;也有下面两种方法&#xff1a; 1. pandas.notna 2. pandas.notnull假设有这样一张Excel的表格 我们来识别出为空的单元格 import panda…

基于Hadoop平台的电信客服数据的处理与分析①项目准备阶段---项目技术预研(技术架构)

任务描述 掌握项目的总体功能&#xff0c;及实现流程。预习项目中所使用到的技术和知识点。 任务指导 一、项目效果展示 二、项目架构 1、总体架构&#xff1a; 2、技术架构 技术清单&#xff1a; 功能 组件 说明 消息中间件Kafka消息队列数据采集Flume日志采集工具存储…

js获取当前浏览器地址,ip,端口号等等

前言&#xff1a; js获取当前浏览器地址&#xff0c;ip&#xff0c;端口号等等 window.location属性查询 具体属性&#xff1a; 1、获取他的ip地址 window.location.hostname 2、获取他的端口号 window.location.port 3、获取他的全路径 window.location.origin 4、获取…

机器学习 C++ 的opencv实现SVM图像二分类的测试 (三)【附源码】

机器学习 C 的opencv实现SVM图像二分类的测试 (三) 数据集合下载地址&#xff1a;https://download.csdn.net/download/hgaohr1021/89506900 根据上节得到的svm.xml&#xff0c;测试结果为&#xff1a; #include <stdio.h> #include <time.h> #include <o…