Rumah  >  Artikel  >  Tutorial sistem  >  Gangguan CPU Linux: Peristiwa Asynchronous dan Mekanisme Pengendalian Biasa

Gangguan CPU Linux: Peristiwa Asynchronous dan Mekanisme Pengendalian Biasa

WBOY
WBOYke hadapan
2024-02-11 15:06:40678semak imbas

Linux interrupt ialah peristiwa tak segerak yang boleh berlaku pada bila-bila masa dan boleh memecahkan aliran pelaksanaan biasa program. Untuk mengendalikan gangguan ini, kernel Linux menyediakan mekanisme pengendalian gangguan umum.

Linux CPU 中断:异步事件和通用处理机制

Sampukan sebenarnya adalah isyarat yang dipanggil IRQ (permintaan gangguan) yang dihantar oleh perkakasan atau perisian.

Gangguan membenarkan peranti seperti papan kekunci, kad bersiri, port selari, dll. untuk menunjukkan bahawa ia memerlukan CPU.

Sebaik sahaja CPU menerima permintaan gangguan, CPU menghentikan sementara melaksanakan program yang sedang berjalan dan memanggil program tertentu yang dipanggil pengendali gangguan atau rutin perkhidmatan gangguan.

Rutin perkhidmatan gangguan atau pengendali gangguan boleh didapati dalam jadual vektor gangguan, yang terletak pada alamat tetap dalam ingatan. Selepas gangguan diproses oleh CPU, pelaksanaan program yang terganggu sebelum ini akan disambung semula.

Malah, apabila mesin dimulakan, sistem telah mengenal pasti semua peranti dan memuatkan pengendali gangguan yang sepadan ke dalam jadual gangguan.

Berikut ialah dua cara untuk meminta perhatian CPU:
1. Berasaskan gangguan
2. Berdasarkan undian

Semua sistem pengendalian Linux adalah berdasarkan pemacu gangguan.

Apabila kita menekan kekunci pada papan kekunci, papan kekunci memberitahu CPU bahawa kekunci telah ditekan. Dalam kes ini, voltan dalam talian IRQ papan kekunci akan berubah sekali, dan perubahan voltan ini adalah permintaan daripada peranti, yang bersamaan dengan mengatakan bahawa peranti mempunyai permintaan yang perlu diproses.

/proc/mengganggu fail
Pada mesin Linux, fail /proc/interrupts mengandungi maklumat tentang gangguan yang sedang digunakan dan berapa kali setiap pemproses telah diganggu.

\# cat /proc/interrupts 
     CPU0 CPU1 CPU2 CPU3 
 0: 3710374484   0  0  0 IO-APIC-edge timer 
 1:    20   0  0  0 IO-APIC-edge i8042 
 6:     5   0  0  0 IO-APIC-edge floppy 
 7:     0   0  0  0 IO-APIC-edge parport0 
 8:     0   0  0  0 IO-APIC-edge rtc 
 9:     0   0  0  0 IO-APIC-level acpi 
 12:    240   0  0  0 IO-APIC-edge i8042 
 14: 11200026   0  0  0 IO-APIC-edge ide0 
 51: 61281329   0  0  0 IO-APIC-level ioc0 
 59:     1   0  0  0 IO-APIC-level vmci 
 67: 19386473   0  0  0 IO-APIC-level eth0 
 75: 94595340   0  0  0 IO-APIC-level eth1 
NMI:     0   0  0  0
LOC: 3737150067 3737142382 3737145101 3737144204
ERR:     0
MIS:     0

Output fail di atas dijelaskan seperti berikut:
● Lajur pertama menunjukkan nombor IRQ
● Lajur kedua, ketiga dan keempat menunjukkan bilangan kali teras CPU yang sepadan telah diganggu. Dalam contoh di atas, pemasa mewakili nama gangguan (iaitu jam sistem). 3710374484 bermakna CPU0 telah diganggu 3710374484 kali. i8042 mewakili pengawal papan kekunci yang mengawal papan kekunci dan tetikus.
● Untuk gangguan seperti rtc (jam masa nyata), CPU tidak akan terganggu. Kerana RTC wujud dalam peranti elektronik dan digunakan untuk menjejak masa.
● NMI dan LOC ialah pemacu yang digunakan oleh sistem dan tidak boleh diakses dan dikonfigurasikan oleh pengguna.

Nombor IRQ menentukan keutamaan yang perlu diproses oleh CPU. Lebih kecil nombor IRQ bermakna lebih tinggi keutamaan.
Sebagai contoh, jika CPU menerima gangguan daripada kedua-dua papan kekunci dan jam sistem, CPU akan terlebih dahulu memberi perkhidmatan kepada jam sistem kerana nombor IRQnya ialah 0.
● IRQ0: Jam sistem (tidak boleh ditukar)
● IRQ1: pengawal papan kekunci (tidak boleh ditukar)
● IRQ3: Pengawal port bersiri port bersiri 2 (jika terdapat port bersiri 4, ia juga menggunakan gangguan ini)
● IRQ4: Pengawal port bersiri port bersiri 1 (jika terdapat port bersiri 3, ia juga menggunakan gangguan ini)
● IRQ5: Port selari 2 dan 3 atau kad bunyi
● IRQ6: Pengawal cakera liut
● IRQ7: Port selari 1. Ia digunakan dengan pencetak atau jika tiada pencetak, boleh digunakan dengan mana-mana port selari.

