1. 서문
리눅스 인터럽트는 소프트 인터럽트와 하드 인터럽트의 두 가지 유형으로 나뉜다. 여기서 소프트와 하드의 의미는 소프트웨어로 구현된 인터럽트나 하드웨어로 구현된 인터럽트가 아니라 소프트웨어 관련 및 하드웨어 관련을 의미한다고 말씀드리겠습니다.
소프트 인터럽트는 "신호 메커니즘"입니다. 소프트 중립은 소프트웨어 인터럽트가 아닙니다. Linux는 신호를 사용하여 프로세스에 대한 다양한 인터럽트 작업을 생성합니다. 이제 우리는 총 31개의 신호를 알고 있습니다. 관심 있는 독자는 관련 참고 자료를 참조할 수 있습니다. 일반적으로 소프트 인터럽트는 커널 메커니즘의 트리거 이벤트(예: 프로세스 실행 시간 초과)로 인해 발생하지만 하드웨어 관련 인터럽트(예: 프린터 포트)로 인해 발생하는 경우도 많다는 점을 무시할 수 없습니다. 하드웨어 인터럽트를 생성합니다. 하드웨어 관련 하드 인터럽트를 알리고, 하드 인터럽트는 소프트 인터럽트를 생성하여 이를 운영 체제 커널로 보내 커널이 프린터 작업 대기열 기반에서 잠자고 있는 처리 프로세스를 깨울 것입니다. 이 소프트 인터럽트에 대해.
하드 인터럽트는 일반적인 의미의 "인터럽트 처리기"입니다. 하드웨어에서 보낸 인터럽트 신호를 직접 처리합니다. 하드 인터럽트가 처리해야 하는 인터럽트 신호를 수신하면, 발생한 장치를 이해하고 해당 작업을 수행하기 위해 장치의 상태 레지스터를 보기 위해 구동한 장치로 돌아갑니다. 프로세스 스케줄링에서 고려해야 할 소프트 인터럽트에 대해서는 논의하지 않습니다. 장치 드라이버 인터럽트에 대해 논의하고 있으므로 하드 인터럽트에 초점을 맞춥니다. 여기서 논의하고 있는 것은 하드웨어 관련 인터럽트인 하드 인터럽트입니다.
2. 인터럽트 발생
인터럽트는 주변기기가 운영체제에 무슨 일이 일어났는지 알려야 하기 때문인데, 인터럽트의 기능은 단지 기기 알람이 켜질 뿐입니다. 핸들러는 무슨 일이 일어났는지만 알지만, 무슨 일이 일어났는지 보려면 장치로 가야 합니다. 즉, 인터럽트 핸들러는 장치에서 인터럽트가 발생했음을 알게 되면 장치의 일부 상태 레지스터에 액세스할 때만 구체적으로 어떤 일이 발생했는지, 무엇을 해야 하는지 알 수 있습니다. 다루다.
장치는 인터럽트 라인을 통해 인터럽트 컨트롤러에 하이 레벨을 보내 운영 체제에 인터럽트를 생성했음을 알리고, 운영 체제는 인터럽트의 상태 비트를 통해 어느 인터럽트 라인이 인터럽트를 생성했는지 알 수 있습니다. 컨트롤러. PC에서 사용되는 인터럽트 컨트롤러는 8259이다. 이들 컨트롤러 각각은 8개의 인터럽트 라인을 관리할 수 있다. 2개의 8259를 캐스케이드 연결하면 총 15개의 인터럽트 라인을 제어할 수 있다. 여기의 인터럽트 라인은 실제 회로이며 하드웨어 인터페이스를 통해 CPU 외부의 장치 컨트롤러에 연결됩니다.
3.IRQ
모든 장치가 인터럽트 라인에 인터럽트 신호를 보낼 수 있는 것은 아닙니다. 특정 인터럽트 라인을 제어할 수 있는 경우에만 인터럽트 라인 A에 인터럽트 신호를 보낼 수 있습니다. 이 인터럽트 라인을 통해 신호가 전송됩니다. 컴퓨터에는 점점 더 많은 외부 장치가 있으므로 15개의 인터럽트 라인으로는 더 이상 매우 귀중한 리소스가 아닙니다. 인터럽트 라인을 사용하려면 인터럽트 라인을 신청해야 하는데, 이것이 바로 IRQ(Interrupt Requirement)입니다. 우리는 흔히 인터럽트 라인 신청을 IRQ 신청, 인터럽트 번호 신청이라고 말합니다.
IRQ는 매우 소중한 것이므로, 더 많은 기기가 인터럽트를 사용할 수 있도록 기기에 인터럽트가 필요할 때만 IRQ를 적용하거나, IRQ 신청 시 공유 인터럽트 방식을 사용하는 것이 좋습니다.
IRQ를 단독으로 사용하든 공유하든 IRQ 신청 절차는 동일하며 3단계로 나누어집니다.
1. 모든 인터럽트 라인을 조사하여 어떤 인터럽트가 점유되지 않았는지 확인하십시오. 이러한 비어 있는 인터럽트 중 하나를 장치의 IRQ로 선택하십시오.
2. 인터럽트 적용 기능을 통해 선택한 IRQ를 적용합니다. 적용 방법이 단독인지 공유인지를 지정합니다.
3. 인터럽트 응용 프로그램 함수의 반환 값에 따라 무엇을 할지 결정합니다. 성공하면 모든 것이 괜찮고, 실패하면 응용 프로그램을 다시 적용하거나 포기하고 오류를 반환합니다.
참고서에 제공된 소스코드에 IRQ 신청 과정이 자세히 설명되어 있습니다. 독자는 소스코드에 포함된 짧은 예제를 주의 깊게 읽어보면 신청 과정을 깊이 있게 이해할 수 있습니다.
위 내용은 Linux 장치 드라이버 인터럽트에 대한 심층 분석입니다(1). 자세한 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!