从查看内存开始

通过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空间是“匿名”数据的交换空间。
交换分区是为了缓解内存不足,没有交换分区,系统也是可以正常运行的。

虚拟内存和缓存

缓存和虚拟内存,没啥关系,无论有没有虚拟内存,都需要缓存

  1. 因为代码段,数据段都需要拷贝到,内存中,cpu才可以执行。
  2. 因为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 虚拟内存 交换空间相关推荐

  1. Linux虚拟内存交换空间,Linux 添加 Swp 虚拟内存交换空间

    当 Linux 服务器的内存不够使用时,可以文件或者分区来当作虚拟内存,比如在测试机或者自己学习用的机器上,跑的服务比较多,又没有必要搞那么好(贵)的机子,添加swp交换空间也是一个不错的选择. 首先 ...

  2. linux swap 交换空间 设置多大合适

    无论是windows系统还是linux系统,除了物理内存外,都还有一个虚拟内存.在linux上,虚拟内存被称为swap space.过去以来,虚拟内存的大小应该是物理内存的两倍,但是最近几年来,物理内 ...

  3. linux系统交换空间,Linux中如何使用和管理交换空间

    给计算机配置交换空间可以充分利用系统,在物理内存被充满时使用,那么Linux下要如何使用Linux交换空间呢?Linux交换空间又要如何管理呢?下面小编就给大家介绍下Linux下使用交换空间的方法,一 ...

  4. linux 增加交换空间,在linux上增加swap交换空间

    增加交换空间有两种方法: 严格的说,在系统安装完后只有一种方法可以增加swap,那就是本文的第二种方法, 至于第一种方法应该是安装系统时设置交换区. 1.使用分区: 在安装OS时划分出专门的交换分区, ...

  5. java基础巩固-宇宙第一AiYWM:为了维持生计,四大基础之OS_Part_1整起(进程线程协程并发并行、进程线程切换进程间通信、死锁\进程调度策略、分段分页、交换空间、OS三大调度机制)

    PART0:OS,这货到底是个啥? OS,是个啥? OS的结构们: 存储器: 存储器的层次结构: 内存:我们的程序和数据都是存储在内存,我们的程序和数据都是存储在内存,每一个字节都对应一个内存地址.内 ...

  6. linux交换分区的文件格式为,linux利用交换分区空间类提供虚拟内存,交换分区的文件系统类型必须是() (5.0分)...

    2021-03-06 10:21郑州新闻网编辑:admin人气: linux利用交换分区空间类提供虚拟内存,交换分区的文件系统类型必须是() (5.0分) 物业服务企业资质一级企业的注册资本为300万 ...

  7. Linux 交换空间管理和技巧

    UNIX 如何使用交换空间 所有 UNIX 操作系统都支持某种虚拟内存 (VM) 系统.使用 VM 系统,您有两个主要区域来存储有关活动应用程序及其使用的数据的信息--物理随机访问存储器 (RAM) ...

  8. linux交换空间使用率,linux编程系统中交换空间的使用情况

    计算机的存储空间问题相信大部分的管理员都有不同的处理方式.今天我们就一起来了解一下,在linux系统中,交换空间的具体使用情况是什么.希望通过对本文的阅读,大家对于linux系统有更多的了解,下面就开 ...

  9. linux 交换空间(space space)详解

    内存和磁盘简介 正常的linux操作系统一般有两种内存,第一种就是我们熟知的RAM(random access memory),它是用来存储一段时间内频繁使用的数据和文档,电脑是不能直接读写非内存的东 ...

最新文章

  1. 录制短视频的录制按钮边框计时效果
  2. numpy python2_python-numpy(2)
  3. Csharp关键字----delegate(委托)
  4. (摘要)100个伟大的商业理念:理念34:企业社会责任
  5. 微众WeCross 跨链平台(4)异构链互联协议HIP
  6. html文字自动上翻,jQuery超酷文字随机翻转变换动画特效
  7. windows redis批量删除前缀的key_阿里官方Redis开发规范!
  8. 星际争霸战略战术的发展和创新
  9. 四格漫画《MUXing》——请客记
  10. 运维定位服务故障时,前5分钟都在忙啥?
  11. npm下载require
  12. Ansible Tower:安装以及HA多集群安装
  13. java支付方法_java实现微信H5支付方法详解
  14. Excel VBA批注
  15. 量子计算 17 量子算法2 (量子Simon算法)
  16. 微信扫一扫中的js安全接口域名的配置
  17. [PS] 没有图层匹配此滤镜 我的图层消失了
  18. 漏洞建议:实施 TLS_FALLBACK_SCSV。此外,要么完全禁用 SSLv3,要么禁用以通过 SSLv3 的 CBC 模式操作的所有密码套件
  19. 数据分析 面经(已拿到offer)
  20. 【C++】Placement New

热门文章

  1. NKOJ 1725 数字(数位dp)
  2. 2016江苏省大学生程序设计大赛 JSCPC 总结
  3. 央行数字货币突然“赛马”试点!但其走过的“长征路”却鲜为人知
  4. 从0到0.1,快速搭建一个静态网站
  5. MetInfo-CMS,米拓CMS 后台页面修改日记(第一次整理)
  6. 昨天换了一台新Mac,折腾了一天,记录一下...
  7. 奇门排盘app 保存html,‎App Store 上的“奇门-支持多种奇门的专业排盘系统”
  8. android type c 串口,type c和安卓接口区别 正式解决了USB永远插不准的
  9. java中beautyeye_BeautyEye简明开发者指南
  10. C# 串口操作系列(4) -- 协议篇,文本协议数据解析