소프트웨어 인터럽트와 하드웨어 인터럽트란 무엇입니까? 어떻게 처리되나요?

소프트웨어 인터럽트와 하드웨어 인터럽트란 무엇입니까? 어떻게 처리되나요?

하드웨어 및 소프트웨어 인터럽트의 개념을 잘 모르겠습니다.

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

  1. 그렇다면 어떤 상황에서 하드웨어 인터럽트가 발생합니까? 하드웨어 드라이버 프로세스인가요?
  2. 그렇다면 하드웨어 드라이버 프로세스는 어디에서 실행됩니까? CPU에서 실행 중인 경우 CPU의 주의를 끌기 위해 하드웨어 인터럽트를 거칠 필요가 없습니다. 그렇죠? 그럼 다른 곳에서도 실행되나요?
  3. 하드웨어 인터럽트가 CPU를 직접 인터럽트합니까, 아니면 먼저 커널 프로세스에 접속한 다음 커널 프로세스가 CPU에 접속/인터럽트합니까?

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

  1. 어떤 자원이 있나요? 모두 실행 중인 프로세스의 형태인가요? 예를 들어 CPU 드라이버 프로세스와 메모리 드라이버 프로세스는 CPU와 메모리 리소스를 나타냅니까? I/O 장치 드라이버 프로세스가 I/O 리소스를 나타냅니까? 프로세스가 리소스와 통신하려는 다른 실행 중인 프로세스도 있습니까?
  2. 그렇다면 소프트웨어 인터럽트는 커널 프로세스를 통해 간접적으로 프로세스(리소스를 나타냄)에 접촉합니까? 하드웨어 인터럽트와 달리 소프트웨어 인터럽트는 CPU를 직접 인터럽트하지 않고 커널 프로세스를 인터럽트/접촉합니다.

답변1

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

  1. 하드웨어 인터럽트는 디스크, 네트워크 카드, 키보드 및 시계와 같은 하드웨어 장치에 의해 발생됩니다. 각 장치 또는 장치 그룹에는 고유한 IRQ(인터럽트 요청) 라인이 있습니다. CPU는 IRQ를 기반으로 적절한 하드웨어 드라이버에 요청을 전달합니다. (하드웨어 드라이버는 일반적으로 별도의 프로세스가 아닌 커널 내의 서브루틴입니다.)

  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는 나중에 수행 중이던 작업으로 돌아갈 수 있도록 현재 상태를 스택에 푸시합니다. 인터럽트는 실행 중인 프로그램, 다른 인터럽트 또는 유휴 프로세스를 처리하는 커널 코드를 중지할 수 있습니다.

관련 정보