㑈手机版
  • 首页
  • 英语学习
  • 人物介绍
  • 旅游攻略
  • 汽车知识
  • 电脑数码
  • 生活常识
首页 电脑数码

内存与I/O的交换堆、栈、代码段是如何常驻内存

时间:2024-02-20 06:12:19  编辑:嵌入式Linux内核

内存与I/O的交换

堆、栈、代码段是否常驻内存?本文主要介绍两类不同的页面,以及这两类页面如何在内存和磁盘间进行交换?以及内存和磁盘的颠簸行为- swaping,和硬盘的swap分区。

page cache

file-backed的页面:(有文件背景的页面,比如代码段、比如read/write方法读写的文件、比如mmap读写的文件;他们有对应的硬盘文件,因此如果要交换,可以直接和硬盘对应的文件进行交换),此部分页面进page cache。

匿名页:匿名页,如stack,heap,CoW后的数据段等;他们没有对应的硬盘文件,因此如果要交换,只能交换到虚拟内存-swapfile或者Linux的swap硬盘分区),此部分页面,如果系统内存不充分,可以被swap到swapfile或者硬盘的swap分区。

内核通过两种方式打开硬盘的文件,**任何时候打开文件,Linux会申请一个page cache,然后把文件读到page cache里。**page cache 是内存针对硬盘的缓存。

更多Linux内核视频教程文档资料免费领取后台私信【内核大礼包】自行获取。

Linux读写文件有两种方式:read/write 和 mmap

  • 1)read/write: read会把内核空间的page cache,往用户空间的buffer拷贝。
    参数 fd, buffer, size ,write只是把用户空间的buffer拷贝到内核空间的page cache。
  • 2)mmap:可以避免内核空间到用户空间拷贝的过程,直接把文件映射成一个虚拟地址指针,指向linux内核申请的page cache。也就知道page cache和硬盘里文件的对应关系。

参数fd,文件对于应用程序来说,只是一部分内存。Linux使用write写文件,只是把文件写进内存,并没有sync。而内存的数据和硬盘交换的功能去完成。ELF可执行程序的头部会记录,从xxx到xxx是代码段。把代码段映射到虚拟地址,0~3 G, 权限是RX。这段地址映射到内核空间的page cache, 这段page cache又映射到可执行程序。page cache,会根据LRU算法(最近最少使用)进行替换。demo演示 page cache会多大程度影响程序执行时间。

echo 3 > /proc/sys/vm/drop_caches
time python hello.py
\time -v python hello.py

root@whale:/home/gzzhangyi2015# \time -v python hello.py
Hello World! Love, Python
	Command being timed: "python hello.py"
	User time (seconds): 0.01
	System time (seconds): 0.00
	Percent of CPU this job got: 40%
	Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.03
	Average shared text size (kbytes): 0
	Average unshared data size (kbytes): 0
	Average stack size (kbytes): 0
	Average total size (kbytes): 0
	Maximum resident set size (kbytes): 6544
	Average resident set size (kbytes): 0
	Major (requiring I/O) page faults: 10
	Minor (reclaiming a frame) page faults: 778
	Voluntary context switches: 54
	Involuntary context switches: 9
	Swaps: 0
	File system inputs: 6528
	File system outputs: 0
	Socket messages sent: 0
	Socket messages received: 0
	Signals delivered: 0
	Page size (bytes): 4096
	Exit status: 0
    
root@whale:/home/gzzhangyi2015# \time -v python hello.py
Hello World! Love, Python
	Command being timed: "python hello.py"
	User time (seconds): 0.01
	System time (seconds): 0.00
	Percent of CPU this job got: 84%
	Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.01
	Average shared text size (kbytes): 0
	Average unshared data size (kbytes): 0
	Average stack size (kbytes): 0
	Average total size (kbytes): 0
	Maximum resident set size (kbytes): 6624
	Average resident set size (kbytes): 0
	Major (requiring I/O) page faults: 0
	Minor (reclaiming a frame) page faults: 770
	Voluntary context switches: 1
	Involuntary context switches: 4
	Swaps: 0
	File system inputs: 0
	File system outputs: 0
	Socket messages sent: 0
	Socket messages received: 0
	Signals delivered: 0
	Page size (bytes): 4096
	Exit status: 0

