网络工程师 (8)存储管理

news2025/1/30 15:52:26

一、页式存储基本原理

(一)内存划分

       页式存储首先将内存物理空间划分成大小相等的存储块,这些块通常被称为“页帧”或“物理页”。每个页帧的大小是固定的,例如常见的页帧大小有4KB、8KB等,这个大小由操作系统决定。同时,操作系统会为每个页帧分配一个唯一的编号,即页帧号。

(二)程序划分

       与内存物理空间的划分相对应,页式存储也将要运行的程序的逻辑地址空间划分成大小与页帧相同的“页”。这些页在逻辑上连续,但在物理内存中可以不连续存放。每个页也被分配一个唯一的编号,即页号。

(三)页表管理

       页式存储通过页表来管理逻辑页与物理页帧之间的映射关系。页表是一个数据结构,它记录了每个逻辑页对应的物理页帧号。当程序访问某个逻辑地址时,操作系统会首先查找页表,找到该逻辑地址对应的物理页帧号,然后结合页内偏移量(即逻辑地址中除去页号的部分)来确定最终的物理地址。

(四)内存分配与访问

  1. 内存分配:当程序被装入内存时,操作系统会根据程序的逻辑页大小,将程序的页逐一装入到内存中的空闲页帧中。这个过程可以是静态的(即程序执行前全部装入),也可以是动态的(即程序执行过程中根据需要装入)。
  2. 内存访问:当程序运行时,它会产生对内存的逻辑地址访问请求。操作系统会利用页表将这些逻辑地址转换为物理地址,然后访问相应的内存位置。

(五)页式存储的优点

  1. 提高内存利用率:由于页的大小是固定的,且页在内存中可以不连续存放,因此页式存储能够更有效地利用内存空间,减少内存碎片。
  2. 支持虚拟内存:页式存储是虚拟内存技术的基础之一。通过页表,操作系统可以实现逻辑地址与物理地址的分离,从而支持比物理内存更大的虚拟内存空间。
  3. 便于内存保护:页式存储可以为每个页设置访问权限,从而实现对内存的保护。例如,可以防止某个进程访问不属于它的内存区域。

(六)页式存储的缺点

  1. 页表开销:页表需要占用一定的内存空间来存储映射关系。对于大型程序或需要支持大量进程的操作系统来说,页表的开销可能会比较大。
  2. 缺页中断:在动态内存分配的情况下,当程序访问一个尚未装入内存的页时,会产生缺页中断。操作系统需要处理这个中断,将所需的页从磁盘调入内存,这会增加程序的执行时间。

二、页式置换算法

1.先进先出(FIFO)页面置换算法

       FIFO算法选择最早进入内存的页面进行置换。它维护一个页面队列,新页面进入队列尾部,缺页时从队列头部移除页面。该算法实现简单,开销小,但可能导致贝拉迪异常,即当增加分配给进程的物理块数时,缺页中断的次数反而增加。这是因为FIFO算法没有考虑页面的访问频率或重要性,只是简单地按照页面进入内存的顺序进行置换。

2.最近最少使用(LRU)页面置换算法

       LRU算法选择最长时间未被访问的页面进行置换。它基于页面的使用历史进行决策,能够减少页面错误和磁盘I/O操作的数量。LRU算法通常使用链表或栈数据结构来维护页面访问顺序,每次访问页面时,将该页面移到链表头部或栈顶,缺页时从链表尾部或栈底移除页面。虽然LRU算法性能较好,但实现复杂,需要维护链表或栈,并在每次内存访问时更新数据结构。此外,LRU算法还需要较高的硬件辅助,如使用硬件计数器来跟踪页面的访问时间。

3.最优页面置换算法(OPT)

       OPT算法选择未来最长时间内不会被访问的页面进行置换。然而,由于操作系统无法预知未来的页面请求,因此OPT算法主要用于理论分析,而不是实际操作系统中。OPT算法可以作为衡量其他页面置换算法性能的基准。尽管OPT算法无法实现,但它提供了一种理想化的页面置换策略,即选择未来最长时间内不会被访问的页面进行置换,以最小化页面故障次数并最大化命中次数。

4.第二次机会页面置换算法

       第二次机会算法是FIFO算法的一个变种。在淘汰一个页面之前,它会检查该页面是否已经被修改过(或检查其访问位R)。如果页面未被修改(或访问位为0),则直接淘汰;如果已被修改(或访问位为1),则将其访问位清零,并将其重新插入到队列尾部,给予它第二次机会。这样,第二次机会算法避免了贝拉迪异常,因为它允许页面在未被访问时获得第二次机会。该算法实现相对简单,性能优于FIFO。

