Linux 虚拟内存 交换空间
从查看内存开始
通过proc查看
#cat /proc/meminfo
MemTotal: 220976 kB
MemFree: 206188 kB
MemAvailable: 205556 kB
Buffers: 204 kB
Cached: 1412 kB
SwapCached: 0 kB
Active: 2232 kB
Inactive: 148 kB
Active(anon): 760 kB
Inactive(anon): 4 kB
Active(file): 1472 kB
Inactive(file): 144 kB
Unevictable: 0 kB
Mlocked: 0 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 220976 kB
...
通过 free 查看
#free -mtotal used free shared buffers
Mem: 215 14 201 0 0
-/+ buffers: 14 201
Swap: 0 0 0
重点关注的项目:
free:空余的物理内存的空间
available:用户应用程序可以使用的物理空间
(通常为 buff/cache + free,不过这个是由偏差的)
page cache:文件系统的缓冲
buffer chche:磁盘等块设备的缓冲
问题
为什么需要虚拟内存
如果不使用虚拟内存,当物理内存不够时,程序就无法跑起来
虚拟内存,给用户提供了那些基本机制
给每个进程提供了4Gb的内存空间
既然每个进程都有4G的内存空间,为什么会出现物理内存不足,需要拓展内存
当malloc需要的内存超过,物理空闲内存和交换空间的大小时,是无法分配内存的。4G只是最大大小,很多嵌入式系统,是根本无法分配如此大的空间的。并且,当所有的物理内存都被虚拟内存映射使用时,继续使用就需要将物理内存的数据写回到文件系统中,或者放到交换分区,这样会十分的浪费时间,系统使用将会非常卡顿。
既然由虚拟内存机制,为什么还需要交换分区,什么时候将会使用交换分区
并不是所有从物理内存中交换出来的数据都会被放到Swap中(如果这样的话,Swap就会不堪重负),有相当一部分数据被直接交换到文件系统。例如,有的程序会打开一些文件,对文件进行读写,当需要将这些程序的内存空间交换出去时,就没有必要将文件部分的数据放到Swap空间中了,而可以直接将其放到文件里去。如果是读文件操作,那么内存数据被直接释放,不需要交换出来,因为下次需要时,可直接从文件系统恢复;如果是写文件,只需要将变化的数据保存到文件中,以便恢复。但是那些用malloc和new函数生成的对象的数据则不同,它们需要Swap空间,因为它们在文件系统中没有相应的“储备”文件,因此被称作“匿名”(Anonymous)内存数据。这类数据还包括堆栈中的一些状态和变量数据等。所以说,Swap空间是“匿名”数据的交换空间。
交换分区是为了缓解内存不足,没有交换分区,系统也是可以正常运行的。
虚拟内存和缓存
缓存和虚拟内存,没啥关系,无论有没有虚拟内存,都需要缓存
- 因为代码段,数据段都需要拷贝到,内存中,cpu才可以执行。
- 因为cpu 和 磁盘之间的处理速度相差太大,使用缓冲可以缓解压力,提高系统效率。
没有虚拟内存,就缓存在物理内存上,有虚拟内存,就从物理内存再次映射到虚拟内存上。如果系统访问的虚拟内存内容,还没有加载到物理内存中,就会触发缺页异常。需要注意的使bufferd 和 cached。他们的使用如图片所示:
什么的缺页异常
指定访问的虚拟page,不在物理内存中,就会触发缺页异常:
page fault的种类:
segment fault : 进程访问的地址不在虚拟空间里属于越界访问。
hard page fault: 访问的内存不在物理内存中,需要从存储设备加载进内存中。
minor page fault: 访问的内存不在虚拟内存中,需要重新建立映射关系。
如何手动消除缓冲
缓冲占用的内存过大时,可以通过
sync
echo 1 > /proc/sys/vm/drop_caches
虚拟内存有什么好处
1.既然每个进程的内存空间都是一致而且固定的,所以链接器在链接可执行文件时,可以设定内存地址,而不用去管这些数据最终实际的内存地址,这是有独立内存空间的好处
2.共享内存,使用虚拟内存机制,共享内存将会极为方便,两个进程的虚拟地址空间,都只向通过一块物理内存就可以实现,内存共享。
3.内存保护,通过虚拟内存机制可以,使每个进程都有独立的内存空间,不受干扰。
vmalloc kmalloc malloc
这几个的区别,可以参考下面的文章。
关键点,vmalloc kmalloc是内核空间的,malloc是用户空间的。
https://www.cnblogs.com/arnoldlu/p/8251333.html
Linux 虚拟内存 交换空间相关推荐
- Linux虚拟内存交换空间,Linux 添加 Swp 虚拟内存交换空间
当 Linux 服务器的内存不够使用时,可以文件或者分区来当作虚拟内存,比如在测试机或者自己学习用的机器上,跑的服务比较多,又没有必要搞那么好(贵)的机子,添加swp交换空间也是一个不错的选择. 首先 ...
- linux swap 交换空间 设置多大合适
无论是windows系统还是linux系统,除了物理内存外,都还有一个虚拟内存.在linux上,虚拟内存被称为swap space.过去以来,虚拟内存的大小应该是物理内存的两倍,但是最近几年来,物理内 ...
- linux系统交换空间,Linux中如何使用和管理交换空间
给计算机配置交换空间可以充分利用系统,在物理内存被充满时使用,那么Linux下要如何使用Linux交换空间呢?Linux交换空间又要如何管理呢?下面小编就给大家介绍下Linux下使用交换空间的方法,一 ...
- linux 增加交换空间,在linux上增加swap交换空间
增加交换空间有两种方法: 严格的说,在系统安装完后只有一种方法可以增加swap,那就是本文的第二种方法, 至于第一种方法应该是安装系统时设置交换区. 1.使用分区: 在安装OS时划分出专门的交换分区, ...
- java基础巩固-宇宙第一AiYWM:为了维持生计,四大基础之OS_Part_1整起(进程线程协程并发并行、进程线程切换进程间通信、死锁\进程调度策略、分段分页、交换空间、OS三大调度机制)
PART0:OS,这货到底是个啥? OS,是个啥? OS的结构们: 存储器: 存储器的层次结构: 内存:我们的程序和数据都是存储在内存,我们的程序和数据都是存储在内存,每一个字节都对应一个内存地址.内 ...
- linux交换分区的文件格式为,linux利用交换分区空间类提供虚拟内存,交换分区的文件系统类型必须是() (5.0分)...
2021-03-06 10:21郑州新闻网编辑:admin人气: linux利用交换分区空间类提供虚拟内存,交换分区的文件系统类型必须是() (5.0分) 物业服务企业资质一级企业的注册资本为300万 ...
- Linux 交换空间管理和技巧
UNIX 如何使用交换空间 所有 UNIX 操作系统都支持某种虚拟内存 (VM) 系统.使用 VM 系统,您有两个主要区域来存储有关活动应用程序及其使用的数据的信息--物理随机访问存储器 (RAM) ...
- linux交换空间使用率,linux编程系统中交换空间的使用情况
计算机的存储空间问题相信大部分的管理员都有不同的处理方式.今天我们就一起来了解一下,在linux系统中,交换空间的具体使用情况是什么.希望通过对本文的阅读,大家对于linux系统有更多的了解,下面就开 ...
- linux 交换空间(space space)详解
内存和磁盘简介 正常的linux操作系统一般有两种内存,第一种就是我们熟知的RAM(random access memory),它是用来存储一段时间内频繁使用的数据和文档,电脑是不能直接读写非内存的东 ...
最新文章
- 紧急求助!配置SMTP插件出错,SMTP connect() failed
- java中executorservice_java中ExecutorService创建方法总结
- ML/DL之激活函数/求导函数:ML中常用的AF激活函数(step_function、sigmoid、softmax、ReLU等)求导函数等代码实现之详细攻略
- java webpack_webpack将对象暴露为全局
- 使用IntelliJ IDEA看源码的时候,如何在优雅的查看类继承关系...【看这篇就够了】
- JavaScript逻辑运算符的使用技巧
- 第三十三章 机械化印刷
- Android eclipse中程序调试
- VC++ (MFC)调用 C#生成DLL的两种方法
- MATLAB解决常微分方程
- cad看图软件看图软件哪个好?
- u盘 安装win11 提示找不到 install.wim 文件 解决方法
- 云栖社区Markdown指南【2018版】
- 程序员撩妹,你得看我教你的小技巧
- 神经网络入门(连载1-6)
- 2016 GitHub章鱼猫观察报告之开源统计
- adaboost训练 之 强分类器训练原理
- while语句和do...while语句
- 大数据治理平台建设规划方案
- IdentityServer4 DiscoveryClient找不到