linux 内存管理优化,Linux性能优化实战 内存篇 阅读笔记

第十五讲 基础篇:Linux内存是怎么工作的(2020.6.8)

这一讲相关的内容正好之前看csapp的时候总结了一下,可以直接贴出来作为总结了。

Linux的内存工作原理,这又是一个特别大的话题。一切向着尽量利用物理资源的方向在发展,

在没有虚拟内存的世界里,所以的进程都能看到同一个物理内存在这种模式下如果有多个进程那么这个内存管理就很复杂了(在DSP,嵌入时系统中可能总共就一个程序这时候完全可以直接使用物理内存)。针对Unix这种多进程的系统后来就有了虚拟内存的概念。

虚拟内存 是硬件异常,硬件地址翻译,主存,磁盘和内核软件的完美交互,他为没有进程提供一个很大的,一致的地址空间。

它将内存看成一个存储在磁盘上很大的连续的空间,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传递数据,通过这种方式很好的使用了内存。

为每个进程提供了一致的地址空间,从而简化了内存管理

每个进程的地址空间是独立的,避免了进程之间在地址空间上的破坏

物理地址和虚拟地址

物理寻址(嵌入式设备/DSP设备):

c160e13fd228d5aeffa2c5939a8246ba.png

虚拟寻址系统(现代处理器):

7188880ca9abaa8ecb922ccbe65fb4f9.png

虚拟内存作为磁盘的高速缓存工具

DRAM 作为磁盘的缓存,通过虚拟内存来管理磁盘上的那个块缓存到内存中来。

VP(virtual page):将虚拟内存分割成大小固定的块

PP(physical page):物理页(叶帧)

VP---->PP 关系

ef1975798804a6d94408e2e83fa3ebb7.png

通过页表(page table) 来判定一个虚拟页是否缓存在DRAM中。如果命中就指向一个物理页中, 如果不命中,系统必须判断这个虚拟页存放在磁盘的那个位置,在物理内存中选择牺牲一个页,将虚拟页从磁盘复制到DRAM中,替换掉牺牲页。

b0185ed3e42b8b0f67681fd1c81fdb8b.png

页命中:

43b6446bd769916a143dd6f5ab881c2b.png

缺页:

9f3a4296dc3f569622ea1690b8d909c3.png

虚拟内存作为内存管理工具

5ac764ff03585a8038342583ede1fbc8.png

虚拟内存除了作为磁盘的高速缓存之外,还作为Linux的内存管理工具,这样Linux中的每个进程都有相同的的地址空间格式,两个进程通过将虚拟页面映射到相同的物理页帧上是实现了共享内存。

b434755e0f989a56ff2659b138dc2417.png

虚拟内存作为内存保护的工具

d21b94246ffba1b404674d8059d3721d.png

地址翻译

02fd7760ee7d6c05b27cc77d8bb1c160.png

165ecc364a266ae607dfc268a180dc0b.png

d03110390fba4778cea9c3f7649a935d.png

多级页表:

3fc7454f7e91ba31fe7b1416878dddac.png

5f9d7e3d13d9bdcd735dcc93e8572e52.png

linux 内存系统

fe53328edb5915607fb5c58e4b9da57f.png

86ef4c8f01a2e6f802513b5a014add48.png

dc8552f8c25e26de00d09855d351b2d7.png

内存分配与回收

标准库中的malloc有两种实现方式:

小块内存(小于128k) 使用sbrk分配(释放并不返还给系统,容易造成系统碎片(详细见参考2))

大块内存(大于128k) 使用mmap内存映射的方式分配(每次unmap之后都会返还给系统,所以每次mallo都会导致缺页异常,内核的管理负担增大)

系统回收内存三种方式

LRU

回收不常访问的内存,把不常访问的内存通过交换分区直接写入磁盘

OOM

参考资料

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

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

相关文章

傅里叶变换与大数乘法