5.时钟页面置换算法(CLOCK)

       CLOCK算法是第二次机会算法的一个高效实现。它将所有页面保存在一个类似钟面的环形链表中,一个指针指向最老的页面。缺页时,从指针指向的页面开始检查,如果其访问位为0,则淘汰该页面;如果为1,则清零访问位并将指针前移一位,继续检查直到找到访问位为0的页面。CLOCK算法实现简单且高效,避免了在链表中频繁移动页面的开销。它适用于需要快速响应的场景,如实时操作系统。

6.最不经常使用(LFU)页面置换算法

       LFU算法选择访问次数最少的页面进行置换。它为每个页面关联一个计数器,记录该页面的访问次数。缺页时,置换计数器值最小的页面。LFU算法能够反映页面的使用情况,但可能受到初始阶段大量使用但随后不再使用的页面的影响。此外,LFU算法实现相对复杂,需要维护计数器并更新其值。在实际应用中,LFU算法可能不如LRU算法有效,因为LRU算法能够更好地利用页面的时间局部性。

7.工作集页面置换算法

       工作集算法基于进程的工作集进行页面置换。工作集是指进程在过去一段时间内实际访问过的页面的集合。缺页时,找出一个不在工作集中的页面并淘汰它。工作集算法能够适应进程的内存访问模式变化,提高内存利用率和程序性能。然而,它需要维护一个工作集数据结构,并动态更新其内容。这增加了算法的复杂性和开销。

 结语  

保持谦逊的态度

有助于不断学习和成长

!!!

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

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

相关文章

实验一---典型环节及其阶跃响应---自动控制原理实验课

一 实验目的 1.掌握典型环节阶跃响应分析的基本原理和一般方法。 2. 掌握MATLAB编程分析阶跃响应方法。 二 实验仪器 1. 计算机 2. MATLAB软件 三 实验内容及步骤 利用MATLAB中Simulink模块构建下述典型一阶系统的模拟电路并测量其在阶跃响应。 1.比例环节的模拟电路 提…

【BQ3568HM开发板】如何在OpenHarmony上通过校园网的上网认证

引言 前面已经对BQ3568HM开发板进行了初步测试,后面我要实现MQTT的工作,但是遇到一个问题,就是开发板无法通过校园网的认证操作。未认证的话会,学校使用的深澜软件系统会屏蔽所有除了认证用的流量。好在我们学校使用的认证系统和…

PythonFlask框架

文章目录 处理 Get 请求处理 POST 请求应用 app.route(/tpost, methods[POST]) def testp():json_data request.get_json()if json_data:username json_data.get(username)age json_data.get(age)return jsonify({username: username测试,age: age})从 flask 中导入了 Flask…

【电工基础】1.电能来源,触电伤害,触电预防,触电急救

一。电能来源 1.电能来源 发电-》输电-》变电-》配电 2.分配电 一类负荷 如果供电中断会造成生命危险,造成国民经济的重大损失,损坏生产的重要设备以致使生产长期不能恢复或产生大量废品,破坏复杂的工艺过程,以及破坏大…

大数据学习之Kafka消息队列、Spark分布式计算框架一

Kafka消息队列 章节一.kafka入门 4.kafka入门_消息队列两种模式 5.kafka入门_架构相关名词 Kafka 入门 _ 架构相关名词 事件 记录了世界或您的业务中 “ 发生了某事 ” 的事实。在文档中 也称为记录或消息。当您向 Kafka 读取或写入数据时,您以事件的 形式执行…

SQL Server查询计划操作符(7.3)——查询计划相关操作符(5)

7.3. 查询计划相关操作符 38)Flow Distinct:该操作符扫描其输入并对其去重。该操作符从其输入得到每行数据时即将其返回(除非其为重复数据行,此时,该数据行会被抛弃),而Distinct操作符在产生任何输出前将消费所有输入。该操作符为逻辑操作符。该操作符具体如图7.2-38中…

单片机基础模块学习——NE555芯片

一、NE555电路图 NE555也称555定时器,本文主要利用NE555产生方波发生电路。整个电路相当于频率可调的方波发生器。 通过调整电位器的阻值,方波的频率也随之改变。 RB3在开发板的位置如下图 测量方波信号的引脚为SIGHAL,由上面的电路图可知,NE555已经构成完整的方波发生电…

