当前位置: 首页 > article >正文

计算机组成原理——存储系统(四)

当晨曦的第一缕光线划破夜空,那是宇宙给奋斗者的信号——光明属于那些在黑暗中依旧寻找希望的人。在这条通往梦想的道路上,每一步都充满挑战,但正是这些挑战定义了你的坚韧与不屈。不要满足于现状,因为你的潜力远超想象;不要畏惧失败,因为它只是成功的前奏。

燃起心中那团永不熄灭的火焰,让它成为指引你穿越重重困难的灯塔。每一次挫折都是成长的机会,每一个障碍都是攀登高峰的基石。当你决定不再被外界的声音所左右,而是听从内心深处那份对卓越的渴望时,你就已经踏上了通往伟大的征程。

让热情点燃行动,用决心塑造未来。无论前方有多少未知,只要你敢于迈出第一步,就没有什么能够阻挡你前进的脚步。记住,真正的胜利者不是从未跌倒过的人,而是在每次跌倒后都能重新站起,继续前行的人。

此刻,是你释放全部力量的时候了。挥洒汗水,磨砺意志,向着目标全力以赴。因为你不仅在追逐梦想,更是在塑造一个更好的自己。在这个过程中,你会发现,最强大的对手往往就是昨天的自己。所以,不断超越自我,打破界限,直到站在巅峰,俯瞰曾经走过的路,你会明白这一切的努力是多么值得。

让我们携手并进,在这波澜壮阔的人生旅程中,以无畏之心面对一切,用热血和汗水书写属于我们的辉煌篇章。因为我们深知:唯有不断挑战极限,方能成就非凡人生。现在,是时候点亮心中的光芒,照亮前行的道路,向着无限可能的世界,勇敢迈进!加油,追梦人!你的传奇故事,正在上演!

计算机组成原理资源网

https://www.wenjingketang.com/这里面有ppt课后习题及答案,需要的可以自行下载

4.6 虚拟存储器

虚拟存储器(Virtual Memory)是现代计算机系统中实现内存管理的核心技术之一。它通过软硬件协同工作,扩展了物理内存的容量,并为程序提供了一种透明的、统一的存储访问方式。虚拟存储器的核心思想是允许程序使用比物理内存更大的地址空间,同时通过动态调度机制将程序实际需要的数据加载到物理内存中。

本章将系统性地探讨虚拟存储器的基本概念、实现方式(包括页式、段式和段页式虚拟存储器)以及关键的替换算法。通过深入分析这些内容,读者可以全面理解虚拟存储器的工作原理及其在操作系统中的重要性。


4.6.1 虚拟存储器的基本概念

1. 传统存储管理的局限性

在虚拟存储器出现之前,计算机系统主要采用物理内存的直接管理模式,例如:

  • 单一连续分配:整个内存被一个程序独占,资源利用率极低。

  • 固定分区分配:内存被划分为固定大小的区域,容易产生内部碎片。

  • 动态分区分配:通过动态分配内存块,但存在外部碎片问题。

这些方法的共同缺陷是:

  1. 内存容量限制:程序必须完全装入内存才能运行,无法支持大型程序。

  2. 地址空间隔离性差:多个程序共享内存时容易相互干扰。

  3. 资源浪费:静态分配导致碎片化问题。

2. 虚拟存储器的定义

虚拟存储器是一种将物理内存与辅助存储(如磁盘)结合的技术,它通过地址映射机制,使程序能够以统一的虚拟地址访问内存,而实际数据可能分布在物理内存或磁盘上。其核心特性包括:

  • 透明性:程序无需感知物理内存和磁盘的差异。

  • 动态性:数据按需加载到内存,而非一次性全部装入。

  • 隔离性:每个程序拥有独立的虚拟地址空间,避免互相干扰。

3. 虚拟存储器的核心思想
  • 地址空间扩展:程序可使用的地址范围远大于物理内存容量。

  • 按需分页/分段:仅加载当前需要的部分到内存,其余保留在磁盘。

  • 页面置换:当物理内存不足时,通过替换算法淘汰不常用的页面。

4. 关键技术
  1. 地址转换机制:通过硬件(如MMU)将虚拟地址转换为物理地址。

  2. 缺页中断处理:当访问的页面不在内存时触发中断,由操作系统从磁盘加载。

  3. 页面置换算法:决定哪些页面应被换出内存以腾出空间。