我们知道,两个 N 位数字的整数的乘法,如果使用常规的算法,时间复杂度是 O(N2)。然而,使用快速傅里叶变换,时间复杂度可以降低到 O(N logN loglogN)。 假设我们要计算以下两个 N 位数字的乘积: a (aN-1aN-2…

linux进程管理类命令大全,Linux进程管理类命令

一、htop命令选项-d #:指定延迟时间间隔;-u UserName:仅显示指定用户的进程;-s COLUME:以指定字段进行排序;子命令:l:显示选定的进程打开的文件列表;s:跟踪选…

android抓包工具——使用fiddler4在安卓手机抓包

Fiddler是一款非常流行并且实用的http抓包工具,它的原理是在本机开启了一个http的代理服务器,然后它会转发所有的http请求和响应,因此,它比一般的firebug或者是chrome自带的抓包工具要好用的多。不仅如此,它还可以支持…

ddt数据驱动

数据驱动原理 1.测试数据为多个字典的list类型 2.测试类前加修饰ddt.ddt 3.case前加修饰ddt.data() 4.运行后用例会自动加载成三个单独的用例 5.测试结果: Testing started at 21:51 ...start!{username: selenium\xe7\xbe\xa4, psw: 232607095}end!start!{username…

Canvas入门06-线段与像素边界

我们知道,使用以下2个API可以绘制一条线段: moveTo(x, y) 向当前路径中增加一条子路径,该子路径只包含一个点,此为线段的起始点lineTo(x, y) 将线段的下一个点加入子路径中context.strokeStyle rgb(200, 200, 0); context.lineWi…

函数表达书-读书笔记

定义函数的方式有两种:一种是函数声明,另一种就是函数表达式。函数声明的语法如下: function functionName(arg0,arg1,arg2){//函数体 } 函数声明,有一个重要特征就是函数声明提升。也就是在执行代码之前会先读取函数声明&#xf…

vs2012新建项目产生的问题

当用vs新建web项目时遇到 只需下载一个vs2012的更新插件 http://download.microsoft.com/download/A/0/2/A02C37E0-77F7-448A-BD5C-F66AB1F78DBC/VS11-KB3002339.exe 点击安装更新即可. 转载于:https://www.cnblogs.com/GreenLeaves/p/5452073.html

zoj4062 Plants vs. Zombies 二分+模拟(贪心的思维)

题目传送门 题目大意:有n个植物排成一排,标号为1-n,每株植物有自己的生长速度ai,每对植物浇一次水,该株植物就长高ai,现在机器人从第0个格子出发,每次走一步,不能停留,每…

MyBatis注解模式批量insert方法

2019独角兽企业重金招聘Python工程师标准>>> 方法一:script标签方式 Insert("<script>insert into xxx (channelId,siteId) " "values " "<foreach collection\"list\" item\"item\" index\"index\&quo…

关于eclipse中文注释乱码的问题

今天打开了一个以前的android项目&#xff0c;发现中文注释都成乱码啦&#xff01;&#xff01;&#xff01; 后来在网上找了一会解决方法&#xff0c;知道了中文的编码大体是两种&#xff1a;GBK(汉字内码扩展规范)和UTF-8(8-bit Unicode Transformation Format)。 因此问题的…

python入门(5)使用文件编辑器编写代码并保存执行

python入门&#xff08;5&#xff09;使用文件编辑器编写代码并保存执行 两款文本编辑器&#xff1a; 一个是Sublime Text&#xff0c;免费使用&#xff0c;但是不付费会弹出提示框&#xff1a; 一个是Notepad&#xff0c;免费使用&#xff0c;有中文界面&#xff1a; 请注意&…

linux 批量同步,多主机目录到备份服务器批量同步脚本

为了方便同步多个主机的目录到备份服务器&#xff0c;写了如下脚本&#xff1a;#!/usr/bin/perluse strict;use File::Spec;use File::Basename;use File::Path;#设定存储路径my $storedir"/backup/";while(){chomp;my ($host,$s_path)split /\t/;my $project_namefi…

交流电的有效值rms值_交流电路的功率三角因数原来是这样理解的

点击“电工电气学习”关注即可免费订阅&#xff01;电工学习网&#xff1a;www.diangon.com关注电工学习网官方微信公众号“电工电气学习”&#xff0c;收获更多经验知识。交流电路中消耗的电能可以用直角三角形的三个边来表示&#xff0c;通常称为功率三角形我们在关于交流电路…

CSS3酷炫样式集合

1、30种炫酷CSS鼠标滑过按钮特效 2、CSS 变量实现炫酷鼠标悬浮效果 3、基于CSS3和jQuery实现跟随鼠标方位的Hover特效 4、css3金属质感登录表单 4、CSS3动态下拉菜单 5、CSS3鼠标悬浮特效 转载于:https://www.cnblogs.com/mankii/p/9922981.html

NOIP2008 普及组T4 立体图 解题报告-S.B.S.(施工未完成)

题目描述 小渊是个聪明的孩子&#xff0c;他经常会给周围的小朋友们将写自己认为有趣的内容。最近&#xff0c;他准备给小朋友们讲解立体图&#xff0c;请你帮他画出立体图。 小渊有一块面积为m*n的矩形区域&#xff0c;上面有m*n个边长为1的格子&#xff0c;每个格子上堆了一些…

HBase基础知识(三):HBase架构进阶、读写流程、MemStoreFlush、StoreFile Compaction、Region Split

1. 架构原理 1&#xff09;StoreFile 保存实际数据的物理文件&#xff0c;StoreFile以HFile的形式存储在HDFS上。每个Store会有一个或多个StoreFile&#xff08;HFile&#xff09;&#xff0c;数据在每个StoreFile中都是有序的。 2&#xff09;MemStore 写缓存&#xff0c;由于…

第一章节测试

大家在做第一章测试题时&#xff0c;需要复习如下相关知识点&#xff1a;编译型VS解释型、变量名规范、数据类型、程序交互、格式化输出、运算符、流程控制。1.简述编译型与解释型语言的区别&#xff0c;且分别列出你知道的那些语言属于编译型&#xff0c;哪些属于解释型。2.执…

VS2015升级Update2之后Cordova程序提示:此应用程序无法在此电脑上运行

VS2015在升级到Update2之后&#xff0c;有可能出现如下异常&#xff0c;在运行Cordova项目时提示&#xff1a; 查看输出面板会有乱码错误信息&#xff1a; 出现此问题的原因是在于npm程序损坏了。vs调用的npm程序并不是在node安装目录下的npm&#xff0c;而是在&#xff1a; C:…

双鉴探测器是哪两种探测方式结合_老师傅带你看懂火灾探测器的种类和基本原理,看完涨知识了...

为什么极早期的火灾探测十分关键&#xff1f;火灾的产生我们生活的环境中充满着大量的可燃物质&#xff0c;空气中的氧气含量通常也足够满足燃烧条件。但是还有另外一个形成火灾的条件就是&#xff1a;点火能量必须可以驱使氧化的过程开始。点火能量源可以是多种多样的&#xf…