操作系统——内存管理(一文搞懂操作系统的内存管理)

news2024/11/17 4:48:16

VIRT(虚拟内存)、RES(常驻内存)和SHR(共享内存)

VIRT(虚拟内存)

  • 进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据,以及mallocnew分配的堆空间和分配的栈空间等;
  • 假如进程新申请10MB的内存,但实际只使用了1MB,那么它会增长10MB,而不是实际的1MB使用量。
  • VIRT = SWAP(交换分区) + RES(常驻内存)

RES(常驻内存)

  • 进程当前使用的内存大小,包括使用中的mallocnew分配的堆空间和分配的栈空间,但不包括swap out量;
  • 包含其他进程的共享;
  • 如果申请10MB的内存,实际使用1MB,它只增长1MB,与VIRT相反;
  • 关于库占用内存的情况,它只统计加载的库文件所占内存大小。
  • RES = CODE+ DATA

SHR(共享内存)

  • 除了自身进程的共享内存,也包括其他进程的共享内存;
  • 虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小;
  • 计算某个进程所占的物理内存大小公式:RESSHR
  • swap out后,它将会降下来。

1、操作系统的内存管理主要是做什么?

答:操作系统的内存管理主要负责内存的分配与回收malloc 函数:申请内存,free函数:释放内存),另外地址转换也就是将逻辑地址转换成相应的物理地址等功能也是操作系统内存管理做的事情。

2、内存管理的目的

答:最主要的就是提高内存的利用率,所谓的提高内存利用率,就是尽可能的在内存中多存储进程,这就涉及到为进程分配内存空间了。分配的方式主要是有两种——连续分配和离散分配

3、分页系统地址映射

答:内存管理单元(MMU)管理着地址空间和物理内存的转换,其中的页表(Page table)存储着页(程序地址空间)和页框(物理内存空间)的映射表。一个虚拟地址分成两个部分,一部分存储页面号,一部分存储偏移量。

在这里插入图片描述

4、内存管理机制

答:内存管理机制可以简单分为连续分配管理方式非连续分配管理方式这两种。连续分配管理方式是指为一个用户程序分配一个连续的内存空间,常见的如 块式管理 。同样地,非连续分配管理方式允许一个程序使用的内存分布在离散或者说不相邻的内存中,常见的如页式管理段式管理

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

块表和多级页表解决了什么问题

  • 虚拟地址到物理地址的转换要快。
  • 解决虚拟地址空间大,页表也会很大的问题。

5、什么是分页?

答:把内存空间划分为大小相等且固定的块,作为主存的基本单位。因为程序数据存储在不同的页面中,而页面又离散的分布在内存中,因此需要一个页表来记录映射关系,以实现从页号到物理块号的映射。

访问分页系统中内存数据需要两次的内存访问 (一次是从内存中访问页表,从中找到指定的物理块号,加上页内偏移得到实际物理地址;第二次就是根据第一次得到的物理地址访问内存取出数据)。

在这里插入图片描述

6、什么是分段?

答:分页是为了提高内存利用率,而分段是为了满足程序员在编写代码的时候的一些逻辑需求(比如数据共享,数据保护,动态链接等)。

分段内存管理当中,地址是二维的,一维是段号,二维是段内地址;其中每个段的长度是不一样的,而且每个段内部都是从0开始编址的。由于分段管理中,每个段内部是连续内存分配,但是段和段之间是离散分配的,因此也存在一个逻辑地址到物理地址的映射关系,相应的就是段表机制。

7、分页和分段有什么区别?

  • 分页对程序员是透明的,但是分段需要程序员显式划分每个段。
  • 分页的地址空间是一维地址空间,分段是二维的。
  • 页的大小不可变,段的大小可以动态改变。
  • 分页主要用于实现虚拟内存,从而获得更大的地址空间;分段主要是为了使程序和数据可以被划分为逻辑上独立的地址空间并且有助于共享和保护

8、块表

答:为了解决虚拟地址到物理地址的转换速度,操作系统在 页表方案(是一种特殊的数据结构,记录着页面和页框的对应关系)的基础之上引入了 快表 来加速虚拟地址到物理地址的转换。我们可以把快表理解为一种特殊的高速缓冲存储器(Cache),其中的内容是页表的一部分或者全部内容。作为页表的 Cache,它的作用与页表相似,但是提高了访问速率。由于采用页表做地址转换,读写内存数据时 CPU 要访问两次主存。有了快表,有时只要访问一次高速缓冲存储器,一次主存,这样可加速查找并提高指令执行速度。

