文章目录

  • 内存分段
    • 物理内存
    • 虚拟内存
  • 内存碎片的出现
  • Swap交换区
  • 内存分页
  • 有了内存之后的Swap
  • Swap区的弊端
  • 总结

​ 我们在操作服务器的时候,一般会用top命令查看整体系统资源,top命令除了CPU,内存以及任务运行情况等,在内存的显示信息下边还有一行信息,就是Swap,它跟内存的表示方法一样,以总量,空闲,使用大小来表示当前的占用情况,那它到底是什么呢,跟内存有什么区别么?

​ swap用英文表示是交换的意思,简单说Swap区就是服务器上的交换区,这块区域其实是硬盘,并不是内存,首先它的用法肯定是用来做交换的,系统是用内存和Swap区做交换,有两个目的,第一个就是减少系统内存碎片问题。第二个是增加内存的使用率,总的来说,它就是为了保证内存的最大化利用,接下来就简单了解一下为什么需要这块区域来完成这件事情。

内存分段

内存分段的意思是,我们内存空间被占用的时候,是需要以段的形式被占用,程序内部占用的虚拟内存的空间,对应的是物理内存上的一段实际空间。

物理内存

我们电脑插入的内存条,都是物理内存,对于一个可执行程序来说,它在编译成机器码之后,装载器会将所有执行的指令组合成一段按照顺序执行的指令空间,因为指令需要按照顺序执行,所以这块空间需要是连续的,可以想象成我们的数组一样。程序越复杂,可能占用的空间就会越大。如果仅仅使用物理内存,多个可执行程序同时运行的时候,没办法准确的让某个程序去占用某一段物理内存,如果存在竞争问题,那就会出现内存数据覆盖等一些问题。为了解决这个问题,设计出了虚拟内存这个东西。

虚拟内存

虚拟内存其实就是通过映射关系,将可执行程序的内存空间,合理化的分配到了物理内存上,对于程序来说,它占用的就是一块独立的内存空间,但是它占用的位置都是虚拟内存映射出来的,通过映射可以让程序去占用某一块非固定的物理内存。但是对于程序来说,占用的内存空间是独立的,不需要再考虑竞争的问题。

内存碎片的出现

从上边内存分段我们知道,每个程序都是占用了一段空间,但是会因为程序的复杂程度,空间的大小都不一定,这种就会有一种情况,可能空余出来的某一小段内存,永远无法被新的程序占用。假设有一个内存为100M的电脑,上边装了四个程序。

  • a(20M)

  • b(60M)

  • c(10M)

  • d(30M)

按顺序启动a,b,c三个程序。然后再想启动d程序,肯定是启动不起来的,因为内存不够了。那关掉第a程序,空间虽然够了,单依然无法起来,因为b程序正好占了内存的中间一段,哪怕现在有30M的空闲,但是他们不连续,无法分配给新程序,无法分配的空间就是内存碎片,整个内存无法被合理的进行使用。

Swap交换区

根据我们上边说的,虽然有空余空间,但是不连续,无法合理使用,想要解决的话,肯定是想办法让这些内存碎片连在一起。根据上边的四个程序,我们需要将b程序占用的内存挪到最前边0的位置,将C程序挪到1的位置,这样前边占用的空间就连在了一起,已使用的空间放在了一起,后边就都是未使用的空间。但是内存没办法支持那么大一块空间在内存里直接移动,所以就出现了Swap交换区,这块单独的空间,就是用来做存储交换的。可以将b程序先放在这块交换空间上,然后再把交换空间上的东西挪到内存0的位置。这样就完成了内存的整理。解决我们上边提到的内存碎片的问题。但是这种方式有个问题就是硬盘的操作比内存中慢很多,程序越大,那么完成这个交换的时间就越长,效率低下,影响程序使用。

内存分页

既然交换的内容过大,会变慢,那想办法让每次交换的内容变小,是不是就可以优化这个问题?设计者使用了分页的概念,虚拟内存与物理内存把整段的空间映射成一个一个小空间,将程序的占用分成了linux默认4KB大小的小空间。将内存占用分成这一个一个小块,先不说交换的会不会变快,我第一个问题就是内存是不是都不用交换了 ,随机找几十块4K的空间出来那不是很容易,为什么依然还需要交换区?其实这回交换区的作用就不再是为了单纯的减少内存碎片了。

有了内存之后的Swap

上边说的,有了内存分页之后,交换区可以不再去考虑那些4KB空间的小事,但是它能做的事情就更大了,它不再只是为了减少内存碎片,内存在不够分配的时候,系统会将不活跃的程序挪到Swap交换空间中,内存只保留活跃使用的程序,当需要使用的时候,再把这些程序挪回内存,这样变相的提升内存空间的使用率,甚至说扩大了内存空间,虽然慢了些,但是不会出现一些异常问题,给我们足够的时间去关闭程序或者做一些其他操作。

Swap区的弊端