ts 进阶

吴悠讲编程 : 20分钟TypeScript进阶!无废话快速提升水平 前端速看 https://www.bilibili.com/video/BV1q64y1j7aH

【C++】STL介绍 + string类使用介绍 + 模拟实现string类

目录 前言 一、STL简介 二、string类 1.为什么学习string类 2.标准库中的string类 3.auto和范围for 4.迭代器 5.string类的常用接口说明 三、模拟实现 string类 前言 本文带大家入坑STL,学习第一个容器string。 一、STL简介 在学习C数据结构和算法前,我…

【Redis】List 类型的介绍和常用命令

1. 介绍 Redis 中的 list 相当于顺序表,并且内部更接近于“双端队列”,所以也支持头插和尾插的操作,可以当做队列或者栈来使用,同时也存在下标的概念,不过和 Java 中的下标不同,Redis 支持负数下标&#x…

【愚公系列】《循序渐进Vue.js 3.x前端开发实践》033-响应式编程的原理及在Vue中的应用

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主&…

PETSc源码分析: Optimization Solvers

本文结合PETSc源代码,分析PETSc中的优化求解器。 注1:限于研究水平,分析难免不当,欢迎批评指正。 注2:文章内容会不定期更新。 参考文献 Balay S. PETSc/TAO Users Manual, Revision 3.22. Argonne National Labora…

面向对象设计(大三上)--往年试卷题+答案

目录 1. UML以及相关概念 1.1 动态图&静态图 1.2 交互图 1.3 序列图 1.4 类图以及关联关系 1.4.1类图 1.4.2 关系类型 (1) 用例图中的包含、扩展关系(include & extend) (2) 类图中的聚合、组合关系(aggragation & composition) 1.5 图对象以及职责划…

芯片AI深度实战:进阶篇之vim内verilog实时自定义检视

本文基于Editor Integration | ast-grep,以及coc.nvim,并基于以下verilog parser(my-language.so,文末下载链接), 可以在vim中实时显示自定义的verilog 匹配。效果图如下: 需要的配置如下: 系列文章: 芯片…

几种K8s运维管理平台对比说明

目录 深入体验**结论**对比分析表格**1. 功能对比****2. 用户界面****3. 多租户支持****4. DevOps支持** 细对比分析1. **Kuboard**2. **xkube**3. **KubeSphere**4. **Dashboard****对比总结** 深入体验 KuboardxkubeKubeSphereDashboard 结论 如果您需要一个功能全面且适合…

TikTok 推出了一款 IDE,用于快速构建 AI 应用

字节跳动(TikTok 的母公司)刚刚推出了一款名为 Trae 的新集成开发环境(IDE)。 Trae 基于 Visual Studio Code(VS Code)构建,继承了这个熟悉的平台,并加入了 AI 工具,帮助开发者更快、更轻松地构建应用——有时甚至无需编写任何代码。 如果你之前使用过 Cursor AI,T…

【MySQL — 数据库增删改查操作】深入解析MySQL的 Retrieve 检索操作

Retrieve 检索 示例 1. 构造数据 创建表结构 create table exam1(id bigint, name varchar(20) comment同学姓名, Chinesedecimal(3,1) comment 语文成绩, Math decimal(3,1) comment 数学成绩, English decimal(3,1) comment 英语成绩 ); 插入测试数据 insert into ex…

强大到工业层面的软件

电脑数据删不干净,简直是一种让人抓狂的折磨!明明已经把文件扔进了回收站,清空了,可那些残留的数据就像牛皮癣一样,怎么也除不掉。这种烦恼简直无处不在,让人从头到脚都感到无比烦躁。 首先,心…

全面解析文件包含漏洞:原理、危害与防护

目录 前言 漏洞介绍 漏洞原理 产生条件 攻击方式 造成的影响 经典漏洞介绍 防御措施 结语 前言 在当今复杂的网络安全环境中,文件包含漏洞就像潜藏在暗处的危险陷阱,随时可能对防护薄弱的 Web 应用发起致命攻击。随着互联网的迅猛发展&#xff…

基于Django的Boss直聘IT岗位可视化分析系统的设计与实现

【Django】基于Django的Boss直聘IT岗位可视化分析系统的设计与实现(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统采用Python作为主要开发语言,利用Django这一高效、安全的W…