【操作系统】虚拟内存相关分段分页页面置换算法

虚拟内存是什么?

【进程地址空间=虚拟地址空间=C/C++程序地址空间就是那个4G的空间】

虚拟内存是操作系统内核为了对进程地址空间进行管理,而设计的一个逻辑意义上的内存空间概念。在程序运行过程中,虚拟内存中需要被访问的部分会被映射到物理内存空间中,CPU 通过将虚拟地址翻译成物理地址,这样才能访问到真实的物理内存,使得程序顺利执行。

【比如我们在写完一段C++程序之后都需要采用g++进行编译,这时候编译器采用的地址其实就是虚拟内存空间的地址。因为这时候程序还没有运行,指令和数据还没有被加载到内存中,那此时使用的就是虚拟内存的地址了。】

运行进程时,通过页表将虚拟内存内容与真实物理空间内容对应。内核会为系统中每个进程维护一个页映射表。页映射表的基本原理是将程序运行过程中需要访问的段虚拟内存空间通过页映射表映射到一段物理内存空间上,这样CPU访问对应虚拟内存地址的时候就可以通过这种查找页映射表的机制访问物理内存上的某个对应的地址。


虚拟内存的计算方式:

虚拟内存的最大容量是由计算机的地址结构(CPU寻址范围)确定的。

虚拟内存的实际容量 = min(内存和磁盘容量之和,CPU寻址范围)

比如:

某计算机地址结构 32 位,内存大小为 512M,磁盘大小为 2GB,则:

虚拟内存的最大容量 = 2^32B = 4GB。

虚拟内存的实际容量 = min(2^32B, 512MB+2GB) = 2GB+512MB。


CPU通过页表获得数据的过程:

无论命中与否,都会访问两次内存。

若访问页表发现页命中(即,页被加载到物理内存):

首先CPU(CPU调用MMU)根据虚拟地址访问内存中的页表,获取到页表的中描述的所需数据存放在物理内存位置,再次访问内存,获得真正的数据。

若访问页表发现未页命中(即,页未被加载到物理内存):

首先CPU(CPU调用MMU)根据虚拟地址访问内存中的页表,获取到页表后发现发现页不在内存中,未命中,因此MMU发送一个缺页中断,交由缺页异常处理程序处理。缺页异常处理程序根据页置换算法,选择出一个牺牲页,如果这个页面已经被修改了,则写出到磁盘上。并将这个牺牲页的页表项有效位设置为0,存入磁盘地址。对于新调入的页面,如果该虚拟页尚未分配磁盘空间,则分配磁盘空间,然后磁盘空间的页数据拷贝到该物理页上,并更新有效位为1,更新对应的物理页号。完成这些操作后,从缺页异常处理程序返回,重新按照页表项命中的步骤执行。
————————————————
原文链接:https://blog.csdn.net/daocaokafei/article/details/116207148

 


CPU寻址和虚拟地址空间

现代处理器使用的是一种称为 虚拟寻址(Virtual Addressing) 的寻址方式。使用虚拟寻址,CPU 需要将虚拟地址翻译成物理地址,这样才能访问到真实的物理内存 实际上完成虚拟地址转换为物理地址转换的硬件是 CPU 中含有一个被称为 内存管理单元(Memory Management Unit, MMU) 的硬件

 


“页(page)"是虚拟内存空间向物理内存空间映射的基本单元.

虚拟地址和物理地址:

我们程序中各个变量等使用的地址其实都是这个虚拟内存空间中的地址。在编程过程中我们面对的也都是逻辑地址。

【可省略】举个最简单的例子,父子进程各种有一份虚拟空间地址,在子进程刚被创建时,父子进程代码和数据共享,所以此时虚拟地址空间的内容是基本一样的(当然有部分数据不同,比如各子的id等),且映射关系也是一样的,但是当子进程对数据进行修改时,子进程对那份数据进行写时拷贝,所以物理空间地址发生了变化,但是虚拟地址还是没有发生变化,只是改变了子进程的页表中那份虚拟地址的映射关系而已,所以两个相同的虚拟地址在父子进程分别看到了不同的物理地址空间。
————————————————
原文链接:https://blog.csdn.net/weixin_58450087/article/details/123461959

