[OS] interrupt와 system call

2021. 9. 22. 17:51[ Basic ]/# OS

 

인터럽트(interrupt)

인터럽트란 마이크로프로세서(CPU)가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치에 예외상황이 발생하여 처리가 필요할 경우에 CPU에게 알려 처리할 수 있도록 하는 것을 말한다. 인터럽트가 발생하면 OS는 현재 CPU에 실행중인 기계어 코드를 중단하고 CPU가 해당 인터럽트 처리를 위한 프로그램(ISR; Interrupt Service Routine)으로 점프하여 해당 일을 수행 할 수 있도록 한다.

 

인터럽트의 의미는 생각보다 큰데, SW(instruction)에 의해서도 인터럽트가 발생할 수 있다. 예를 들어 DIV instruction을 실행할 때 0으로 나누어지거나, 주소 버스에서 할당되지 않는 주소공간을 액세스 한다든지 하는 경우를 예외(exception)라고 말하며 인터럽트에 해당한다. 또한 사용자가 직접 애플리케이션 코드를 이용해 OS의 기능을 호출할 수 있는데, 이를 시스템 콜이라 하며 이또한 SW 인터럽트에 해당한다.

 

정리하자면 인터럽트는 HW에 의해, 또는 SW에 의해 발생할 수 있다. HW에 발생하는 인터럽트는 CPU코어 외부에서 발생하는 인터럽트이고 SW(기계어)에 의해 발생하는 인터럽트는 CPU코어 내부에서 발생하는 인터럽트이다.

 

HW 인터럽트(CPU코어 외부에서 발생) SW 인터럽트(CPU코어 내에서 발생)
- 타이머(HW)에 의해 의도적으로 프로그램이 중단 
- 입출력의 요청 및 완료, 입출력의 오류
- exception
- system call 

 

 

 

시스템 콜

시스템 콜도 인터럽트의 한 종류이다. 위에서 HW또는 SW에 의해 인터럽트가 발생할수 있음을 알아 보았고, SW에 의해 발생하는 인터럽트들 중에서도 Trap또는 system call이 해당된다. 예를 들어, 리눅스 커널과 같은 운영 체제에서 애플리케이션의 저수준(low-level) 입출력 함수가 실행되면, 해당 라이브러리 함수에 의해 SW 인터럽트가 실행된다. 이것을 시스템 콜(system call)이라고 하고, 함수의 기능에 따라 드라이버를 구별하고 레지스터를 통해 실행시킬 디바이스 드라이버의 함수를 CPU에게 알린다.

 

 

 

HW에 의해 발생하는 인터럽트는 언제든지 발생할 수 있으므로 비동기적(asynchronously)으로 발생한다고 말할 수 있다. 하지만 SW에 의한 인터럽트인 Exception과 System call은 CPU에서 clock에 맞춰 instruction이 한줄 씩 실행되는 도중에 발생하기 때문에 동기적(synchronously)으로 발생한다.

'[ Basic ] > # OS' 카테고리의 다른 글

[ubuntu] apt의 이해  (0) 2022.06.30
[OS] ForkJoinPool  (0) 2022.06.18
<추천>[OS] Context Switching, Cache Pollution / TLB, MMU  (0) 2022.05.28
[OS] 데몬(daemon) 프로세스, nohup, &  (0) 2022.01.03
[OS] 현대 OS의 Deadlock 처리  (0) 2021.11.22