Linux操作系统:基础篇9基本功能之内存管理

简介: 基础篇9基本功能之内存管理

一、基本概念

1、地址

 (1)逻辑地址:指由程序产生的与段相关的偏移地址部分。在C语言指针中,读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址。

 (2)线性地址:段中的偏移地址(逻辑地址),加上相应段的基地址就生成了一个线性地址。

 (3)物理地址: 放在寻址总线上的地址。

 (4)虚拟地址:保护模式下段和段内偏移量组成的地址,而逻辑地址就是代码段内偏移量,或称进程的逻辑地址。

2、内存

 (1) 虚拟内存:计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。与没有使用虚拟内存技术的系统相比,使用这种技术的系统使得大型程序的编写变得更容易,对真正的物理内存(例如RAM)的使用也更有效率。

 (2) 物理内存:实际的内存。物理地址被分成离散的单元,成为页(page)。目前大多数系统的页面大小都为4k。

3、地址转换

 Linux采用段页式管理机制,有两个部件用于地址转换:分段部件和分页部件。

 (1) 分段部件:将逻辑地址转换为线性地址。分段提供了隔绝各个代码、数据和堆栈区域的机制,因此多个程序(任务)可以运行在同一个处理器上而不会互相干扰。

 (2) 分页部件:将线性地址转换为物理地址(页表和页目录),若没有启用分页机制,那么线性地址直接就是物理地址。

d1ba6a00dacd4802b386c361a14ca154.png

二、相关命令

1、free命令

 free命令用于显示内存状态。

 free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。

(1)语法:

 free [参数]

(2)常用参数

98317e76aeb640b08787e61d577ca3dc.png

(3)输出项含义

6a5cbba5baa04e7db752ed8ea54f187a.png

 free 与 available 的区别:

 free 是真正尚未被使用的物理内存数量。

 available 是应用程序认为可用内存数量,available = free + buffer + cache

 (注:只是大概的计算方法)

 Cache:缓存区,是高速缓存,是位于CPU和主内存之间的容量较小但速度很快的存储器,因为CPU的速度远远高于主内存的速度,CPU从内存中读取数据需等待很长的时间,而 Cache保存着CPU刚用过的数据或循环使用的部分数据,这时从Cache中读取数据会更快,减少了CPU等待的时间,提高了系统的性能。

 Buffer:缓冲区,用于存储速度不同步的设备或优先级不同的设备之间传输数据;通过buffer可以减少进程间通信需要等待的时间,当存储速度快的设备与存储速度慢的设备进行通信时,存储慢的数据先把数据存放到buffer,达到一定程度存储快的设备再读取buffer的数据,在此期间存储快的设备CPU可以干其他的事情。

 简单来说,buffer是即将要被写入磁盘的,而cache是被从磁盘中读出来的。

(4)示例

 <1>显示内存使用情况: # free

linux@b109199:$ free
total used  free  shared  buff/cache  available 
Mem:  7822340 5364752 2228236 17720 229352  2323856 
Swap: 13108028  136788  12971240  
1inux@b109199:~$

 <2>以总和的形式显示内存的使用信息:# free -t

inux@b109199:~$free-t
total used  free  shared  buff/cache  available 
Mem:  7822340 5385408 2207580 17720 229352  2303200 
Swap : Total:209303681310802855221601367521297127615178856

 <3>周期性的查询内存使用信息:# free -s 10 //每10s 执行一次命令

linux@b109199:~$free -s10
total used  free  shared  buff/cache  available 
Mem:  7822340 5383376 2209612 17720 229352  2305232 
Swap :  13108028  136724  12971304  
total used  free  shared  buff/cache  available 
Mem:  7822340 5285528 2307460 17720 229352  2403080 
Swap: 13108028  136664  12971364

2、vmstat工具

 vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。它能够对系统的整体情况进行统计,无法对某个进程进行深入分析。

(1)语法:

 vmstat [参数]

 常用参数:

9887a2ae126c4d9fa4f88c970f306f1d.png

(2)输出字段说明:

vpc@vpc:~$ vmstat 2 2
procs - --memory--  -Swap-- -----io-----system--------cpu---- 
r b swpd  free  buff cache  si so bi bo in  cs us sy id wa st 
0 0 400300 247968 107152 283068 29 124 1512 1489 227 761 8 4 86 1 
2 0 400300 247968 107152 283068 0 0 0 54  99 1 0990