转换流程

  1. 根据虚拟地址中的页号查快表;
  2. 如果该页在快表中,直接从快表中读取相应的物理地址;
  3. 如果该页不在快表中,就访问内存中的页表,再从页表中得到物理地址,同时将页表中的该映射表项添加到快表中;
  4. 当快表填满后,又要登记新页时,就按照一定的淘汰策略淘汰掉快表中的一个页。

9、多级页表

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

为了提高内存的空间性能,提出了多级页表的概念;但是提到空间性能是以浪费时间性能为基础的,因此为了补充损失的时间性能,提出了快表(即 TLB)的概念。 不论是快表还是多级页表实际上都利用到了程序的局部性原理,局部性原理在后面的虚拟内存这部分会介绍到。

10、逻辑地址和物理地址

答:我们编程一般只有可能和逻辑地址打交道,比如在 C 语言中,指针里面存储的数值就可以理解成为内存里的一个地址,这个地址也就是我们说的逻辑地址,逻辑地址由操作系统决定。物理地址指的是真实物理内存中地址,更具体一点来说就是内存地址寄存器中的地址物理地址是内存单元真正的地址

11、CPU寻址

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

12、为什么要有虚拟地址空间呢?

答:没有虚拟地址空间的时候,程序都是直接访问和操作的都是物理内存会存在以下的问题:

  • 用户程序可以访问任意内存,寻址内存的每个字节,这样就很容易(有意或者无意)破坏操作系统,造成操作系统崩溃。
  • 想要同时运行多个程序特别困难,比如你想同时运行一个微信和一个 QQ 音乐都不行。为什么呢?举个简单的例子:微信在运行的时候给内存地址 1xxx 赋值后,QQ 音乐也同样给内存地址 1xxx 赋值,那么 QQ 音乐对内存的赋值就会覆盖微信之前所赋的值,这就造成了微信这个程序就会崩溃。

如果直接把物理地址暴露出来的话会带来严重问题,比如可能对操作系统造成伤害以及给同时运行多个程序造成困难。

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

  • 程序可以使用一系列相邻的虚拟地址来访问物理内存中不相邻的大内存缓冲区
  • 程序可以使用一系列虚拟地址来访问大于可用物理内存的内存缓冲区。当物理内存的供应量变小时,内存管理器会将物理内存页(通常大小为4 KB)保存到磁盘文件。数据或代码页会根据需要在物理内存与磁盘之间移动。
  • 不同进程使用的虚拟地址彼此隔离。一个进程中的代码无法更改正在由另一进程或操作系统使用的物理内存。

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

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

相关文章

软考中级-软件设计师知识点

软考中级-软件设计师知识点 1. cpu、总线、io控制方式、寄存器2.cpu和dma3.海明码4.中断向量、中断响应时间、保存现场5.补码6.指令流水线计算公式7.存储器分类8.总线9.补码、移码10.漏洞扫描11.木马和病毒12.编译与反编译13.死锁判断14.数据库三大范式15.数据库连结和映射16.最…

Node-RED系列教程-28修改UI默认背景图片

主要使用到如下节点: 实现过程如下: 步骤1:编写背景图片请求服务. http in节点配置: 读文件节点配置: http out节点配置: 到此,背景图片请求服务搭建完成。

制作一本3D仿真翻页电子画册,精致又美观

3D仿真翻页电子画册,可能很多小伙伴都不知道是什么样子的,我用一个图例告诉大家,大家看完就知道3D仿真翻页电子画册到底是什么样子啦! 随着人们生活水平的提高,审美也在发生着变化。很显然,之前那种简单的文…

如何搭建高性能地图(访问速度快、层级高、免费)

1、下载地图数据源 可以从很多市面上的地图供应商下载地图,如水经注、bigemap等,大部分层级能够达到19级,也即地图的空间分辨率能够达到0.6米,比如下面广州市的数据。如果数据量少,只需要一个城市或者几个城市的数据&…

遇到了别感到奇怪!这其实是python的三目运算!

三目运算定义 我们熟知的三目运算通常表达式是: 判断条件(返回布尔值) ? 为真的结果 :为假的结果。 Python中的三目运算 而在Python中的三目运算并无 ?和:的表达式这种形式。Python的三目运算符也被称为三元运算符,是一种简洁的条件表达…

MySQL最新2023年面试题及答案,汇总版(6)【MySQL最新2023年面试题及答案,汇总版-第三十六刊】

