운영체제를 공부하던 중, System Call과 Interrupt의 차이가 정확히 뭔지 모르겠어서 한번 찾아보았다.
교수님께서 매일 하시는 말씀이 있다.
"프로세스 A는 입출력을 요구받으면 System Call을 해서 Interrupt를 건다."
이 말씀을 하실 때마다 나는 이게 무슨 말인지 전혀 이해를 하지 못했다.
이를 이해하기 위해서는 System Call과 Interrupt가 무엇인지 정확히 이해해야 한다.
시스템 호출은, User Program이 자원이나 서비스를 받기 위해 운영체제에게 요청하는 것이다.
User Program이 시스템 호출을 하면 다음과 같이 동작한다.
인터럽트는, 실행중인 프로세스에 이벤트가 발생한 경우 작업을 중단하고 이벤트를 처리한 뒤 다시 복귀하는 것이다.
인터럽트가 발생하는 이유는 단 2가지이다.
정리하자면, 인터럽트는 이벤트를 대처하기 위한 메커니즘(동작 방식)이다.
➜ 현재 작업 중단 후 이벤트를 대처하고 복귀하라
인터럽트를 실행시키기 위한 방법 중에 하나가 System Call인 것이다.
아까의 예시를 다시 한번 보자.
- User Program이 System Call (이벤트 발생! -> Interrupt 처리 시작)
- User Mode -> Kernal Mode
- Kernal은 요청받은 System Call에 맞는 서비스 루틴을 호출한다.
- 서비스 루틴을 처리한 뒤, User Mode로 복귀한다. (Interrupt 처리 끝)
따라서, 모든 종류의 System Call은 Interrupt라 할 수 있다.