虚拟地址访问内存有以下优势:

  1. 程序可以使用一系列相邻的虚拟地址来访问物理内存中不相邻的大内存缓冲区。
  2. 程序可以使用一系列虚拟地址来访问大于可用物理内存的内存缓冲区。数据或代码页会根据需要在物理内存与磁盘之间移动。
  3. 不同进程使用的虚拟地址彼此隔离一个进程中的代码无法更改正在由另一进程或操作系统使用的物理内存。
  4. 同时,虚拟地址通过页表映射可以实现内存保护:

    比方说你的进程申请了一个数组,这个时候你会获得一个虚拟地址的范围,这时页表就会保存你的虚拟地址范围和映射到内存中的物理地址范围。同时页表还会保存数据的一些相关信息,比方说“可读可写”、“只可读不可写”。

    这样当你通过地址访问数组的时候,操作系统会就会在页表中找有没有该虚拟地址和物理地址的对应关系。如果地址正常,页表中一定会有映射关系存在,这样就可以正常访问数组。如果发生越界情况,操作系统在页表中找不到该虚拟地址和物理地址的对应关系,说明非法访问,然后报错。

    还有如果当你试图更改一个不可写的数据时,操作系统会判断当前数据是否可写,如果不可写就会报错。比方说:字符串、常量等等…


虚拟内存是如何实现的:

虚拟内存的实现需要建立在离散分配的内存管理方式的基础上。内存需要实现分页或分段的内存管理形式:

  1. 请求分页存储管理:建立在分页管理之上,为了支持虚拟存储器功能而增加了请求调页功能和页面置换功能。请求分页是目前最常用的一种实现虚拟存储器的方法。
  2. 请求分段存储管理:建立在分段存储管理之上,增加了请求调段功能、分段置换功能。
  3. 请求段页式存储管理:

分段、分页是针对物理内存进行的管理方式。将物理内存划分好后与虚拟内存进行映射对应

内存的管理有4种方式:

常见的内存管理机制

  1. 块式管理 : 远古的计算机操系统的内存管理方式。将内存分为几个固定大小的块,每个块中只包含一个进程。如果程序运行需要内存的话,操作系统就分配给它一块。
  2. 页式管理 :把主存分为大小相等且固定的一页一页的形式,页较小,相对相比于块式管理的划分力度更大,提高了内存利用率,减少了碎片。页式管理通过页表对应逻辑地址和物理地址。
  3. 段式管理 : 页式管理虽然提高了内存利用率,但是页式管理其中的页实际并无任何实际意义。 段式管理把主存分为一段段的,段是有实际意义的每个段定义了一组逻辑信息,例如,有主程序段 MAIN、子程序段 X、数据段 D 及 栈段 S 等。 段式管理通过段表对应逻辑地址和物理地址。
  4. 段页式管理机制把主存先分成若干段,每个段又分成若干页,也就是说 段页式管理机制中段与段之间以及段的内部的都是离散的。

简单来说:页是物理单位,段是逻辑单位。分页可以有效提高内存利用率,分段可以更好满足用户需求。


分页和分段的区别:

  1. 用户空间划分为大小相等的部分称为逻辑上相邻的页物理上不一定相邻。
  2. 用户进程地址空间按照自身逻辑划分为若干每段在内存中占据连续空间,各段可以不相邻
  3. 用户进程先按段划分,在段内按照页划分 

区别:

  1. 目的不同:分页的目的是管理内存,用于虚拟内存以获得更大的地址空间分段的目的是满足用户的需要,使程序和数据可以被划分为逻辑上独立的地址空间
  2. 大小不同:段的大小不固定,由其所完成的功能决定;页的大小固定,由系统决定;
  3. 地址空间维度不同:分段是二维地址空间(段号+段内偏移),分页是一维地址空间(每个进程一页表/多级页表,通过一个逻辑地址就能找到对应的物理地址);
  4. 分段便于信息的保护和共享;分页的共享收到限制;
  5. 碎片:分段没有内碎片,但会产生外碎片,因为段与段之间不连续;分页没有外碎片,但会产生内碎片(因为一个页填不满)

分页和分段地址转换408题目:

段、页、页框、页表、页表项_页框号_biggerbugger的博客-CSDN博客


top命令:

top命令作为 Linux下最常用的性能分析工具之一,可以监控、收集进程的CPU、IO存使用情况。比如我们可以通过top命令获得个进程使用了多少虚拟内存(VIRT)、物理内存(RES)、共享内存(SHR)
2.1 top命令中ⅥRT、RES和SHR的含义

VIRT的含义。搞清楚了虚拟内存的概念之后解释ⅥRT的含义就很简单了。ⅥRT表示的是进程虚拟内存空间大小。对应到图1中的进程A来说就是A1、A2、A3、A4以及灰色部分所有空间的总和.也就是说VIRT包含了在已经映射到物理内存空间的部分和尚未映射到物理内存空间的部分和。