5. 虚拟存储器的优缺点
  • 优点

    • 支持大程序运行,突破了物理内存限制。

    • 提高内存利用率,减少碎片。

    • 增强程序间隔离性和安全性。

  • 缺点

    • 地址转换和页面置换引入额外开销。

    • 频繁的缺页中断可能导致性能下降(抖动现象)。


4.6.2 页式虚拟存储器

1. 分页机制的原理

页式虚拟存储器将虚拟地址空间和物理内存划分为固定大小的块(称为页和页框)。典型页大小为4KB或2MB。

  • 页表(Page Table):记录虚拟页到物理页框的映射关系。

    • 每个进程拥有独立的页表。

    • 页表项(PTE)包含物理页框号、有效位、修改位等控制信息。

2. 地址转换过程
  1. 虚拟地址分解

    | 虚拟页号 (VPN) | 页内偏移 (Offset) |
  2. 页表查询:通过VPN查找页表项,获取物理页框号(PFN)。

  3. 物理地址合成

    | 物理页框号 (PFN) | 页内偏移 (Offset) |

示例:假设页大小为4KB(12位偏移),32位虚拟地址中高20位为VPN,低12位为偏移量。

3. 加速地址转换:TLB

由于页表存储在内存中,每次地址转换需访问内存,效率低下。因此引入转换后备缓冲器(TLB)——一种高速缓存,用于保存最近使用的页表项。TLB命中时,地址转换无需访问内存。

4. 页式存储器的优缺点
  • 优点

    • 内存分配简单,无外部碎片。

    • 支持动态共享(通过映射同一物理页)。

  • 缺点

    • 页内仍可能产生内部碎片。

    • 页表占用内存较大(尤其是大地址空间)。

5. 多级页表与反向页表
  • 多级页表:将页表分层管理,减少内存占用(如x86的二级页表)。

  • 反向页表(Inverted Page Table):以物理页框为索引,节省空间但查询复杂度高。


4.6.3 段式虚拟存储器

1. 分段机制的原理

段式虚拟存储器以程序的逻辑结构(如代码段、数据段、堆栈段)为单位划分内存。每个段具有可变长度,并赋予不同的访问权限。

  • 段表(Segment Table):记录段基址、段限长、访问权限等信息。

  • 地址转换

    | 段号 (SN) | 段内偏移 (Offset) |

    通过段号查找段表,验证偏移是否在段限长内,最终生成物理地址。

2. 分段的特点
  • 逻辑独立性:段对应程序模块,便于共享和保护。

  • 动态扩展:堆栈段和堆段可按需增长。

  • 外部碎片:由于段长度可变,内存分配可能产生碎片。

3. 段式存储器的优缺点
  • 优点

    • 符合程序逻辑结构,便于模块化开发。

    • 支持细粒度访问控制(如代码段只读)。

  • 缺点

    • 内存管理复杂,存在外部碎片。

    • 段大小不固定,导致分配效率低。


4.6.4 段页式虚拟存储器

1. 段页式设计的动机

结合分段和分页的优点:

  • 分段:提供逻辑模块化管理和访问控制。

  • 分页:解决外部碎片问题,提高内存利用率。

2. 地址转换流程
  1. 段式转换:根据段号查找段基址和页表地址。

  2. 页式转换:使用段内偏移的页号查询页表,最终生成物理地址。

地址格式

| 段号 (SN) | 页号 (PN) | 页内偏移 (Offset) |
3. 管理结构
  • 段表:每个段对应一个页表。

  • 页表:与页式系统类似,但按段划分。

4. 优缺点分析
  • 优点

    • 兼具分段和分页的优势。

    • 适合复杂程序的内存管理。

  • 缺点

    • 地址转换需两次查表,效率较低。

    • 管理数据结构复杂,占用更多内存。


4.6.5 替换算法

1. 替换算法的目标

当物理内存不足时,选择被替换的页面,需平衡以下因素:

  • 低缺页率:减少磁盘I/O次数。

  • 低开销:算法本身不应消耗过多资源。

  • 公平性:避免某些进程频繁被替换。

2. 经典替换算法
(1) 先进先出(FIFO)
  • 原理:替换最早进入内存的页面。

  • 实现:维护一个页面队列,新页面加入队尾,替换队首页面。

  • 缺点:可能淘汰频繁使用的页面(Belady现象)。