总结:Linux有两种方式读取文件,不管以何种方式读文件,都会产生page cache 。

free命令的详细解释

             total       used       free     shared    buffers     cached
Mem:      49537244    1667532   47869712     146808      21652     421268
-/+ buffers/cache:    1224612   48312632
Swap:      4194300          0    4194300

buffers/cache都是文件系统的缓存,当访问ext3/ext4,fat等文件系统中的文件,产生cache。当直接访问裸分区(/dev/sdax)时,产生buffer。访问裸分区的用户,主要是应用程序直接打开 or 文件系统本身。dd命令 or 硬盘备份 or sd卡,会访问裸分区,产生的缓存就是buffer。而ext4文件系统把硬盘当作裸分区。buffer和cache没有本质的区别,只是背景的区别。

-/+ buffer/cache 的公式
used buffers/cache = used - buffers - cached
free buffers/cache = free + buffers + cached

新版free
available参数:评估出有多少空闲内存给应用程序使用,free + 可回收的。

File-backed和Anonymous page

  • File-backed映射把进程的虚拟地址空间映射到files比如 代码段
    比如 mmap一个字体文件
  • Anonymous映射是进程的虚拟地址空间没有映射到任何file
    Stack
    Heap
    CoW pages

anonymous pages(没有任何文件背景)分配一个swapfile文件或者一个swap分区,来进行交换到磁盘的动作。

demo:演示进程的代码段是如何被踢出去的?

pidof firefox
cat /proc/<pid>/smaps
运行 oom.c

swap以及zRAM

数据段,在未写过时,有文件背景。在写过之后,变成没有文件背景,就被当作匿名页。linux把swap分区,当作匿名页的文件背景。

swap(v.),内存和硬盘之间的颠簸行为。 
swap(n.),swap分区和swap文件,当作内存中匿名页的交换背景。在windows内,被称作虚拟内存。pagefile.sys

页面回收和LRU

回收匿名页和回收有文件背景的页面。

后台慢慢回收:通过kswapd进程,回收到高水位(high)时,才停止回收。从low -> high
直接回收:当水位达到min水位,会在两种页面同时进行回收,回收比例通过swappiness越大,越倾向于回收匿名页;swappiness越小,越倾向于回收file-backed的页面。当然,它们的回收方法都是一样的LRU算法。

Linux Page Replacement

用LRU算法来进行swap和page cache的页面替换。

现在cache的大小是4页,前四次,1,2,3,4文件被一次使用,注意第七次,5文件被使用,系统评估最近最少被使用的文件是3,那么不好意思,3被swap出去,5加载进来,依次类推。所以LRU可能会触发page cache或者anonymous页与对应文件的数据交换。

嵌入式系统的zRAM

zRAM: 用内存来做swap分区。从内存中开辟一小段出来,模拟成硬盘分区,做交换分区,交换匿名页,自带透明压缩功能。当应用程序往zRAM写数据时,会自动把匿名页进行压缩。当应用程序访问匿名页时,内存页表里不命中,发生page fault(major)。从zRAM中把匿名页透明解压出来,还到内存。

  • 本文分类:电脑数码
  • 浏览次数:191 次浏览
  • 本文链接:https://www.deibaike.com/diannaoshuma/28OvWrjLvG.html
  • 上一篇 > 华为手机后台占用内存十分严重?这7招帮你轻松解决
  • 下一篇 > 2133内存 ?不懂内存频率?看这篇就够了!