550a944ac3644830aa09c4ccf5346d90.png

a42cb369e28c46a38a670a1cbed9b160.png

(3)示例:

 <1>每2秒执行一次vmstat,共执行6次

OOT T O 98  8T  0 0 89ETOT 190ZZ  ZTPOT8 0  
OOT 0 O LT  0 89ETOT 190ZZ  ZTFOT8 0  0 0 
0
0
0
OOT 0 0 : 8E  LT O  0 0 0 89ETOT 190ZZ  ZTFOT8 0  0 0 
OOT O O SE  T 0 0 0 89ETOT 190ZZ  ZTFOT8 0  0 0 
0
0 OOT O O SE  9T  0 0 0 89ETOT 79022  ZTpOT8 0  0 0 
0 0 
0
0 Z 968O LS OS E  99  89ETOT 190Z7  0ZFOT8 0  
0
Is em pr ks sn so uT  oq  Tq  TS  qOB3  Jjnq  eaIJ  pdms  9 工 
ndo.  waISAS  dems  Atowaw  soord 
9 Z 1B1SUA  #[~1utuoa1@100x]

 <2>输出带时间戳的vmstat命令

DZST U8:L9:BT 20-60-ZTOZ  0 0 969 0 Z69 68T 0 0 FZZ6T Z661Z 999T89 0  0 I 
0
0
LSI TZ:LS:FT Z0-60-ZTOZ 0 0 969 01ZS  99T 0 FZZ6T Z661Z 08LTE9 0  
0
0
0
0
0
LSI 0Z:L9:TT Z0-60-ZT0Z 0 0 969 0 009 96T 0 0 0 FZZ6T Z6678 币0O6TE9 0 0 T 
0
LSI 6T:LS:FT Z0-60-ZT0Z 0 0 P69 I PTS TLT O 0 0 ZZ6T Z664Z  8ZOZE9 0  0 I 
0
LSI 8T:L9:PT ZO-60-ZT0Z O I 96E I 8L  99 S  OL  0 FZZ6T Z661Z 8Z0ZE9 0  00  
0
Is em pT As sn so uT  0q  Tq  os  TS  aqoeo Jjnq  pdms  9 I 
dueisauti ndo.  -w1sAS_ Arowau. soord 
IBISUA  Jutuoarorutuoa1]

 <3>输出各种事件计数器和内存的统计信息

#vmstat –s

 <4>输出所有磁盘的统计信息

#vmstat –d

 <5>输出以MB为单位输出统计信息

#vmstat -S M 1 5

3、iostat工具

 iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。

(1)用法:

 iostat [选项] [<时间间隔>] [<次数>]

(2)常用参数:

0c97ab391a2b4d9ca216652bfb6d7b61.png

(3)输出字段说明:

 #iostat

avg" cpu:号user
0.78名nice
0.00名system
0.05名iowait
0.01号steal
0.00号idle99.16
Device: tps Blk read/s  Blk wrtn/s  Blk read  Blk wrtn  
sda 1.08  15.87 9.58  497398  300018  
dm-1  dm-0  0.72  4 .22 4.87  132186  152560  
0.01  0.08  0.00  2496  0 
dm-2  0.83  11.36 4.71  355842  147440  
sdb 0.03  1.15  0.08  35922 2560  
sdc sdd dm-3  0.11  0.03  0.03  1.05  1.08  0.08  0.10  33704 32952 3152  2552  
4.30  0.35  134738  11064 
sde 0.03  1.11  0.09  34880 2800

 cpu属性值说明:

e1bb2515c2d54bf98fa320a41ff50dd9.png

 备注:如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲;

 如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。

 %idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU

 disk属性值说明:

83ae2d2ff2174abaa77d35afacc609f4.png

(4)示例:

<1>间隔1秒,总共显示5次
     #iostat 1 5
  <2>每隔2秒,显示一次设备统计信息
    #iostat -d 2
  <3>每隔2秒显示一次sda, sdb两个设备的扩展统计信息,共输出3次
    #iostat -x sda sdb 2 3


