Di Linux, gangguan ialah mekanisme yang perkakasan menghantar isyarat kepada CPU apabila diperlukan, dan CPU menghentikan sementara kerjanya yang sedang berjalan untuk mengendalikan permintaan perkakasan. Apabila perkakasan sibuk, CPU mungkin melakukan banyak kerja sia-sia (setiap tinjauan pendapat dilangkau dan tidak diproses, untuk meningkatkan prestasi kerja kerjasama antara CPU dan perkakasan persisian (cakera keras, papan kekunci). , tetikus, dsb.), memperkenalkan Mekanisme gangguan.
Persekitaran pengendalian tutorial ini: sistem linux7.3, komputer Dell G3.
Sampukan ialah apabila perkakasan menghantar isyarat kepada CPU apabila diperlukan, dan CPU menghentikan sementara kerja yang sedang berjalan. untuk memprosesnya. Mekanisme untuk permintaan perkakasan.
Khususnya:
Sampukan merujuk kepada CPU menghentikan sementara program berjalan disebabkan oleh peristiwa atau peristiwa dalaman atau luaran yang telah diatur sebelumnya oleh program semasa operasi biasa CPU dan beralih kepada acara dalaman atau luaran pergi ke program perkhidmatan acara yang telah diatur sebelumnya, dan kemudian kembali untuk meneruskan program yang terganggu sementara selepas perkhidmatan selesai.
1.1 Latar Belakang (mengapa gangguan diperlukan)
1. Tanpa gangguan, kerjasama antara CPU dan peranti persisian satu-satunya cara untuk bekerja/berkomunikasi adalah dengan mengundi: CPU kerap menyemak status perkakasan dan memprosesnya apabila ia perlu diproses, jika tidak ia melangkaunya.
2. Kelajuan pemproses tidak pada susunan magnitud yang sama seperti peranti perkakasan persisian, jadi mekanisme disediakan untuk perkakasan menghantar isyarat kepada kernel apabila diperlukan.
Kelemahan pengundian/pengenalan mekanisme gangguan:
Apabila perkakasan sibuk, CPU berkemungkinan melakukan banyak kerja sia-sia (setiap pengundian dilangkau dan tidak diproses).
Oleh itu, untuk meningkatkan prestasi kerja kolaboratif antara CPU dan perkakasan persisian (cakera keras, papan kekunci, tetikus, dll.), mekanisme gangguan diperkenalkan.
中断: 硬件/进程发,内核收 信号:内核发,进程收,或者进程发进程收
1.3 Proses pengendalian gangguan (rujuk buku CSAPP)
中断是异步发生的,是来自处理器外部的I/O设备的信号的结果 1. 硬件中断不是由任何一条专门的指令造成的,从这个意义上来说它是异步的 2. 硬件中断的异常处理程序常常被称为中断处理程序(interrupt handler)
Rajah berikut menggariskan pemprosesan gangguan.
Rajah 8.5
Peranti I/O, seperti penyesuai rangkaian, pengawal cakera dan cip pemasa, memberi isyarat pengecualian kepada pin pada cip pemproses Nombor pengecualian diletakkan pada bas sistem untuk mencetuskan gangguan Nombor pengecualian ini mengenal pasti peranti yang menyebabkan gangguan.
Sebelum arahan semasa melengkapkan pelaksanaan, pemproses menyedari bahawa voltan pada pin gangguan telah menjadi tinggi, membaca nombor pengecualian daripada bas sistem, dan kemudian memanggil pengendali gangguan yang sesuai. Apabila pengendali kembali, ia mengembalikan kawalan kepada arahan seterusnya (iaitu, arahan yang akan berlaku selepas arahan semasa dalam aliran kawalan jika tiada gangguan berlaku). Hasilnya ialah pelaksanaan program berterusan seolah-olah gangguan tidak berlaku.
剩下的异常类型(陷阱、故障和终止)是同步发生的,是执行当前指令的结果 我们把这类指令叫做故障指令(faulting instruction)
1.4 Intipati sampukan dan mekanisme/proses pemprosesan
Inti sampukan adalah istimewa isyarat elektrik
Proses pemprosesan:
Gangguan dijana oleh peranti perkakasan dan dihantar terus ke pin input pengawal gangguan (cip elektronik ringkas), yang menggunakan teknologi Multiplexing menggunakan berbilang saluran paip gangguan untuk berkomunikasi dengan pemproses melalui hanya satu saluran paip yang disambungkan kepada pemproses. Sebaik sahaja pemproses mengesan isyarat ini, ia mengganggu kerja semasanya dan memproses gangguan itu. Apabila peranti perkakasan menjana gangguan, mereka tidak menganggap penyegerakan dengan jam pemproses, iaitu, gangguan boleh dijana pada bila-bila masa, jadi kernel mungkin terganggu pada bila-bila masa oleh gangguan baru.
Linux biasanya dibahagikan kepada gangguan luaran (juga dipanggil gangguan perkakasan) dan gangguan dalaman (juga dipanggil gangguan tidak normal).
2.1 Gangguan segerak (pengecualian/gangguan dalaman)
Gangguan penyegerakan (pengecualian/gangguan dalaman): Gangguan segerak Dijana oleh CPU itu sendiri, juga dikenali sebagai gangguan dalaman atau pengecualian
CPU ialah melaksanakan a Apabila melaksanakan arahan, jika didapati halaman yang ingin diaksesnya (halaman alamat maya) tiada dalam ingatan fizikal, maka pelaksanaan arahan akan dihentikan dan halaman pengecualian yang tidak wujud akan dijana
Fail boleh laku mungkin besar dan diletakkan dalam Pada cakera, hanya sebahagian daripadanya dibaca ke dalam memori pada satu masa (prinsip lokaliti cpu
Apabila ia ingin mengakses kandungan yang tinggal, a gangguan halaman akan berlaku. Pada masa ini, ia akan ditukar masuk daripada cakera
2.2 Gangguan tak segerak (gangguan/gangguan luaran)
Sampukan tak segerak (gangguan/gangguan luaran): Sampukan tak segerak dijana oleh peranti perkakasan luaran , juga dikenali sebagai sampukan luaran atau sampukan
当网卡接受到数据包时,通知内核,触发中断,所谓的上半部就是,及时读取数据包到内存,防止因为延迟导致丢失,这是很急迫的工作。
读到内存后,对这些数据的处理不再紧迫,此时内核可以去执行中断前运行的程序,而对网络数据包的处理则交给下半部处理。
异常与中断不同,中断是由硬件引起的;
异常则发生在编程失误而导致错误指令,或者在执行期间出现特殊情况必须要靠内核来处理的时候(比如缺页)。它在产生时必须考虑与处理器时钟同步,因此异常也称同步中断。
中断处理程序运行需要快速执行(因为不可阻塞),同时要能完成尽可能多的工作,这里存在矛盾。
因此把中断处理切分为两个部分,上半部分(top half)接收到一个中断后立即执行,但是只做有严格时限的工作,例如对接收到的中断进行应答或复位硬件。能够被允许稍后完成的工作会推迟到下半部分(bottom half)去,此后在合适的时机下半部分会被中断执行,Linux提供了实现下半部分的各种机制。
优点:这种设计可以使系统处于中断屏蔽状态的时间尽可能的短,以此来提高系统的响应能力。
中断处理程序是上半部——接受中断,他就立即开始执行,但只有做严格时限的工作。
上半部简单快速,执行时禁止一些或者全部中断。
工作内容:处理紧急功能,取寄存器状态。
能够被允许稍后完成的工作会推迟到下半部去,此后,在合适的时机,下半部执行
工作内容:完成中断事件绝大多数任务。
下半部稍后执行,而且执行期间可以响应所有的中断。
下半部的实现有软中断实现, tasklet 实现和工作队列实现。
1) 如果一个任务对时间非常敏感,将其放在中断处理程序中执行; 2) 如果一个任务和硬件有关,将其放在中断处理程序中执行; 3) 如果一个任务要保证不被其他中断打断,将其放在中断处理程序中执行; 4) 其他所有任务,考虑放置在下半部执行
当网卡接受到数据包时,通知内核,触发中断,所谓的上半部就是,及时读取数据包到内存,防止因为延迟导致丢失,这是很急迫的工作。
读到内存后,对这些数据的处理不再紧迫,此时内核可以去执行中断前运行的程序,而对网络数据包的处理则交给下半部处理。
中断对应着一个中断号,内核通过这个中断号查找相应的中断服务程序。
每个中断都通过一个唯一的数字标志,这样操作系统才能够给不同的中断提供对应的中断处理程序。
这些中断值即中断请求线,例如IRQ 0是时钟中断、IRQ 1是键盘中断。对于连接在PCI总线上的设备而言,中断请求线是动态分配的。
中断服务程序不在进程上下文中执行,而是在一个与所有进程都无关的、专门的中断上下文中运行,以此保证中断服务程序能够在第一时间响应和处理中断请求,然后快速地退出。
处理器在任何指定时间点上的活动必然属于以下三种情况之一:
运行于用户空间,执行用户进程; 运行于内核空间,处于进程上下文,代表某个特定的进程执行; (CPU空闲时,内核执行空进程) 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断;
相关推荐:《Linux视频教程》
Atas ialah kandungan terperinci apa yang mengganggu dalam linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!