RES的含义。指进程虚拟內存空间中已经映射到物理內存空间的那部分的大小。对应到图1中的进程A来说就是A1、A2、A3以及A4几个部分空间的总和。所以说,看进程在运行过程中占了多少内存应该看RES的值而不是VIRT的值。
SHR的含义。SHR是 share(共享)的缩写,它表示的是进程占用的共享内存大小。在上图1中我们看到进程A虚拟内存空间中的A4和进程B虚拟内存空间中的B3都映射到了物理内存空间的A4/B3。为什么会出现这样的情况呢?其实我们写的程序会依赖于很多外部的动态库(.so),比如libc.so、libd.so等等。这些动态库在内存中仅仅会保存/映射一份,如果某个进程运行时需要这个动态库,那么动态加载器会将这块内存映到对应进程的虚拟内存空间中。多个进程之间通过共享内存的方式相互通信也会出现这样的凊况。这么一来,就会出现不同进程的虚拟内存空间会映射到相同的物理内存空间。这部分物理内存空间其实是被多个进程所共享的,所以我们将他们称为共享内存,用SHR来表示。某个进程占用的内存除了和别的进程共享的内存之外就是自己的独占内存了。所以要计算进程独占内存的大小只要用RES的值减去SHR值即可 。
————————————————
原文链接:https://blog.csdn.net/qq_41687938/article/details/120479067


页面置换算法的作用

因为发生了缺页,因此可能会出现使用页面置换算法的情况,

缺页中断,就是要访问的页不在主存,需要操作系统将其调入主存后再进行访问。

当发生缺页中断时,如果当前内存中并没有空闲的页面,操作系统就必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。用来决定淘汰哪一页的规则叫做页面置换算法。


页面置换算法有什么?

  1. 最佳页面置换算法OPT(Optimal replacement algorithm):置换以后不需要或者最远的将来才需要的页面,是一种理论上的算法,是最优策略;
  2. 先进先出FIFO:置换在内存中驻留时间最长的页面。缺点:有可能将那些经常被访问的页面也被换出,从而使缺页率升高;
  3. 最近最少使用算法LRU(Least Recently Used):LRU算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 T,当须淘汰一个页面时,选择现有页面中其 T 值最大的,即最近最久未使用的页面予以淘汰。
  4. 最少使用页面置换算法LFU (Least Frequently Used): 该置换算法选择在之前时期使用次数最少的页面
  5. 最近未使用算法NRU(Not Recently Used):检查访问位R、修改位M,优先置换R=M=0,其次是(R=0, M=1);

什么是块表和多级页表:

1)快表:

为了解决虚拟地址到物理地址的转换速度,操作系统在页表方案基础之上引入了 快表 来加速虚拟地址到物理地址的转换。我们可以把快表理解为一种特殊的高速缓冲存储器(Cache),其中的内容是页表的一部分或者全部内容。

2)多级页表:

引入多级页表的主要目的是为了避免把全部页表一直放在内存中占用过多空间,特别是那些根本就不需要的页表就不需要保留在内存中。多级页表属于时间换空间的典型场景。


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

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

相关文章

安防视频监控平台EasyCVR视频集中存储平台接入RTSP设备出现离线情况的问题解决方案

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

用户新增预测——baseline学习笔记

一、赛题理解 1. 赛题名称 用户新增预测挑战赛 2. 赛题数据集 赛题数据由约62万条训练集、20万条测试集数据组成,共包含13个字段。其中uuid为样本唯一标识,eid为访问行为ID,udmap为行为属性,其中的key1到key9表示不同的行为属性…

什么是RNN(循环神经网络)

什么是RNN(循环神经网络) 循环神经网络(Recurrent Neural Network),在识别图像时,输入的每张图片都是孤立的,认出这张图片是苹果,并不会对认出下一张图片是梨造成影响。 但对语言来说,顺序是十分重要的,“…

07 mysql5.6.x docker 启动, 无 config 目录导致客户端连接认证需要 10s

前言 呵呵 最近再一次 环境部署的过程中碰到了这样的一个问题 我基于 docker 启动了一个 mysql 服务, 然后 挂载出了 数据目录 和 配置目录, 没有手动复制配置目录出来, 所以配置目录是空的 然后 我基于 docker 启动了一个 nacos, 配置数据库设置为上面的这个 mysql 然后 启…

ARM汇编【1】:数据类型

与高级语言类似,ARM支持对不同数据类型的操作。我们可以加载或存储的数据类型可以是有符号和无符号字、半字或字节。这些数据类型的扩展名是:-h或-sh表示半字,-b或-sb表示字节,不表示字的扩展名。有符号数据类型或无符号数据类型之…

Consistency Models终结扩散模型

最近看到一篇论文,觉得特别有意思,并且在学术界引起了不小的动静,他就是一致性模型,据说图像生成效果快、质量高,并且还可以实现零样本图像编辑,即不进行一些视觉任务训练,可以实现图像超分、修…

