반응형

커널은 각 장치와 통신을 해야 H/W를 관리할 수 있다. 일반적으로 H/W와 통신속도는 프로세서 속도보다 훨씬 느려서 느린 H/W가 응답할 때까지 커널이 요청을 보내고 기다리는 방식은 이상적이지 않다. H/W의 응답 속도는 매우 느리므로 커널은 다른 작업을 수행하다가 H/W가 실제로 작업을 마친 다음에 이를 처리 할 수 있다.

 

프로세스가 하드웨어를 관리하는 방법 중 하나는 Polling(폴링)이 있다. 커널이 주기적으로 시스템 하드웨어의 상태를 확인하고 그 상태에 따라 처리하는 것이다 . 더 좋은 방법은 커널 처리가 필요한 수간에 하드웨어가 커널 신호를 보낼 수 있는 체계를 두는 것이다. 이런 체계를 Interrupt(인터럽트)라고 한다.

 

인터럽트

  • 하드웨어는 인터럽트를 이용해 프로세서에 신호를 보낼 수 있다.
  • 하드웨어는 프로세스 클럭(Clock)과 상관없이 비동기적으로 인터럽트를 발생시키므로 인터럽트는 아무때나 발생할 수 있다.
  • 따라서 인터럽트 처리로 인해 커널은 언제라도 방해 받을 수 있다.
  • 각 인터럽트 별로 고유한 값을 할당할 수 있으며 장비에 따라 다른 인터럽트를 할당 할 수 있다.
  • 때문에 키보드에서 키보드와 하드디스크에서 발생한 인터럽트는 다르다.
  • 인터럽트 값을 인터럽트 요청(IRQ, interrupt request)라인이라고 하고 각 IRQ 라인에는 번호가 붙어 있다.
  • 요점은 장치별로 특정 인터럽트가 지정되어 있으며, 커널이 이 정보를 가지고 있다는 것이다.

예외(exception)

  • 인터럽트와 달리 예외는 프로세서 클럭과 동기되어 발생
  • 예외는 프로세서 클럭과 동기화 되어 발생한다. 또한 예외는 동기화된 인터럽트라고 부르는 경우가 많다.

인터럽트 핸들러

  • 인터럽트 핸들러(Interrupt handler) , 인터럽트 서비스 루틴 (ISR, Interrupt Service Routine) : 인터럽트를 처리하기 위해 커널이 실행하는 함수
  • 인터럽트를 발생 시키거나 각 장치별로 인터럽트 핸들러가 있다.
  • 리눅스의 인터럽트 핸들러는 일반적인 C함수이며 표준적인 방식으로 커널이 핸들러에 정보를 전달할 수 있게 정해진 함수 원형을 사용해야 한다는 점만 제외하면 보통함수와 다르지 않다.
  • 인터럽트 함수의 특징은 인터럽트가 발생했을 때 커널이 호출한다는 점과 인터럽트 컨텍스트 (interrupt context)라는 특별한 컨텍스트에서 실행된다는 점
  • 인터럽트는 언제라도 발생할 수 있으므로 인터럽트 핸들러도 언제든지 실행될 수 있다. 중단된 코드를 최대한 빨리 다시 실행하려면 핸들러의 실행 속도가 빨라야 한다.
  • 따라서 하드웨어 입장에서는 운영체제가 지체없이 처리하는 것이 중요하지만, 시스템의 다른 부분 입장에서는 인터럽트 핸들러의 실행시간이 가능한 짧은 것이 중요하다.

 

 

반응형

+ Recent posts