(2) 最近最少使用(LRU)
  • 原理:替换最长时间未被访问的页面。

  • 实现:通过时间戳或链表维护访问顺序。

  • 优点:理论上接近最优性能。

  • 缺点:硬件实现复杂,时间戳维护开销大。

(3) 最佳置换(OPT)
  • 原理:替换未来最长时间不被访问的页面(理论最优)。

  • 问题:需预知未来访问序列,实际不可实现,仅用于性能比较。

(4) 时钟算法(Clock)
  • 原理:近似LRU,使用环形链表和访问位(Reference Bit)。

  • 步骤

    1. 遍历页面,若访问位为1则置0,否则替换。

    2. 循环直至找到可替换页面。

  • 改进:多级时钟算法(考虑修改位,优先替换未修改页面)。

(5) 最不经常使用(LFU)
  • 原理:替换访问次数最少的页面。

  • 实现:为每个页面维护计数器。

  • 问题:历史累计影响大,难以反映近期访问模式。

3. 算法性能比较
算法实现复杂度缺页率适用场景
FIFO简单系统
LRU通用系统
Clock资源受限环境
LFU访问模式稳定
4. 实际系统中的应用
  • Linux:采用改进的Clock算法(二次机会法)。

  • Windows:使用工作集模型结合LRU。


总结

虚拟存储器通过分层存储和动态调度机制,显著提升了计算机系统的资源利用率和程序兼容性。从页式、段式到段页式,不同的实现方式各有优劣,需根据具体场景权衡选择。替换算法作为虚拟存储器的核心组件,其设计直接影响系统性能。未来,随着非易失性内存(NVM)技术的发展,虚拟存储器的实现方式可能迎来新的变革。

相关文章:

计算机组成原理——存储系统(四)

当晨曦的第一缕光线划破夜空,那是宇宙给奋斗者的信号——光明属于那些在黑暗中依旧寻找希望的人。在这条通往梦想的道路上,每一步都充满挑战,但正是这些挑战定义了你的坚韧与不屈。不要满足于现状,因为你的潜力远超想象&#xff1…...

飞算JavaAI:开辟 AI + 行业趋势的编程新范式

在当今数字化浪潮汹涌澎湃的时代,科技的快速发展正以前所未有的速度重塑着各个行业的面貌。人工智能(AI)作为其中最具变革性的力量之一,已经深入渗透到众多领域,从金融、医疗到制造业、教育等,无一不在经历…...

Axure PR 9 动效 设计交互

