中断是什么

中断是操作系统、CPU、CPU与IO设备中的概念,为中断CPU执行。其中涉及的概念都有无限深的概念栈(其实是无限深)我们就从简单的系统层面讲一讲。

See the source image

前置概念

IRQ:interrupt request,中断请求

ISR:interrupt service routine, 中断服务程序,中断后运行的服务,ISR运行结束才会结束中断

PIC:programmable interrupt contolle,可编程中断控制器(中断控制芯片),与I/O设备直连,可以触发CPU的INTR(中断请求)引脚,发起中断请求

APIC:advanced programmable interrupt contolle,高级编程中断控制器,有两部分,Local APIC 在CPU内部(每个核都有),I/O APIC在主板芯片组内,I/O APIC和LAPIC通过总线连接

硬中断

硬件设备通知CPU就绪中使用,分为:

可屏蔽中断

外设或借口的中断、可以在CPU处理其他紧急操作时忽略或屏蔽

不可屏蔽中断

电源断电、内存错误等,不可通过软件屏蔽,必须响应中断

软中断

软件触发的中断,如定时器、网卡收发包

异常

一般为程序调用CPU的指令错误时产生,console能看到 segmention fault、core dumped等

错误:系统可纠正、纠正成功继续运行(如内存页从磁盘加载)

陷阱:陷阱主要用在调试中。

终止:终止是由系统表中的硬件错误或值不一致而导致的。终止不会报告造成异常的指令的所在位置。这是最严重的中断,终止将会调用系统的终止异常处理程序来结束造成异常的进程。

top命令解析

1
2
3
4
5
6
7
top - 10:40:48 up  1:04,  1 user,  load average: 2.39, 2.22, 2.07
任务: 400 total, 2 running, 397 sleeping, 0 stopped, 1 zombie
%Cpu(s): 5.2 us, 3.4 sy, 0.0 ni, 90.5 id, 0.1 wa, 0.0 hi, 0.8 si, 0.0 st
MiB Mem : 15430.3 total, 3579.7 free, 8020.7 used, 3829.9 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 6880.5 avail Mem
ID USER PR NI VIRT RES SHR %CPU %MEM TIME+ COMMAND
4389 longtao 20 0 6273452 451044 148220 S 37.7 2.9 27:28.46 gnome-shell

第一行分别为:系统时间、系统已运行时间(1h4min)、用户数、平均CPU负载情况(1分钟、5分钟、15分钟)

第二行分别为:当前总任务(进程)数量、运行中的2个、休眠397个、stoped0个,zombie0个

第三为cpu的状态使用情况

名称 说明
5.2 us 用户空间占用CPU%5.2
3.4 sy 内核空间占用CPU%3.4
0.0 ni 更改过优先级的进程占用CPU%0
90.5 id 90.5%的CPU空闲
0.1 wa IO等待占用CPU百分比
0.8 si 软中断占用CPU%0.8
0.0 hi 硬中断占用
0.0 st steal time,对云主机来说被Hypervisor偷去的CPU所占比例

第四行为内存状态分别为:物理总内存total、used使用了的、free空闲的、缓存内存

第五行为swap交换分区状态:total交换分区总量、空闲、使用了的、缓冲的

第六行往下都是每个进程使用情况:

名称 说明
ID 进程号
USER 用户
PR 进程优先级
NI nice值,正表示低优先值、负表示高
VIRT 进程使用虚拟内存总量,VIRT=SWAP+RES
RES 进程使用的、未释放的物理内存,RES=CODE+DATA
SHR 共享内存
S 进程状态,D不可中断的睡眠状态 R运行 S睡眠 T跟踪/停止 Z僵尸进程
%CPU CPU占比(对单个CPU的)
%MEM 物理内存占比
TIME+ 进程使用的CPU时间总计,单位为us
COMMAND 进程名称和命令

命令

数字1:查看每个cpu的情况

数字2:查看每个numa的情况

数字3:查看某个numa里每个CPU的情况

字母P:CPU使用排序

字母M:内存使用排序

字母m:改变内存和交换区显示

字母b:高亮运行太进程

字母f:编排显示