相关文章
|
6月前
|
存储 Linux iOS开发
【Linux】冯诺依曼体系与操作系统理解
本文深入浅出地讲解了计算机体系的两大核心概念:冯诺依曼体系结构与操作系统。冯诺依曼体系作为现代计算机的基础架构,通过中央处理器、存储器和输入输出设备协同工作,解决了硬件性能瓶颈问题。操作系统则是连接硬件与用户的桥梁,管理软硬件资源,提供运行环境。文章还详细解析了操作系统的分类、意义及管理方式,并重点阐述了系统调用的作用,为学习Linux系统编程打下坚实基础。适合希望深入了解计算机原理和技术内幕的读者。
153 1
|
2月前
|
监控 Linux 开发者
理解Linux操作系统内核中物理设备驱动(phy driver)的功能。
综合来看,物理设备驱动在Linux系统中的作用是至关重要的,它通过与硬件设备的紧密配合,为上层应用提供稳定可靠的通信基础设施。开发一款优秀的物理设备驱动需要开发者具备深厚的硬件知识、熟练的编程技能以及对Linux内核架构的深入理解,以确保驱动程序能在不同的硬件平台和网络条件下都能提供最优的性能。
125 0
|
4月前
|
缓存 Linux 数据安全/隐私保护
Linux环境下如何通过手动调用drop_caches命令释放内存
总的来说,记录住“drop_caches” 命令并理解其含义,可以让你在日常使用Linux的过程中更加娴熟和自如。
943 23
|
4月前
|
Java 关系型数据库 MySQL
在Linux操作系统上设置JDK、Tomcat、MySQL以及J2EE后端接口的部署步骤
让我们总结一下,给你的Linux操作系统装备上最强的军队,需要先后装备好JDK的弓箭,布置好Tomcat的阵地,再把MySQL的物资原料准备好,最后部署好J2EE攻城车,那就准备好进军吧,你的Linux军团,无人可挡!
113 18
|
4月前
|
开发框架 关系型数据库 Java
Linux操作系统中JDK、Tomcat、MySQL的完整安装流程以及J2EE后端接口的部署
然后Tomcat会自动将其解压成一个名为ROOT的文件夹。重启Tomcat,让新“植物”适应新环境。访问http://localhost:8080/yourproject看到你的项目页面,说明“植物”种植成功。
125 10
|
6月前
|
监控 Linux Python
Linux系统资源管理:多角度查看内存使用情况。
要知道,透过内存管理的窗口,我们可以洞察到Linux系统运行的真实身姿,如同解剖学家透过微观镜,洞察生命的奥秘。记住,不要惧怕那些高深的命令和参数,他们只是你掌握系统"魔法棒"的钥匙,熟练掌握后,你就可以骄傲地说:Linux,我来了!
218 27
|
10月前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
421 0
Vanilla OS:下一代安全 Linux 发行版
|
7月前
|
运维 自然语言处理 Ubuntu
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot 是阿里云推出的一款操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行和系统运维调优等功能。通过简单的命令行操作,用户可以快速获取所需信息并执行任务,极大提升了Linux系统的使用效率。安装步骤简单,只需在阿里云服务器上运行几条命令即可完成部署。使用过程中,OS Copilot不仅能帮助查找命令,还能处理文件和复杂场景,显著节省了查找资料的时间。体验中发现,部分输出格式和偶尔出现的英文提示有待优化,但整体非常实用,特别适合Linux初学者。
371 10
|
8月前
|
弹性计算 自然语言处理 Ubuntu
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot是由阿里云推出的操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行等功能,极大提升了Linux系统的使用效率。用户只需通过简单的命令或自然语言描述问题,OS Copilot即可快速提供解决方案并执行相应操作。例如,查询磁盘使用量等常见任务变得轻松快捷。此外,它还支持从文件读取复杂任务定义,进一步简化了操作流程。虽然在某些模式下可能存在小问题,但总体上大大节省了学习和操作时间,提高了工作效率。
280 2
OS Copilot-操作系统智能助手-Linux新手小白的福音
|
8月前
|
弹性计算 运维 Ubuntu
os-copilot在Alibaba Cloud Linux镜像下的安装与功能测试
我顺利使用了OS Copilot的 -t -f 功能,我的疑惑是在换行的时候就直接进行提问了,每次只能写一个问题,没法连续换行更有逻辑的输入问题。 我认为 -t 管道 功能有用 ,能解决环境问题的连续性操作。 我认为 -f 管道 功能有用 ,可以单独创建可连续性提问的task问题。 我认为 | 对文件直接理解在新的服务器理解有很大的帮助。 此外,我还有建议 可以在非 co 的环境下也能进行连续性的提问。
187 7

热门文章

最新文章