소프트웨어 및 하드웨어 인터럽트 란 무엇이며 어떻게 처리됩니까?


43

하드웨어 및 소프트웨어 인터럽트의 개념을 이해하고 있는지 잘 모르겠습니다.

올바르게 이해하면 하드웨어 인터럽트의 목적은 CPU 멀티 태스킹 구현의 일부인 CPU에 주목하는 것입니다.

  1. 그렇다면 하드웨어 인터럽트는 무엇입니까? 하드웨어 드라이버 프로세스입니까?
  2. 그렇다면 하드웨어 드라이버 프로세스는 어디에서 실행되고 있습니까? CPU에서 실행 중이면 하드웨어 인터럽트로 CPU에 주목할 필요가 없습니다. 그래서 다른 곳에서 실행되고 있습니까?
  3. 하드웨어 인터럽트가 CPU를 직접 인터럽트합니까, 아니면 먼저 커널 프로세스에 접속하고 커널 프로세스가 CPU에 접속 / 인터럽트합니까?

반면, 소프트웨어 인터럽트의 목적은 현재 CPU에서 실행중인 프로세스가 일부 리소스를 요청하는 것입니다.

  1. 자원은 무엇입니까? 그것들은 모두 실행중인 프로세스의 형태입니까? 예를 들어 CPU 드라이버 프로세스 및 메모리 드라이버 프로세스가 CPU 및 메모리 리소스를 나타 냅니까? I / O 장치의 드라이버 프로세스가 I / O 리소스를 나타 냅니까? 프로세스와 통신하려는 다른 실행중인 프로세스도 리소스입니까?
  2. 그렇다면 소프트웨어 인터럽트가 커널 프로세스를 통해 간접적으로 프로세스 (자원을 나타내는)와 접촉합니까? 하드웨어 인터럽트와 달리 소프트웨어 인터럽트는 CPU를 직접 방해하지 않지만 대신 커널 프로세스를 중단 / 접촉하는 것이 옳습니까?

답변:


55

하드웨어 인터럽트는 실제로 CPU 멀티 태스킹의 일부는 아니지만 구동 할 수 있습니다.

  1. 하드웨어 인터럽트는 디스크, 네트워크 카드, 키보드, 시계 등과 같은 하드웨어 장치에서 발생합니다. 각 장치 또는 장치 세트에는 자체 IRQ (Interrupt ReQuest) 라인이 있습니다. IRQ에 따라 CPU는 요청을 적절한 하드웨어 드라이버로 발송합니다. (하드웨어 드라이버는 일반적으로 별도의 프로세스가 아니라 커널 내의 서브 루틴입니다.)

  2. 인터럽트를 처리하는 드라이버는 CPU에서 실행됩니다. CPU는 인터럽트를 처리하기 위해 수행 한 작업으로 인해 중단되었으므로 CPU의주의를 끌기 위해 추가로 필요한 것은 없습니다. 다중 프로세서 시스템에서 인터럽트는 일반적으로 CPU 중 하나만 인터럽트합니다. (특별한 경우 메인 프레임에는 메인 CPU의 지원없이 여러 인터럽트를 처리 할 수있는 하드웨어 채널이 있습니다.)

  3. 하드웨어 인터럽트는 CPU를 직접 인터럽트합니다. 커널 프로세스의 관련 코드가 트리거됩니다. 처리하는 데 시간이 걸리는 프로세스의 경우 인터럽트 코드가 다른 하드웨어 인터럽트에 의해 인터럽트 될 수 있습니다.

    타이머 인터럽트의 경우 커널 스케줄러 코드는 실행중인 프로세스를 일시 중단하고 다른 프로세스를 실행할 수 있습니다. 멀티 태스킹이 가능한 스케줄러 코드가 있습니다.

