实际动手观察一下中断

本文是《操作系统:以程序员的角度》第三章,本章的主题是从程序员的角度来理解操作系统到底是如何工作的。本篇承接上文《操作系统是如何运行的》,以下为本篇目录:

  • /proc/interrupts

  • 动手感受一下中断

  • 操作系统运行的本质

  • 中断处理负载均衡

  • IRQ Balancing

  • 总结


在前几节中我们已经知道了,鼠标、键盘、网卡等外设是通过中断(Interrupt)的形式来进行管理的,CPU在接收到中断信号后切换到内核模式,操作系统开始运行来对外设进行管理。在这一节中,我们将以Linux操作系统为例动手验证一下我们之前学的知识。

我们使用的工具是Linux下的/proc/interrupts文件。

/proc/interrupts

在类Unix系统中(当然包括Linux),可以通过查看文件的方式来获取进程以及内核运行的状态信息,这对于我们理解操作系统的运行是很有帮助的。这些文件的路径在/proc下,其中/proc/interrupts文件中保存的就是操作系统当前中断的统计信息,从文件的名字也能看出这一点来,我们使用命令来查看一下这个文件里到底有什么(你可以使用任何你熟悉的命令):

$ cat /proc/interrupts

以下是笔者单核Linux系统中的输出,注意这里只显示了其中的一部分:

            CPU0       
   0:         19   IO-APIC    2-edge      timer
   1:      68421   IO-APIC    1-edge      i8042
   8:          1   IO-APIC    8-edge      rtc0
   9:          0   IO-APIC    9-fasteoi   acpi
  12:    1162008   IO-APIC   12-edge      i8042
  14:          0   IO-APIC   14-edge      ata_piix
  15:          0   IO-APIC   15-edge      ata_piix
  16:       7797   IO-APIC   16-fasteoi   vmwgfx, snd_ens1371
  17:     135892   IO-APIC   17-fasteoi   ehci_hcd:usb1, ioc0
  18:         66   IO-APIC   18-fasteoi   uhci_hcd:usb2
  19:     160734   IO-APIC   19-fasteoi   eth0
  24:          0   PCI-MSI 344064-edge    PCIe PME, pciehp

由于笔者的计算机中只有一个CPU,因此第一行只显示了“CPU0”,如果你的计算机是多核CPU,那么第一行CPU的个数就是你的计算机中CPU的个数。

第一列表示的是中断请求号IRQ (Interrupt Request),有的同学会有疑问,这里的中断请求号和《程序员应如何理解中断》这一节中异常表中的异常号有什么关系呢?我们同样以Inter的x86系列为例,我们已经知道了x86中将异常表中的32~217用于外设中断,因此我们只需要将IRQ+32就可以在异常表中找到对应的handler了,也就是说这个文件里记录的中断类型是从0开始计数的。

第二列表示的是中断产生的次数,即从开机到目前为止产生的中断次数;第三列和第四列表示的是中断控制器(Interrupt Controller),在这里我们无需关心;最后一列表示的是产生中断的硬件设备。

在笔者的计算机中,第1号i8042表示的是键盘,第12号i8042表示的是鼠标,第19号eth0表示的是网卡。

动手感受一下中断

接下来我们就实际验证一下,晃动鼠标,敲击键盘,打开网页看看这些中断数会不会有什么变化,很显然这些中断数应该不断的增加。

由于我们使用 cat /proc/interrupts命令只能查看此刻的中断次数,也就是说cat显示的结果的静态的,而该数字是不断变化的,因此我们需要一种方法能实时的显示中断次数,在Linux下我们可以使用watch命令,该命令的作用就是周期性的执行某个程序,并把结果输出到屏幕当中,这样我们就可以动态的看到这些数字的变化了,我们可以使用如下命令实时的对中断进行观察:

watch -n0.1 -t cat /proc/interrupts

其中-n0.1表示的是每100ms执行一次cat /proc/interrupts,-t表示不显示命令参数信息,执行该命令后,晃动一下你的鼠标鼠标,敲击键盘,打开网页你会看到第1号、12号、19号的中断次数确实在不断增加。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值