Untuk CPU pada kayu bedik (atau pad permainan), ia tidak menunggu peranti menghantar gangguan. Oleh kerana kayu bedik digunakan terutamanya untuk permainan, pergerakan kayu bedik mestilah sangat pantas, jadi adalah sesuai untuk menggunakan tinjauan pendapat untuk mengesan sama ada peranti memerlukan perhatian CPU. Kelemahan menggunakan kaedah pengundian ialah CPU berada dalam keadaan sibuk menunggu kerana CPU akan menyemak peranti beberapa kali. Tetapi harus diingat bahawa dalam Linux, cara pengendalian isyarat ini juga penting.

Sampukan keras
Senario yang dibincangkan di atas adalah semua contoh gangguan keras. Gangguan keras terbahagi kepada dua kategori:
1. Non-maskable interrupts (NMI): Sama seperti maksud literal jenis interupsi ini, interrupt ini tidak boleh diabaikan atau dibatalkan oleh CPU. NMI dihantar pada talian gangguan yang berasingan dan biasanya digunakan untuk ralat perkakasan kritikal, seperti ralat memori, kegagalan kipas, kegagalan sensor suhu, dsb.
2. Gangguan bertopeng: Gangguan ini boleh diabaikan atau ditangguhkan oleh CPU. Jenis gangguan ini akan dijana apabila pin luaran pengawal cache dicetuskan, dan daftar topeng gangguan akan menutup gangguan tersebut. Kita boleh menetapkan sedikit kepada 0 untuk melumpuhkan gangguan yang dicetuskan pada pin ini.

Sampukan lembut
Gangguan ini dijana apabila CPU melaksanakan arahan (iaitu, semasa proses berjalan), kerana apabila melaksanakan arahan, CPU (khususnya, unit aritmetik dalam CPU) itu sendiri akan menjana pengecualian (Pengecualian di ini juga boleh difahami sebagai sampukan lembut).

Sebagai contoh, membahagikan nombor dengan 0 (sudah tentu ini mustahil) akan menyebabkan pengecualian bahagi dengan sifar, menyebabkan komputer membatalkan pengiraan atau memaparkan mesej ralat.

Fail /proc/stat mengandungi beberapa maklumat statistik tentang kernel sistem dan beberapa maklumat gangguan.

\# cat /proc/stat 
cpu 17028082 5536753 5081493 1735530500 42592308 90006 479750 0
cpu0 5769176 1170683 1495750 403368354 39406374 90006 284864 0
cpu1 3714389 1451937 1186134 444082258 1084780 0 64876 0
cpu2 3791544 1471013 1211868 443988514 1056981 0 64764 0
cpu3 3752971 1443119 1187740 444091373 1044172 0 65244 0
intr 417756956 --- Output Truncated

Baris intr menunjukkan bilangan gangguan yang dijana sejak sistem dimulakan. Lajur pertama mewakili bilangan semua gangguan yang diservis. Setiap lajur berikutnya mewakili jumlah bilangan gangguan untuk gangguan tertentu.

SMP_AFFINITY
SMP是指对称多处理器。smp_affinity文件主要用于某个特定IRQ要绑定到哪个CPU核心上。在/proc/irq/IRQ_NUMBER/目录下都有一个smp_affinity文件,这个文件中,所表示的CPU核心以十六进制来表示的。例如,网卡的中断号是:

grep eth0 /proc/interrupts
67: 23834931 0 0 0 IO-APIC-level eth0

cat /proc/irq/67/smp_affinity
00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001

上面的十六进制对应的十进制是1,也就是说所有的和网卡驱动相关的中断都是有CPU0来提供服务的。

我们可以通过手动改变smp_affinity文件中的值来将IRQ绑定到指定的CPU核心上,或者启用irqbalance服务来自动绑定IRQ到CPU核心上。

IRQ Balance
Irqbalance是一个linux的实用程序,它主要是用于分发中断请求到CPU核心上,有助于性能的提升。它的目的是寻求省电和性能优化之间的平衡。你可以使用yum进行安装:

 \# rpm -qa | grep irqbalance 
irqbalance-0.55-15.el5 
\# yum search irqbalance 
\# yum install irqbalance.x86_64

启动irqbalance服务后,中断在CPU上的分布如下:

 \# cat /proc/interrupts 
     CPU0  CPU1   CPU2   CPU3 
 0: 950901695    0    0     0 IO-APIC-edge timer 
 1:    13    0    0     0 IO-APIC-edge i8042 
 6:    96  10989   470     0 IO-APIC-edge floppy 
 7:     0    0    0     0 IO-APIC-edge parport0 
 8:     1    0    0     0 IO-APIC-edge rtc 
 9:     0    0    0     0 IO-APIC-level acpi 
 12:    109  1787    0     0 IO-APIC-edge i8042 
 15:    99 84813914    0     0 IO-APIC-edge ide1 
 51:   17371    0 46689970     0 IO-APIC-level ioc0 
 67:   1741    0    0 225409160 PCI-MSI eth0 
 83:     0    0    0     0 PCI-MSI vmci 
NMI:     0    0    0     0
LOC: 950902917 950903742 950901202 950901400
ERR:     0
MIS:     0

Irqbalance对于包含多个核心的系统来说是非常有用的。因为通常中断只被第一个CPU核心服务。以上就是教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“Linux”,或扫描下方二维码进行关注,更多干货等着你 !

Linux CPU 中断:异步事件和通用处理机制

Atas ialah kandungan terperinci Gangguan CPU Linux: Peristiwa Asynchronous dan Mekanisme Pengendalian Biasa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:lxlinux.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam