>  기사  >  운영 및 유지보수  >  리눅스에서 인터럽트란 무엇인가?

리눅스에서 인터럽트란 무엇인가?

青灯夜游
青灯夜游원래의
2023-04-20 16:34:492481검색

Linux에서 인터럽트는 필요할 때 하드웨어가 CPU에 신호를 보내고 CPU가 하드웨어 요청을 처리하기 위해 진행 중인 작업을 일시적으로 중지하는 메커니즘입니다. 하드웨어가 사용량이 많을 때 CPU는 쓸모 없는 작업을 많이 수행할 가능성이 높습니다(각 폴링은 건너뛰고 처리되지 않음). 따라서 CPU와 주변 하드웨어(하드 디스크, 키보드) 간의 공동 작업 성능을 향상시킵니다. , 마우스 등), 인터럽트 메커니즘을 소개합니다.

리눅스에서 인터럽트란 무엇인가?

이 튜토리얼의 운영 환경: linux7.3 시스템, Dell G3 컴퓨터.

1. 인터럽트 정의

인터럽트는 하드웨어가 필요할 때 CPU에 신호를 보내고 CPU는 하드웨어 요청을 처리하기 위해 진행 중인 작업을 일시적으로 중지하는 메커니즘입니다.

구체적으로:
인터럽트는 CPU가 정상적으로 작동하는 동안 내부 또는 외부 이벤트나 프로그램에 의해 미리 설정된 이벤트로 인해 CPU가 실행 중인 프로그램을 일시적으로 중지하고 내부 또는 외부 이벤트 또는 미리 설정된 이벤트를 제공하도록 전환하는 것을 의미합니다. 서비스가 완료된 후 일시적으로 중단된 프로그램을 계속 실행하기 위해 복귀합니다.

1.1 배경(인터럽트가 필요한 이유)

1. 인터럽트가 없으면 CPU와 주변 장치 간에 작업/통신하는 유일한 방법은 폴링입니다. CPU는 정기적으로 하드웨어 상태를 확인하고 처리합니다. 필요할 때 처리하고, 그렇지 않으면 건너뜁니다.
2. 프로세서의 속도는 주변 하드웨어 장치와 동일한 크기가 아니므로 필요할 때 하드웨어가 커널에 신호를 보내는 메커니즘이 제공됩니다.

폴링/인터럽트 메커니즘 도입의 단점:
하드웨어가 사용 중이면 CPU는 쓸모 없는 작업을 많이 수행할 가능성이 높습니다(각 폴링은 건너뛰고 처리되지 않습니다).
따라서 CPU와 주변 하드웨어(하드 디스크, 키보드, 마우스 등) 간의 공동 작업 성능을 향상시키기 위해 인터럽트 메커니즘이 도입되었습니다.

1.2 인터럽트 및 신호

中断: 硬件/进程发,内核收
信号:内核发,进程收,或者进程发进程收

1.3 인터럽트 처리 프로세스(CSAPP 설명서 참조)

中断是异步发生的,是来自处理器外部的I/O设备的信号的结果

1. 硬件中断不是由任何一条专门的指令造成的,从这个意义上来说它是异步的
2. 硬件中断的异常处理程序常常被称为中断处理程序(interrupt handler)

다음 그림은 인터럽트 처리를 간략하게 설명합니다.
그림 8.5
리눅스에서 인터럽트란 무엇인가?

네트워크 어댑터, 디스크 컨트롤러 및 타이머 칩과 같은 I/O 장치는 프로세서 칩의 핀에 신호를 보내고 시스템 버스에 예외 번호를 배치하여 인터럽트를 트리거합니다. 인터럽트를 발생시킨 장치입니다.
현재 명령어의 실행이 완료되기 전에 프로세서는 인터럽트 핀의 전압이 높아지는 것을 확인하고 시스템 버스에서 예외 번호를 읽고 적절한 인터럽트 핸들러를 호출합니다. 핸들러가 반환되면 제어를 다음 명령어(즉, 인터럽트가 발생하지 않은 경우 제어 흐름에서 현재 명령어 뒤에 있을 명령어)로 반환됩니다. 결과적으로 중단이 발생하지 않은 것처럼 프로그램 실행이 계속됩니다.

剩下的异常类型(陷阱、故障和终止)是同步发生的,是执行当前指令的结果
我们把这类指令叫做故障指令(faulting instruction)

1.4 인터럽트의 본질과 처리 메커니즘/프로세스

인터럽트의 본질은 특별한 전기 신호입니다

리눅스에서 인터럽트란 무엇인가?

처리 프로세스:
인터럽트는 하드웨어 장치에 의해 생성되어 직접 장치로 전송됩니다. 인터럽트 컨트롤러(Interrupt Controller) 간단한 전자 칩의 입력 핀 중 인터럽트 컨트롤러는 멀티플렉싱 기술을 사용하여 프로세서에 연결된 단 하나의 파이프라인을 통해 프로세서와 통신합니다. 프로세서가 이 신호를 감지하면 현재 작업을 중단하고 인터럽트를 처리합니다. 하드웨어 장치가 인터럽트를 생성할 때 프로세서의 시계와의 동기화를 고려하지 않습니다. 즉, 인터럽트는 언제든지 생성될 수 있으므로 커널은 언제든지 새로운 인터럽트에 의해 중단될 수 있습니다.