소프트웨어 인터럽트는 하드웨어 인터럽트와 매우 유사하게 처리됩니다. 그러나 현재 실행중인 프로세스에서만 생성 할 수 있습니다.

  1. 일반적으로 소프트웨어 인터럽트는 I / O (입력 또는 출력) 요청입니다. 이들은 커널 루틴을 호출하여 I / O 발생을 예약합니다. 일부 장치의 경우 I / O가 즉시 수행되지만 디스크 I / O는 일반적으로 대기하고 나중에 수행됩니다. 수행되는 I / O에 따라 프로세스가 I / O가 완료 될 때까지 일시 중단되어 커널 스케줄러가 실행할 다른 프로세스를 선택할 수 있습니다. 프로세스간에 I / O가 발생할 수 있으며 일반적으로 디스크 I / O와 동일한 방식으로 처리가 예약됩니다.

  2. 소프트웨어 인터럽트는 커널과 만 통신합니다. 실행해야하는 다른 프로세스를 예약하는 것은 커널의 책임입니다. 이것은 파이프 끝의 다른 프로세스 일 수 있습니다. 일부 커널은 장치 드라이버의 일부가 사용자 공간에 존재하도록 허용하며 커널은 필요할 때이 프로세스가 실행되도록 예약합니다.

    소프트웨어 인터럽트가 CPU를 직접 방해하지 않는 것이 맞습니다. 현재 코드를 실행중인 코드 만 소프트웨어 인터럽트를 생성 할 수 있습니다. 인터럽트는 커널이 프로세스 실행을 위해 무언가 (보통 I / O)를 수행하도록 요청합니다. 특별한 소프트웨어 인터럽트는 Yield 호출로, 커널 스케줄러에게 다른 프로세스가 실행될 수 있는지 확인하도록 요청합니다.

의견 답변 :

  1. I / O 요청의 경우 커널은 작업을 적절한 커널 드라이버에 위임합니다. 루틴은 추후 처리 (디스크 I / O에 공통)를 위해 I / O를 큐에 넣거나 가능한 경우 즉시 실행합니다. 대기열은 종종 하드웨어 인터럽트에 응답 할 때 드라이버가 처리합니다. 하나의 I / O가 완료되면 대기열의 다음 항목이 장치로 전송됩니다.

  2. 예, 소프트웨어 인터럽트는 하드웨어 신호 단계를 피합니다. 소프트웨어 요청을 생성하는 프로세스는 현재 실행중인 프로세스 여야하므로 CPU를 방해하지 않습니다. 그러나 호출 코드의 흐름을 방해합니다.

    하드웨어가 CPU가 무언가를하도록해야하는 경우 CPU가 실행중인 코드에 대한주의를 방해합니다. CPU는 스택에서 현재 상태를 푸시하여 나중에 수행하던 작업으로 돌아갈 수 있습니다. 인터럽트가 중지 될 수 있습니다 : 실행중인 프로그램; 다른 인터럽트를 처리하는 커널 코드; 또는 유휴 프로세스.


감사! (1) 소프트웨어 인터럽트에서 커널 프로세스 내에서 I / O 장치 드라이버 루틴이 I / O 작업을 수행합니까? (2) 소프트웨어 인터럽트가 통과하는 경로가 하드웨어 인터럽트 경로보다 한 단계 짧다는 것이 맞습니까? 다시 말해, 소프트웨어 인터럽트의 경우 : 커널 프로세스 내의 소프트웨어 프로그램-> 장치 드라이버 루틴; 하드웨어 인터럽트의 경우 : 커널 프로세스 내의 하드웨어-> CPU-> 장치 드라이버 루틴?
Tim

감사! 하드웨어 인터럽트로 인해 CPU가 스택에서 현재 상태를 푸시하여 하드웨어 드라이버가 CPU에서 실행될 수 있고 나중에 중단 된 프로세스를 CPU에서 다시 볼 수 있도록하는 것이 옳습니까? 요청 된 서비스를 CPU에서 실행할 수 있도록 소프트웨어 인터럽트로 인해 CPU에서 실행중인 프로세스가 스택으로 푸시됩니까?
Tim

인터럽트가 발생하면 스택에서 상태가 푸시됩니다. 이를 통해 인터럽트가 완료되면 시스템이 상태를 다시로드 할 수 있습니다.
BillThor

감사! 요청 된 서비스가 CPU 대신 IO 장치에서 실행되는 IO 작업과 같이 CPU에서 실행되지 않고 요청 된 서비스가 완료되기를 기다리지 않고 요청 프로세스가 계속 실행될 수 있으면 요청 프로세스는 여전히 스택에 배치됩니다 ?
Tim

일반적으로 I / O 읽기는 동기식으로 호출되며 I / O가 완료 될 때까지 프로세스가 실행되지 않습니다. 읽기는 거의 항상 이것을 원합니다. 쓰기는 일반적으로 프로세스가 계속 실행되도록 비동기 적으로 발생합니다.
BillThor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.