본문 바로가기
3. 개발 관련/정리 :: issue 와 resovle

리눅스 2.4 커널 인터럽트 개요

by kyuho.choi 2009. 7. 9.
728x90
반응형

이 글은 O'Reilly에서 출판된 리눅스 커널의 이해를 읽고 개인적으로 정리한 내용이다.

 

인터럽트 : 커널 2.4에서 인터럽트란 exception(예외)과

일반적인 의미의 인터럽트 두가지로 구분된다.

exception은 예외/프로세스 수행중의 구문에러등으로 인한 인터럽트를 의미힌다.

일반적으로 인터럽트는 프로세스와 비교하여 포함하고있는 컨텍스트가 적어

context switching이 프로세스보다 빠르다. 이는 짧은 수행속도를 가짐을 의미한다.

 

인터럽트의 특징은 크게 3가지가 있다.

첫째, 인터럽트는 커널이 어떠한 작업을 수행하는 중이라도 언제든지 발생할 수 있다.

커널의 인터럽트 처리는 두가지로 구분 되는데, dynamic한 인터럽트 처리를 하는 top half와

인터럽트를 처리하는 일련의 큐를 관리하여 인터럽트처리를 나중으로 미루는 bottom half가 있고,

리눅스 커널 2.4의 경우 bottom half를 사용한다.

 

둘째, 첫째 특징에서 인터럽트는 어떠한 상황에서도 발생할 수 있다고 했는 데,

이는 커널이 이미 인터럽트를 처리하는 상황에서도 다른 인터럽트가 발생하게 될 수도 있음을 의미한다.

인터럽트 간에는 인터럽트 핸들러가 존재하여 이들 인터럽트를 제어하는 커널의 제어경로가

중첩되어도 이를 무난한 실행이 가능하도록 인터럽트 핸들러는 well made 되어 있어야 한다.

 

셋째, 커널은 인터럽트를 처리하는 동안에도 인터럽트가 발생하면 처리할 수 있지만,

특정한 커널 코드 내에서는 이를 방지해야하는 경우가 있다.

이는 함수의 atomic한 수행을 돕는 기법으로 임계영역(critical section/region) 이라는

원자적인 블레스를 두어 이 안에서의 프로세스 수행시에는 다른 프로세스의 간섭을 받지않는 영역이다.

이는 세마포어를 이용하여 임계영역을 구현하여 사용한다.


728x90
반응형

댓글