基于springboot+vue的论坛系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

改进YOLO系列:3.添加SOCA注意力机制

添加SOCA注意力机制 1. SOCA注意力机制论文2. SOCA注意力机制原理3. SOCA注意力机制的配置3.1common.py配置3.2yolo.py配置3.3yaml文件配置1. SOCA注意力机制论文 暂未找到 2. SOCA注意力机制原理 3. SOCA注意力机制的配置 3.1common.py配置 ./models/common.p…

Docker+Jmeter+InfluxDB+Grafana 搭建性能监控平台

当今互联网发展迅速,应用程序的性能监控显得越来越重要。 DockerJmeterInfluxDBGrafana 是一种常用的性能监控平台,可以帮助开发者快速搭建一套可靠的监控体系。在本文中,我们将介绍如何使用这些工具搭建性能监控平台,以便开发人…

实现chatGPT 聊天样式

效果图 代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Chat Example</title&g…

第9步---MySQL的索引和存储引擎

第9步---MySQL的索引和存储引擎 1.索引 1.1分类 索引可以快速的找出具有特定值的行。不用从头开始进行寻找了。 类别 hash和btree hash 根据字段值生生成一个hash的值 快速的进行定位到对应的行的值 可能会出现相同的值&#xff0c;找到对应的空间会出现对应的值 btree树…

CMA和CNAS是什么?两者有什么用途和区别?

CMA和CNAS是两个不同的概念&#xff0c;它们分别有着自己的用途和区别。 CMA是中国计量认证&#xff08;China Metrology Accreditation&#xff09;的缩写&#xff0c;是根据《中华人民共和国计量法》及其配套法规的规定&#xff0c;由国家质量监督检验检疫总局授权的计量认证…

HTML a标签

<a>标签定义一个超链接。它有如下主要属性&#xff1a; href&#xff1a;指定链接的地址&#xff0c;可以是一个URL、文件路径或锚点。target&#xff1a;指定链接在何处打开。其值包括&#xff1a; _blank&#xff1a;在新窗口或新标签页打开链接。_self&#xff1a;在…

Go语言基础之切片

切片 切片&#xff08;Slice&#xff09;是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封装。它非常灵活&#xff0c;支持自动扩容。 切片是一个引用类型&#xff0c;它的内部结构包含地址、长度和容量。切片一般用于快速地操作一块数据集合 切片的定义…

事物有哪些特性 ?MySQL 如何保证事物的四大特性 ?

目录 1.事物有哪些特性 2. MySQL 如何保证事物的四大特性 3. 事物的隔离级别 1.事物有哪些特性 1.1 何为事物 &#xff1f; 事物就是把一件事情的多个步骤&#xff0c;多个操作&#xff0c;打包成一个步骤&#xff0c;一个操作。其中任意一个步骤执行失败&#xff0c;都会进…

模拟Stevens Lewis描述的小型飞机纵向动力学的非线性动态反演控制器研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

毫米波雷达成像论文阅读笔记: IEEE TPAMI 2023 | CoIR: Compressive Implicit Radar

原始笔记链接&#xff1a;https://mp.weixin.qq.com/s?__bizMzg4MjgxMjgyMg&mid2247486680&idx1&snedf41d4f95395d7294bc958ea68d3a68&chksmcf51be21f826373790bc6d79bcea6eb2cb3d09bb1860bba0af0fd5e60c448ca006976503e460#rd ↑ \uparrow ↑点击上述链接即…

NER(命名实体识别)的介绍与使用--附源码

概述 本文将向您简要介绍命名实体识别,这是一种用于识别文本文档中存在的实体的流行方法。本文针对 NLP 领域的初学者。在本文末尾,已经实现了预训练的 NER 模型来展示实际用例。 为什么是NER? 图1 通过观察上

cad图怎么转换成pdf格式?一招教你轻松转换

将CAD文件转换成PDF格式有很多优势。首先&#xff0c;PDF格式是一种非常流行的文件格式&#xff0c;几乎所有电脑上都可以打开。这意味着即使将PDF文件发送给其他人&#xff0c;他们也可以轻松地查看文件&#xff0c;此外&#xff0c;PDF格式可以保留CAD文件的图形和布局&#…

java请求SAP系统,发起soap的xml报文,实体类转换,idea自动生成教程

1、将接口的网页地址&#xff0c;右键保存&#xff0c;然后修改文件后缀为wsdl文件 2、idea全局搜索 wsdl&#xff0c;找到自动转换javabean插件&#xff1a; 3、点击后&#xff0c;选择下载改完后缀的文件(选择)&#xff1a; 4、将无用的class文件删除掉 5、请求sap的地址为…