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

一、页式存储基本原理

(一)内存划分

       页式存储首先将内存物理空间划分成大小相等的存储块,这些块通常被称为“页帧”或“物理页”。每个页帧的大小是固定的,例如常见的页帧大小有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.mzph.cn/bicheng/69836.shtml

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

相关文章

LabVIEW无人机航线控制系统

介绍了一种无人机航线控制系统,该系统利用LabVIEW软件与MPU6050九轴传感器相结合,实现无人机飞行高度、速度、俯仰角和滚动角的实时监控。系统通过虚拟仪器技术,有效实现了数据的采集、处理及回放,极大提高了无人机航线的控制精度…

实现B-树

一、概述 1.历史 B树(B-Tree)结构是一种高效存储和查询数据的方法,它的历史可以追溯到1970年代早期。B树的发明人Rudolf Bayer和Edward M. McCreight分别发表了一篇论文介绍了B树。这篇论文是1972年发表于《ACM Transactions on Database S…

新一代搜索引擎,是 ES 的15倍?

Manticore Search介绍 Manticore Search 是一个使用 C 开发的高性能搜索引擎,创建于 2017 年,其前身是 Sphinx Search 。Manticore Search 充分利用了 Sphinx,显着改进了它的功能,修复了数百个错误,几乎完全重写了代码…

iperf 测 TCP 和 UDP 网络吞吐量

注:本文为 “iperf 测网络吞吐量” 相关文章合辑。 未整理去重。 使用 iperf3 监测网络吞吐量 Tom 王 2019-12-21 22:23:52 一 iperf3 介绍 (1.1) iperf3 是一个网络带宽测试工具,iperf3 可以擦拭 TCP 和 UDP 带宽质量。iperf3 可以测量最大 TCP 带宽…

神经网络的数据流动过程(张量的转换和输出)

文章目录 1、文本从输入到输出,经历了什么?2、数据流动过程是张量,如何知道张量表达的文本内容?3、词转为张量、张量转为词是唯一的吗?为什么?4、如何保证词张量的质量和合理性5、总结 🍃作者介…

MediaPipe与YOLO已训练模型实现可视化人脸和手势关键点检测

项目首页 - ZiTai_YOLOV11:基于前沿的 MediaPipe 技术与先进的 YOLOv11 预测试模型,精心打造一款强大的实时检测应用。该应用无缝连接摄像头,精准捕捉画面,能即时实现人脸检测、手势识别以及骨骼关键点检测,将检测结果实时、直观地…

JAVA篇12 —— 泛型的使用

​ 欢迎来到我的主页:【Echo-Nie】 本篇文章收录于专栏【JAVA学习】 如果这篇文章对你有帮助,希望点赞收藏加关注啦~ 1 泛型介绍 先对集合进行说明,不能对加入到集合中的元素类型进行约束(不安全)。遍历的时候需要…

JavaScript 数据类型

基本概念 什么是数据类型 JavaScript是一种 灵活的动态类型语言 ,其数据类型构成了程序的基础构建块。它主要包括两类数据类型: 原始数据类型 :包括String、Number、Boolean、Undefined、Null和Symbol。 复杂数据类型 :以Object…

被裁与人生的意义--春节随想

还有两个月就要被迫离开工作了十多年的公司了,不过有幸安安稳稳的过了一个春节,很知足! 我是最后一批要离开的,一百多号同事都没“活到”蛇年。看着一批批仁人志士被“秋后斩首”,马上轮到我们十来个,个中滋味很难言清…

Redis代金卷(优惠卷)秒杀案例-多应用版

Redis代金卷(优惠卷)秒杀案例-单应用版-CSDN博客 上面这种方案,在多应用时候会出现问题,原因是你通过用户ID加锁 但是在多应用情况下,会出现两个应用的用户都有机会进去 让多个JVM使用同一把锁 这样就需要使用分布式锁 每个JVM都会有一个锁监视器,多个JVM就会有多个锁监视器…

绘制决策树尝试3

目录 代码解读AI 随机状态 种子 定义决策树回归模型 tree的decision regressor fit 还可用来预测 export 效果图 我的X只有一个特征 为何这么多分支 ??? 这是CART回归 CART回归 为什么说代码是CART回归? 不是所有的决…

为大模型提供webui界面的利器:Open WebUI 完全本地离线部署deepseek r1

为大模型提供webui界面的利器:Open WebUI Open WebUI的官网:🏡 Home | Open WebUI 开源代码:WeTab 新标签页 Open WebUI是一个可扩展、功能丰富、用户友好的自托管AI平台,旨在完全离线运行。它支持各种LLM运行程序&am…

langchain 实现多智能体多轮对话

这里写目录标题 工具定义模型选择graph节点函数定义graph 运行 工具定义 import random from typing import Annotated, Literalfrom langchain_core.tools import tool from langchain_core.tools.base import InjectedToolCallId from langgraph.prebuilt import InjectedSt…

【Block总结】CPCA,通道优先卷积注意力|即插即用

论文信息 标题: Channel Prior Convolutional Attention for Medical Image Segmentation 论文链接: arxiv.org 代码链接: GitHub 创新点 本文提出了一种新的通道优先卷积注意力(CPCA)机制,旨在解决医学图像分割中存在的低对比度和显著…

Python从零构建macOS状态栏应用(仿ollama)并集成AI同款流式聊天 API 服务(含打包为独立应用)

在本教程中,我们将一步步构建一个 macOS 状态栏应用程序,并集成一个 Flask 服务器,提供流式响应的 API 服务。 如果你手中正好持有一台 MacBook Pro,又怀揣着搭建 AI 聊天服务的想法,却不知从何处迈出第一步,那么这篇文章绝对是你的及时雨。 最终,我们将实现以下功能: …

强化学习、深度学习、深度强化学习的区别是什么?

前言 深度强化学习就是 深度学习 和 强化学习 的结合体。它让计算机程序(也就是智能体)在特定环境中不断尝试,从错误中学习,最终找到最优的行动策略。 深度学习是AlphaGo从棋谱里学习,强化学些Alphazero 学习规则&am…

string类(详解)

为什么学习string类? 1.1 C语言中的字符串 C语言中,字符串是以\0结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想&#xf…

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

1. set 1.1 介绍 set 类型和 list 不同的是,存储的元素是无序的,并且元素不允许重复,Redis 除了支持集合内的增删查改操作,还支持多个集合取交集,并集,差集 1.2 常用命令 命令 介绍 时间复杂度 sadd …

一些计算机零碎知识随写(25年2月)

今天复习 MySQL 的时候,我突然冒出一个想法:能不能远程连接 MySQL 呢?虽说心里清楚理论上可行,但一直没实际操作过。 于是,起床后我立马打开服务器,准备启动 MySQL。结果,这一启动就发现问题了&…

ESP32-c3实现获取土壤湿度(ADC模拟量)

1硬件实物图 2引脚定义 3使用说明 4实例代码 // 定义土壤湿度传感器连接的模拟输入引脚 const int soilMoisturePin 2; // 假设连接到GPIO2void setup() {// 初始化串口通信Serial.begin(115200); }void loop() {// 读取土壤湿度传感器的模拟值int sensorValue analogRead…