相关文章
  • 相亲第一次见面后怎么知道结果(如何判断相亲是否成功)
    如何判断相亲是否成功,很多单身朋友在相亲后不太能判断对方是否对自己满意,迟迟没有行动就会造成误会,相亲过程及结束后总是会有些迹象表明对这次见面的结果,那么该如何判断相亲是否成功?1.对方身体肢体反应身体反应是最真实的,如果不喜欢一个人,不会跟你近距离的接触,如果当你主动给ta夹菜时,ta表现的很开心[详细]
  • 如何表白成功率高?
    大家现在基本都处于一个快节奏的时代,很多事情都讲究效率,感情也不例外,从而导致离婚率提高了不少。前两天有个人问我怎么样才能提高表白的成功率?个人认为表白是一件非常私人的事情,成功率高与否往往取决于很多因素,包括你和对方的关系、对方的性格、你的表达方式等等。以下是一些可能有用的建议分享给需要的朋友:1[详细]
  • 老公不在乎老婆的表现有哪些(男人不在乎你的证据:8个字)
    一个男人爱不爱你,其实你很容易分辨出来,因为他的一举一动,都能带给你不一样的感受。比如,他对你的态度,会影响到你的心情。在生活中,他对你的态度,会让你觉得很委屈。如果一个男人,总是能让你在他面前受尽委屈,那么就说明他根本不在乎你。因为在他心里,根本就没有在意过你的感受,更不会把你放在心上。他不会顾及[详细]
  • 你们的交流越来越少的原因(原来是这些原因造成的)
    问你几个问题:你和你丈夫最后一次尽情聊天是什么时候?他最后一次主动和你分享生活中有趣的事情是什么时候?他最后一次和你聊共同朋友是什么时候?你有没有注意到,不知道从什么时候开始,你们之间的交流变得越来越少,见面的时候也不知道该如何无话不谈的继续下去?即使我们每天一起吃饭,看剧,睡觉,我们总是无话可说。[详细]
  • 最狠最绝情的分手话(最让女人感到绝情的4句分手话语)
    感情里经常有吵吵闹闹,能够在吵吵闹闹中走过来的,最后都是非常幸福的。而那些走不过来的情侣,往往都有一方会很心痛,另一方则是毫无波澜。毕竟情侣真的要分手了,大多数都是有一方已经累了、或是不爱了,才会把那些绝情的话甩给对方。那么在分手的时候,什么话会让女人感到绝情呢?一起来看看吧。1.我想我们的性格不合[详细]
最新推荐
  • 相亲第一次见面后怎么知道结果(如何判断相亲是否成功)
  • 如何表白成功率高?
  • 老公不在乎老婆的表现有哪些(男人不在乎你的证据:8个字)
  • 你们的交流越来越少的原因(原来是这些原因造成的)
  • 最狠最绝情的分手话(最让女人感到绝情的4句分手话语)
  • 和男朋友冷战后的绝招(情侣冷战如何缓解)
  • 男女有好感暧昧得表现(男女间是否“暧昧”,就看她们之间是否有这些举动)
  • 非常感人的话语(很感动,看完好想哭)
  • 男朋友对自己不是真心的怎么办(如果他对你的感情不是真心的,宁可不要)
  • 什么是冷冻信用卡(“坑爹”的信用卡冷冻提额)
热门推荐
  • 庐山的风景特色:自然之峰与文化之境
  • c盘的东西怎么清理 ?电脑c盘垃圾太多不知道怎么清理一招教你解决
  • 贵州三都县有什么旅游景点?3大传统村落,这里藏着不一样的水族风情
  • 居民医保异地就医怎么办理手续 ,哪些人适用?一文了解→
  • 汽车托运|车辆是如何装载托运的呢?
  • 你知道“get off your high horse的俚语 是什么意思吗?
  • 车保险保费上涨怎么算 走保险还是私了?次年保费涨多少?先报案不理赔”不算出险?
  • c盘temp清理? 电脑越用越卡怎么办?5个方法教你释放C盘空间,瞬间多出几个G
  • kick back俚语”不是踢回去!职场人士一定要懂!
  • 车险第三者二百万保费多少钱 ,买多少合适?老司机算笔账

网站内容来自网络,如有侵权请联系我们,立即删除!
Copyright © 得百科 琼ICP备2023010365号-2