大家好,我是大明同学。 这期内容,我们来用Axure制作一组动效。 动效 创建动效元件 1.打开一个新的 RP 文件并在画布上打开 Page 1。 2.选中画布,将画布填充颜色设置为蓝色(#0052D9)。 3.在元件库中拖出一个圆形元件,选中矩形元件&…...

DeepSeek 本地部署

DeepSeek 本地部署 一、引言二、为什么选择本地部署 DeepSeek?三、具体步骤1.下载Ollama并安装(Ollama 提供 API 支持)2. 部署 deepseek-r12.下载Chatbox并配置为本地DeepSeek (Chatbox 提供 UI 界面) 一、引言 近期&…...

langchain教程-3.OutputParser/输出解析

前言 该系列教程的代码: https://github.com/shar-pen/Langchain-MiniTutorial 我主要参考 langchain 官方教程, 有选择性的记录了一下学习内容 这是教程清单 1.初试langchain2.prompt3.OutputParser/输出解析4.model/vllm模型部署和langchain调用5.DocumentLoader/多种文档…...

JavaScript系列(62)--实时通信系统实现详解

JavaScript实时通信系统实现详解 🔄 今天,让我们深入探讨JavaScript的实时通信系统实现。实时通信是现代Web应用中不可或缺的一部分,它能够提供即时的数据交互和更好的用户体验。 WebSocket通信基础 🌟 💡 小知识&am…...

网络工程师 (20)计算机网络的概念

一、定义 计算机网络是指将地理位置不同、具有独立功能的多台计算机及其外部设备,通过通信线路及通信设备连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现信息传递和资源共享的计算机通信系统。 二、组成 资源子网&…...

Unity UI Default Shader分析

文章目录 UI默认材质和Default ShaderShader的属性定义Mask组件支持RectMask2D组件支持其他支持使用Unity UGUI时经常有自定义shader的需求,虽然我们可以直接按照shader lab的规范写出shader,使用也没问题,但如果能让自定义shader符合UI shader的规范,支持Mask,Rect2DMask…...

IEEE 802.3/802.2 | LLC / SNAP

注:本文为 “IEEE 802.3/802.2 | LLC / SNAP” 相关文章合辑。 未整理去重。 第三篇部分内容出自第二篇。 802.2 协议 haoay321 2010-01-28 20:52:02 LLC 协议 LLC(Logic Link Control,逻辑链路控制)是 IEEE 802.2 协议中规定…...

【Linux】24.进程间通信(3)

文章目录 3.6 systemv共享内存3.6.1 共享内存函数3.6.3 一个简单的共享内存代码实现3.6.4 一个复杂的共享内存代码实现3.6.4 key和shmid的主要区别: 3.7 systemv消息队列(了解)3.8 systemv信号量(了解)进程互斥四个问题理解信号量…...

【自然语言处理】TextRank 算法提取关键词(Python实现)

文章目录 前言PageRank 实现TextRank 简单版源码实现jieba工具包实现TextRank 前言 TextRank 算法是一种基于图的排序算法,主要用于文本处理中的关键词提取和文本摘要。它基于图中节点之间的关系来评估节点的重要性,类似于 Google 的 PageRank 算法。Tex…...

Java-128陷阱、抽象类和接口的区别、为什么 hashCode()需要和equals()一起重写、封装继承多态

128陷阱 Integer a 100; Integer b 100; System.out.println(ab); //true Integer c 1000; Integer d 1000; System.out.println(cd);//false int e 1000; System.out.println(ce);//true 分析以上代码运行的结果 源码: Integer a128; 编译器执行的是&…...

使用 Python 编程语言来实现机器学习小项目教程案例

以下是一个简单的机器学习小项目教程案例,使用 Python 编程语言和 Scikit-learn 库来实现一个分类任务。我们将使用经典的鸢尾花(Iris)数据集来训练一个分类器,预测鸢尾花的种类。 项目目标 使用机器学习算法对鸢尾花数据集进行分类,预测鸢尾花的类别(Setosa、Versicolor…...

如何评价镜头的好坏?光学镜头的一种评价标准

1光学传递函数MTF MTF是什么? 光学传递函数(optical transfer function)是指以空间频率为变量,表征成像过程中调制度和横向相移的相对变化的函数。光学传递函数是光学系统对空间频谱的滤波变换。一个非相干照明的光学成像系统&a…...

openGauss 3.0 数据库在线实训课程1:学习数据库状态查看

openGauss数据库状态查看 前提 我正在参加21天养成好习惯| 第二届openGauss每日一练活动 课程详见:openGauss 3.0.0数据库在线实训课程 学习目标 学习从操作系统层面和使用openGauss工具查看数据库的状态、版本和数据文件目录。 课程作业 gs_ctl是openGauss提…...

Stable Diffusion的入门介绍和使用教程

Stable Diffusion是一个文本到图像的潜在扩散模型,由CompVis、StabilityAI和LAION的研究人员和工程师创建。它使用来自LAION-5B数据库子集的512x512图像进行训练。使用这个模型,可以生成包括人脸在内的任何图像,因为有开源的预训练模型&#…...

docker安装es及分词器ik

系统是macos,docker是docker-desktop 拉取镜像 docker pull bitnami/elasticsearch 启动docker镜像 docker create -e "discovery.typesingle-node" \ --name elasticsearch1 -p 9200:9200 -p 9300:9300 \ bitnami/elasticsearch:8.17.1 测试是否好…...

记一次框架利用接管学工系统

视频教程在我主页简介或专栏里 链接:观看更多 Springboot actuator (1)某学院学工管理系统存在Springboot actuator未授权,泄露了很多接口地址,其他接口就不过多介绍了,这里具体讲述这次利用到的httptrace和jolokia两…...

低代码提升交付效率的公式计算

低(无)代码平台(后统称“低代码”)能够提升数字化应用建设、交付效率,已经成为IT从业人员的共识。目前,大部分CIO/CDO都能清晰定位和认知低代码的特点和作用。但仍然有人认为,使用了低代码工具软…...

深入解析:如何利用 Python 爬虫获取商品 SKU 详细信息

在电商领域,SKU(Stock Keeping Unit,库存单位)详细信息是电商运营的核心数据之一。它不仅包含了商品的规格、价格、库存等关键信息,还直接影响到库存管理、价格策略和市场分析等多个方面。本文将详细介绍如何利用 Pyth…...

java后端开发面试常问

面试常问问题 1 spring相关 &#xff08;1&#xff09;Transactional失效的场景 <1> Transactional注解默认只会回滚运行时异常&#xff08;RuntimeException&#xff09;&#xff0c;如果方法中抛出了其他异常&#xff0c;则事务不会回滚&#xff08;数据库数据仍然插…...

第六期:开放银行突围战 - API经济下的跨域经营合规框架

一、监管沙盒中的API兵法 1.1 开放银行接口的军备等级 人行《商业银行应用程序接口管理规范》(2025修订版): 安全分级: L1(查询类):日均调用量≤10万次 (如余额查询) L2(交易类):必须双因素认证 (如转账) L3(决策类):需人工智能审计跟踪 (如授信评估) 实战接口设计…...

全程Kali linux---CTFshow misc入门(25-37)

第二十五题&#xff1a; 提示&#xff1a;flag在图片下面。 直接检查CRC&#xff0c;检测到错误&#xff0c;就直接暴力破解。 暴力破解CRC的python代码。 import binascii import struct def brute_force_ihdr_crc(filename): # 读取文件二进制数据 with open(filen…...

Axure大屏可视化动态交互设计:解锁数据魅力,引领决策新风尚

可视化组件/模板预览&#xff1a;https://8dge09.axshare.com 一、大屏可视化技术概览 在数据驱动决策的时代&#xff0c;大屏可视化技术凭借直观、动态的展示方式&#xff0c;已成为众多行业提升管理效率和优化决策过程的关键工具。它能够将复杂的数据转化为易于理解的图形和…...

《AI “造脸术”:生成对抗网络打造超真实虚拟人脸》

在科技飞速发展的当下&#xff0c;人工智能的浪潮席卷而来&#xff0c;其中生成对抗网络&#xff08;GANs&#xff09;技术以其独特的魅力&#xff0c;成为了生成高度真实感虚拟人脸的强大引擎。无论是影视制作中虚拟角色的塑造&#xff0c;还是游戏领域中多样化角色形象的构建…...

常用工具类——Collections集合框架

常用工具类——Collections集合框架 Collections 是 JDK 提供的一个工具类&#xff0c;提供了一系列静态方法&#xff0c;分类来复习&#xff01; 1.排序操作 reverse(List list) :反转顺序shuffle(List list) &#xff1a; 洗牌&#xff0c;将顺序打乱sort(List list) &…...

Verilog语言学习总结

Verilog语言学习&#xff01; 目录 文章目录 前言 一、Verilog语言是什么&#xff1f; 1.1 Verilog简介 1.2 Verilog 和 C 的区别 1.3 Verilog 学习 二、Verilog基础知识 2.1 Verilog 的逻辑值 2.2 数字进制 2.3 Verilog标识符 2.4 Verilog 的数据类型 2.4.1 寄存器类型 2.4.2 …...

软件工程-数据流图DFD

数据流图&#xff08;DFD&#xff09;是一种图形化技术&#xff0c;它描绘信息流和数据从输入移动到输出的过程中经受的变换。 数据流图是系统逻辑功能和图形表示&#xff0c;即使不是专业的计算机人员也容易理解它&#xff0c;因此是分析员与用户之间极好的通信工具。 设计数…...

为什么需要同时重写equals方法和hashCode方法

在 Java 编程中&#xff0c;equals 和 hashCode 是两个非常重要的方法&#xff0c;它们用于确定对象的相等性和哈希值。这两个方法通常需要同时重写&#xff0c;否则会导致哈希表类&#xff08;如 HashMap、HashSet&#xff09;的行为异常。因此&#xff0c;理解这两个方法的工…...

c++11总结26——std::regex

std::regex 是 C11 引入的 正则表达式库&#xff0c;用于 字符串匹配、搜索和替换。 &#x1f539; 头文件&#xff1a;#include <regex> &#x1f539; 命名空间&#xff1a;std &#x1f539; 支持的匹配模式&#xff1a;ECMAScript&#xff08;默认&#xff09;、POS…...