文章目录 MySQL最新2023年面试题及答案,汇总版(6)01、MySQL中DATETIME和TIMESTAMP的区别?02、简单描述MySQL中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响(从读写…

基于蚁狮算法优化概率神经网络PNN的分类预测 - 附代码

基于蚁狮算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于蚁狮算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于蚁狮优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络的光滑…

Flipper Zero:极客的终极多功能工具,包含各种数据发射接收途径(硬件便携式工具)

Flipper Zero:极客的终极多功能工具(硬件便携式工具)。 Flipper Zero 是一款为极客、渗透测试者和硬件爱好者设计的终极多功能工具。这款口袋大小的设备集成了多种工具:RFID 读取、写入和模拟,RF/SDR 信号捕获和重放,红外线、HID模拟、GPIO、硬件调试、1-Wire、蓝牙、Wi…

kafka实践-热点数据展示

1 实时流式计算 1.1 概念 流式计算一般对实时性要求较高,同时一般是先定义目标计算,然后数据到来之后将计算逻辑应用于数据。同时为了提高计算效率,往往尽可能采用增量计算代替全量计算。也就是将数据先聚集在集中全量处理。 2.2 应用场景…

TCP连接出现大量CLOSE_WAIT不回收的问题排查

背景 日常运维过程中,收到“应用A”突然挂起没有处理请求的告警,然后触发“存活检查”不通过,自动重启了。 问题 为什么“应用A”突然挂起? 分析 排查过程很长,走了很多弯路,这里只列出本案例有效行动…

金蝶云星空与金蝶云星空对接集成盘亏单查询打通盘亏单新增

金蝶云星空与金蝶云星空对接集成盘亏单查询打通盘亏单新增 接通系统:金蝶云星空 金蝶K/3Cloud(金蝶云星空)是移动互联网时代的新型ERP,是基于WEB2.0与云技术的新时代企业管理服务平台。金蝶K/3Cloud围绕着“生态、人人、体验”&am…

什么是权限?(Linux篇)

前言 其实我们在学会运用一些简单的Linux指令之后,我们可以简单的用ls查看当前目录的文件有哪些啊,可以使用tree用树形结构查看目录,可以使用touch来创建文件,用mkdir创建目录,可以使用rm来删除目录和文件,…

酷柚易汛ERP - 发货地址管理操作指南

1、应用场景 对发货地址进行管理,使用【物流服务】时的自动获取发货地址。 2、主要操作 打开【资料】-【发货地址管理】新增发货地址。 可以对进行地址设置及管理,点击【新增】可添加新的发货地址信息地址简称方便使用者在选择发货地址时,…

【毕业论文】基于微信小程序的大学生互助平台设计与实现

完整下载链接https://download.csdn.net/download/No_Name_Cao_Ni_Mei/88519756 基于微信小程序的大学生互助平台设计与实现 Design and Implementation of a College Student Assistance Platform based on WeChat Mini Program 目录 目录 2 摘要 3 关键词 4 第一章 绪论 4 1.…

[RoarCTF 2019]Easy Java1

提示 WEB-INF/web.xml泄露 后拿到题目的一般想到的正常思路 sql注入弱口令 先信息收集不进行操作 有download,难道是下载文件,访问看看 这里访问抓包试了下,传送后返回码是200,说明应该可以访问,但是看响应包像是报错…

淘宝API接口成为淘宝商家及企业ERP系统不可或缺的重要因素

API全称为Application Programming Interface,中文是应用程序编程接口。它其实是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。 那如果…

Git常用指令以及常见问题解决

摘要:记录本人Git常用指令以及常见问题解决 1.Git流程 2.具体操作 git init:初始化目录(一般直接git clone远端的工程,这一步都可以省略掉); 输入命令“git config --global user.name xxx”来配置你的用…

Outlook搜索功能不全

Outlook搜索功能不全 解决方案 1、当打开Outlook想搜索内容,但无法搜索或者搜索不全时。 2、关掉Outlook在桌面上找到此电脑,右键管理 3、进入计算机管理后---服务和应用---服务----找到Windows Search--右键启动或者重新启动即可

ChatkBQA:一个基于大语言模型的知识库问题生成-检索框架11.13

ChatkBQA:一个基于大语言模型的知识库问题生成-检索框架 摘要1 引言3 准备工作4 方法4.1 ChatKBQA概述4.2 在LLMS上进行高效微调4.3 用微调LLMS生成逻辑形式4.4 实体和关系的非监督检索4.5 可解释查询执行 摘要 基于知识的问答(KBQA)旨在从大…

【网络】TCP协议理论

TCP协议理论 一、TCP协议简介1、浅谈可靠性2、UDP协议存在的意义 二、TCP的协议格式TCP的解包和分用 三、确认应答机制一种应答方式——捎带应答 四、超时重传机制超时等待时间 五、流量控制1、TCP的缓冲区2、TCP的窗口大小3、TCP的PSH标志位 六、TCP的六个标志位URG字段的详细…