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…

idea 启动界面导入项目_如何为您的项目启动有效的登录页面

idea 启动界面导入项目by Christian-Peter Heimbach通过克里斯蒂安彼得海姆巴赫 如何为您的项目启动有效的登录页面 (How to launch an effective landing page for your project) I began my career 10 years ago doing online marketing and advertising for video games. S…

linux程序已经在后台运行冻结了_如何使程序在Linux后台运行

经常在Linux上面运行程序都有这样的体验:某个程序运行的时候,会产生大量的log(提示)信息,但实际上我们只想让它跑一下而已,log暂时不需要或者后面才有需要。同时run多个相同或者不同程序的时候,占了好多的命令行界面&a…

数字时代的精益组织

精益IT应该帮助简化和改善我们为客户创造价值的方式,并提出面向未来的更好的解决方案。未来的组织将专注于同行业的产品或业务流——其他的一切,包括专家和管理者在内,都是为了让一线工作人员可以第一时间就做好,而又不会遇到任何…

9th week blog

1、第一个计算机语言:Fortran Fortran I诞生于1957年,由IBM设计,是世界上第一个真正的计算机语言。 Fortran I运行于IBM 704计算机上。 Fortran I支持:变量(变量名最多6个字符)、If和do语句、格式化IO。 不…

cas单点登录系统:客户端(client)详细配置(包含统一单点注销配置)

最近一直在研究cas登录中心这一块的应用,分享一下记录的一些笔记和心得。后面会把cas-server端的配置和重构,另外还有这几天再搞nginxcas的https反向代理配置,以及cas的证书相关的知识分享出来。 Cas由两部分组成,Cas Server和Cas…

open 端口打开Linux,linux – nmap显示打开的端口,但netstat没有

如果我使用nmap扫描我的服务器,则表明已打开21端口.但是当我登录到这个服务器并运行netstat时,我什么也看不见.$nmap -sT serverStarting Nmap 4.76 ( http://nmap.org ) at 2009-06-24 11:54 MSDInteresting ports on server (x.x.x.x):Not shown: 994 filtered portsPORT STA…

技能学习重要的古语_学习方法:最重要的开发人员技能

技能学习重要的古语by Preethi Kasireddy通过Preethi Kasireddy 学习方法:最重要的开发人员技能 (Learning How to Learn: The Most Important Developer Skill) Being an efficient learner is at least as important as being an efficient coder.成为高效的学习…

Git submodule 的笔记

这次不造轮子,写写文章。file最近想把自己的 blog 整理到 github 上,但由于其中依赖了一些主题以及插件,这时候 git submodule 就能很好的处理这种情况了。 submodule 是什么? submodule 顾名思义,子模块。在一个项目依…

Leetcode690.Employee Importance员工的重要性

给定一个保存员工信息的数据结构,它包含了员工唯一的id,重要度 和 直系下属的id。 比如,员工1是员工2的领导,员工2是员工3的领导。他们相应的重要度为15, 10, 5。那么员工1的数据结构是[1, 15, [2]],员工2的数据结构是…

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

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

C#操作Excel

1.System.Data.DataTable连接数据库 ExcelFile 是excel的完整路径//OleDbConnection conExcel new OleDbConnection("ProviderMicrosoft.Jet.OLEDB.4.0;Data Source" ExcelFile ";Extended PropertiesExcel 8.0");//if (conExcel.State ConnectionStat…

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

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

rust风化速度_反驳《Golang、Rust的执行速度的对照,让人大吃一惊。》——不会别瞎说...

首先我无意引战,但是今天看到某位同学的文章里有某些错误,不得不指正一下。1. 测量时间的时候我们使用 std::time::SystemTime::elapsed 即可,不必蹩脚的使用两个 system 输出出来还得手动算一下。(当然你说对Rust不熟也就无所谓了)2. 最重要…

css flexbox模型_代码简介:CSS Flexbox有点像旅行

css flexbox模型Here are three stories we published this week that are worth your time:这是我们本周发布的三个值得您关注的故事: CSS Flexbox explained by road tripping across the country: 7 minute read CSS Flexbox在全国各地的旅途中进行了解释&#…

Sharepoint 2013设置customErrors

原文地址:http://www.cnblogs.com/renzh/archive/2013/03/05/2944309.html#3407239 一、首先设置IIS中的Web.config文件 找到对应的IIS应用程序目录,如:C:\inetpub\wwwroot\wss\VirtualDirectories\3000 在此文件夹下包含一个web.config文件&…

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…

http协议报文体_HTTP报文基本概念学习

HTTP是什么HTTP是HyperText Transfer Protocol的缩写,中文就是超文本传输协议,所谓的超,是个学术用语,是基于某种事物增加了更多的信息维度,比如超像素xxx之类的.协议是什么,协议说白了就是约定,约定就是模板,就是表格,就和你去银行办手续一样,客户不知道要提供什么信息,银行又…

yeoman_使用yeoman轻松创建Yeoman生成器

yeomanby Krist Wongsuphasawat克里斯特旺苏帕萨瓦(Krist Wongsuphasawat) 使用yeoman轻松创建Yeoman生成器 (Creating Yeoman generators easily with yeoman-easily) I’ve used Yeoman to start many of my projects. It’s an amazing web scaffolding tool.我已经用Yeoma…