当然交换区虽然有很多好处,但是也存在一定的弊端,因为本来硬盘的读写速度和内存比起来相差甚远

  1. 如果真的服务器上物理内存不够用了,依然还是一直在跟硬盘做资源交换,系统可能会有延迟,阻塞的问题
  2. 从swap区拿回内存的程序,在拿的过程中,肯定会有卡顿的问题。

总结

本片文章简单介绍了Swap分区的作用,交换区虽然可以在一定程度上提升内存的使用率,但是在真正的服务器运行环境中,我们要根据自己的需求去分配Swap空间,或者是否考虑使用它。要看我们真的需要服务器一直苟延残喘,还是直接让它抛出错误,我们及时扩容内存或者调整程序。

本文为个人极客时间,深入浅出计算机组成原理笔记,如有理解问题麻烦指出,感谢

linux中Swap分区是做什么的?相关推荐

  1. Linux 中 Swap 分区的概念和使用

    Linux 中 Swap 分区的概念和使用 [root@iZhp3h4x7t41yl0eevhf1dZ ~]# free -h total used free shared buff/cache av ...

  2. linux 中swap分区的中庸是什么

    一.什么叫swap分区 swap分区,即交换区,swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一 ...

  3. 简述Linux中Swap分区的作用,linux下的swap分区

    一.什么叫swap分区 swap分区,即交换区,swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一 ...

  4. linux 找不到swap分区,Linux下swap分区没有UUID解决办法

    前几天在windows下使用分区调整软件更改了一下我Linux下swap分区的大小,linux 以后再进入Linux时发现swap分区没法挂载.打开/etc/fstab查看一下挂载配置,发现挂载分区时 ...

  5. linux的swap与memory,【Linux】Linux中Swap与Memory内存简单介绍

    背景介绍 对于Linux来说,其在服务器市场的使用已经占据了绝对的霸主地位,不可动摇.Linux的各种设计思想和使用也被传承(当然不乏各种黑Linux,而且黑的漂亮).Linux的很多独特的设计,对性 ...

  6. linux的SWAP分区

    linux的SWAP分区 from net 汇总网络信息,并进行测试验证,感谢网络. Linux SWAP 深度解读 https://blog.csdn.net/wh8_2011/article/de ...

  7. Linux:Swap分区

    Linux中Swap(即:交换分区),类似于Windows的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况. 方法1:使用独立的分区来实现 1. lsblk ...

  8. linux增加swap分区大小

      linux增加swap分区大小 2016-08-2 13:54:58 分类: LINUX 懂得Linux的都知道,标准的Linux安装,SWAP分区是内存的两倍大小,如果增加了内存条,那SWAP分 ...

  9. linux 命令行删除分区,如何在 Linux 中删除分区

    管理分区是一件严肃的事情,尤其是当你不得不删除它们时.我发现自己经常这样做,特别是在使用 U 盘作为实时磁盘和 Linux 安装程序之后,因为它们创建了几个我以后不需要的分区. 在本教程中,我将告诉你 ...

最新文章

  1. php 导出excel 特殊字符,export 导出的excel sheet名字包含特殊字符
  2. 人生苦短,我要换Go!
  3. 运维人员 | 需要了解的数据中心的网络威胁
  4. Leading and Trailing(数论题)
  5. 19 Handler 子线程向主线程发送信息
  6. CodeForces - 1593G Changing Brackets(思维)
  7. 爬虫 spider02——详析http
  8. 24/100. Linked List Cycle
  9. 鸿蒙系统笔记本产业链,华为P40或用鸿蒙 华为产业链概念股一览
  10. Python学习 Day 3 字符串 编码 list tuple 循环 dict set
  11. 【数值分析】基础理论归纳
  12. 【操作系统】竞争条件与临界区
  13. 如何在React Native中创建精美的动画加载器
  14. bzoj1084 [SCOI2005]最大子矩阵 dp
  15. 小项目也可以学习到很多东西
  16. css颜色跟背景总结(内含实例及截图)
  17. web前端 基于html实现花店购物网站源码(HTML+CSS+JavaScript) 企业网站制作
  18. mysql execute stmt_[转载]MySql 数据库--stmt语句
  19. 几种镜像恒流源电路分析!
  20. xcode设置文字背景图片

热门文章

  1. Training Generative Adversarial Networks with Limited Data
  2. 获取文件夹里图片的所有名称,并在Excel里进行统计
  3. 使用Qt绘图制作一个钟表
  4. Service ‘MongoDB Server‘(MongoDB) failed to start.Verify that you have sufficient privileges to
  5. vue 多行输入框显示行号
  6. 计算机网络----前言
  7. 新装服务器、虚拟机应该做什么
  8. (转)RMAN-06004: 恢复目录数据库发生 ORACLE 错误: RMAN-20005: target database name is ambiguous
  9. 京瓷p5021cdn快速复印_功率实测 节能出色_京瓷 P5021cdn_办公打印评测试用-中关村在线...
  10. TAZ生成实践(Intel芯片Mac Python 3.7.9)