2. 인터럽트 유형(범주)

Linux는 일반적으로 외부 인터럽트(하드웨어 인터럽트라고도 함)와 내부 인터럽트(예외라고도 함)로 구분됩니다.

2.1 동기 인터럽트(예외/내부 인터럽트)

동기 인터럽트(예외/내부 인터럽트): 동기 인터럽트는 CPU 자체에 의해 생성되며 내부 인터럽트 또는 예외라고도 합니다.

2.1 .1 동기 인터럽트의 예: 페이지 누락 인터럽트

CPU가 명령어를 실행할 때 액세스하려는 페이지(가상 주소의 페이지)가 물리적 메모리에 없는 것을 발견하면 실행을 중지합니다. 예외
실행 파일이 매우 커서 디스크에 저장될 수 있습니다. (CPU 지역성 원칙) 나머지 콘텐츠에 액세스하려고 하면 페이지 오류 인터럽트가 발생합니다. 이때 디스크의 Swap it in on the disk

2.2 비동기 인터럽트(인터럽트/외부 인터럽트)

비동기 인터럽트가 발생합니다. (인터럽트/외부 인터럽트): 비동기 인터럽트는 외부 하드웨어 장치에 의해 생성되며 외부 인터럽트 또는 인터럽트라고도 합니다

2.2.1 异步中断举例:网卡的工作原理

当网卡接受到数据包时,通知内核,触发中断,所谓的上半部就是,及时读取数据包到内存,防止因为延迟导致丢失,这是很急迫的工作。
读到内存后,对这些数据的处理不再紧迫,此时内核可以去执行中断前运行的程序,而对网络数据包的处理则交给下半部处理。

2.3 中断与异常的区别

异常与中断不同,中断是由硬件引起的;
异常则发生在编程失误而导致错误指令,或者在执行期间出现特殊情况必须要靠内核来处理的时候(比如缺页)。它在产生时必须考虑与处理器时钟同步,因此异常也称同步中断。

3、中断请求实现:上下半部机制

3.1 背景

中断处理程序运行需要快速执行(因为不可阻塞),同时要能完成尽可能多的工作,这里存在矛盾。

因此把中断处理切分为两个部分,上半部分(top half)接收到一个中断后立即执行,但是只做有严格时限的工作,例如对接收到的中断进行应答或复位硬件。能够被允许稍后完成的工作会推迟到下半部分(bottom half)去,此后在合适的时机下半部分会被中断执行,Linux提供了实现下半部分的各种机制。

优点:这种设计可以使系统处于中断屏蔽状态的时间尽可能的短,以此来提高系统的响应能力。

3.2 上半部:

中断处理程序是上半部——接受中断,他就立即开始执行,但只有做严格时限的工作。
上半部简单快速,执行时禁止一些或者全部中断。
工作内容:处理紧急功能,取寄存器状态。

3.3 下半部:

能够被允许稍后完成的工作会推迟到下半部去,此后,在合适的时机,下半部执行
工作内容:完成中断事件绝大多数任务。
下半部稍后执行,而且执行期间可以响应所有的中断。
下半部的实现有软中断实现, tasklet 实现和工作队列实现。

3.4 上下半部划分原则

1) 如果一个任务对时间非常敏感,将其放在中断处理程序中执行;
2) 如果一个任务和硬件有关,将其放在中断处理程序中执行;
3) 如果一个任务要保证不被其他中断打断,将其放在中断处理程序中执行;
4) 其他所有任务,考虑放置在下半部执行

3.5 举例子: 用网卡来解释一下这两半。

当网卡接受到数据包时,通知内核,触发中断,所谓的上半部就是,及时读取数据包到内存,防止因为延迟导致丢失,这是很急迫的工作。
读到内存后,对这些数据的处理不再紧迫,此时内核可以去执行中断前运行的程序,而对网络数据包的处理则交给下半部处理。

4、中断号

中断对应着一个中断号,内核通过这个中断号查找相应的中断服务程序。

每个中断都通过一个唯一的数字标志,这样操作系统才能够给不同的中断提供对应的中断处理程序。
这些中断值即中断请求线,例如IRQ 0是时钟中断、IRQ 1是键盘中断。对于连接在PCI总线上的设备而言,中断请求线是动态分配的。

5、中断上下文

中断服务程序不在进程上下文中执行,而是在一个与所有进程都无关的、专门的中断上下文中运行,以此保证中断服务程序能够在第一时间响应和处理中断请求,然后快速地退出。

处理器在任何指定时间点上的活动必然属于以下三种情况之一:

运行于用户空间,执行用户进程;
运行于内核空间,处于进程上下文,代表某个特定的进程执行;
			 (CPU空闲时,内核执行空进程)
运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断;

相关推荐:《Linux视频教程

위 내용은 리눅스에서 인터럽트란 무엇인가?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.