linux中Swap分区是做什么的?
文章目录
- 内存分段
- 物理内存
- 虚拟内存
- 内存碎片的出现
- 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区的弊端
当然交换区虽然有很多好处,但是也存在一定的弊端,因为本来硬盘的读写速度和内存比起来相差甚远
- 如果真的服务器上物理内存不够用了,依然还是一直在跟硬盘做资源交换,系统可能会有延迟,阻塞的问题
- 从swap区拿回内存的程序,在拿的过程中,肯定会有卡顿的问题。
总结
本片文章简单介绍了Swap分区的作用,交换区虽然可以在一定程度上提升内存的使用率,但是在真正的服务器运行环境中,我们要根据自己的需求去分配Swap空间,或者是否考虑使用它。要看我们真的需要服务器一直苟延残喘,还是直接让它抛出错误,我们及时扩容内存或者调整程序。
本文为个人极客时间,深入浅出计算机组成原理笔记,如有理解问题麻烦指出,感谢
linux中Swap分区是做什么的?相关推荐
- Linux 中 Swap 分区的概念和使用
Linux 中 Swap 分区的概念和使用 [root@iZhp3h4x7t41yl0eevhf1dZ ~]# free -h total used free shared buff/cache av ...
- linux 中swap分区的中庸是什么
一.什么叫swap分区 swap分区,即交换区,swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一 ...
- 简述Linux中Swap分区的作用,linux下的swap分区
一.什么叫swap分区 swap分区,即交换区,swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一 ...
- linux 找不到swap分区,Linux下swap分区没有UUID解决办法
前几天在windows下使用分区调整软件更改了一下我Linux下swap分区的大小,linux 以后再进入Linux时发现swap分区没法挂载.打开/etc/fstab查看一下挂载配置,发现挂载分区时 ...
- linux的swap与memory,【Linux】Linux中Swap与Memory内存简单介绍
背景介绍 对于Linux来说,其在服务器市场的使用已经占据了绝对的霸主地位,不可动摇.Linux的各种设计思想和使用也被传承(当然不乏各种黑Linux,而且黑的漂亮).Linux的很多独特的设计,对性 ...
- linux的SWAP分区
linux的SWAP分区 from net 汇总网络信息,并进行测试验证,感谢网络. Linux SWAP 深度解读 https://blog.csdn.net/wh8_2011/article/de ...
- Linux:Swap分区
Linux中Swap(即:交换分区),类似于Windows的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况. 方法1:使用独立的分区来实现 1. lsblk ...
- linux增加swap分区大小
linux增加swap分区大小 2016-08-2 13:54:58 分类: LINUX 懂得Linux的都知道,标准的Linux安装,SWAP分区是内存的两倍大小,如果增加了内存条,那SWAP分 ...
- linux 命令行删除分区,如何在 Linux 中删除分区
管理分区是一件严肃的事情,尤其是当你不得不删除它们时.我发现自己经常这样做,特别是在使用 U 盘作为实时磁盘和 Linux 安装程序之后,因为它们创建了几个我以后不需要的分区. 在本教程中,我将告诉你 ...
最新文章
- php 导出excel 特殊字符,export 导出的excel sheet名字包含特殊字符
- 人生苦短,我要换Go!
- 运维人员 | 需要了解的数据中心的网络威胁
- Leading and Trailing(数论题)
- 19 Handler 子线程向主线程发送信息
- CodeForces - 1593G Changing Brackets(思维)
- 爬虫 spider02——详析http
- 24/100. Linked List Cycle
- 鸿蒙系统笔记本产业链,华为P40或用鸿蒙 华为产业链概念股一览
- Python学习 Day 3 字符串 编码 list tuple 循环 dict set
- 【数值分析】基础理论归纳
- 【操作系统】竞争条件与临界区
- 如何在React Native中创建精美的动画加载器
- bzoj1084 [SCOI2005]最大子矩阵 dp
- 小项目也可以学习到很多东西
- css颜色跟背景总结(内含实例及截图)
- web前端 基于html实现花店购物网站源码(HTML+CSS+JavaScript) 企业网站制作
- mysql execute stmt_[转载]MySql 数据库--stmt语句
- 几种镜像恒流源电路分析!
- xcode设置文字背景图片
热门文章
- Training Generative Adversarial Networks with Limited Data
- 获取文件夹里图片的所有名称,并在Excel里进行统计
- 使用Qt绘图制作一个钟表
- Service ‘MongoDB Server‘(MongoDB) failed to start.Verify that you have sufficient privileges to
- vue 多行输入框显示行号
- 计算机网络----前言
- 新装服务器、虚拟机应该做什么
- (转)RMAN-06004: 恢复目录数据库发生 ORACLE 错误: RMAN-20005: target database name is ambiguous
- 京瓷p5021cdn快速复印_功率实测 节能出色_京瓷 P5021cdn_办公打印评测试用-中关村在线...
- TAZ生成实践(Intel芯片Mac Python 3.7.9)