interrupt란?
인터럽트는 cpu가 프로그램을 구동 중일 때, 입출력이나 예외 상황이 발생하여 처리가 필요한 경우에 cpu에 신호를 보내는 것입니다. '방해'나 '끼어들기'와 같은 사전적인 개념보다는 우선 순위가 좀 더 높은 작업이 있을 때, 우선 순위가 높은 작업부터 처리한다는 개념으로 이해합니다.
[ hardware interrupt ]
하드웨어가 발생시키는 인터럽트로, cpu 외의 하드웨어가 cpu에게 신호를 보내야 할 경우 발생합니다.
ex) 전원이상, cpu의 외부적인 기능에 이상이 발생했을 때, overflow가 발생했을 때
[ software interrupt ]
소프트웨어가 발생시키는 인터럽트로, 사용자 프로그램이 인터럽트하는 경우에 발생합니다.
ex) SVC (supervisor call : 자동적으로 관리 감독해서 위험성을 가진 프로세스들이 실행되는 것을 방지, 예외 상황이 발생했을때
[ 인터럽트 발생/종료 Flow ]
- cpu가 현재 수행중이던 작업 중지
- 인터럽트가 시작되는 지정된 위치(인터럽트가 요청한 주소값)으로 실행 위치 변경
- 인터럽트 실행
- 인터럽트 종료
- 인터럽트 이정에 수행중이던 작업을 재개(수행 중이던 복귀 주소를 미리 저장)
- 인터럽트는 서비스 루틴으로 제어 전송
- 인터럽트에 의해 중단된 명령어 주소를 반드시 저장
- 인터럽트 서비스 이후, 저장된 복귀 주소를 프로그램 카운터에 적재하고 중단된 컴퓨팅을 재개
인터럽트 타임라인을 보면 처음에 I/O request가 발생합니다. 그러면 유저 프로세스는 하던 작업을 수행합니다.(I/O 디바이스, 여기서 인터럽트를 발생시키는 주체). I/O 디바이스가 요청을 transferring 해주면. transfer가 끝난 지점에서 interrupt가 걸리고 cpu에 요청을 보냅니다. 그러면 cpu는 인터럽트가 발생한 작업을 수행하고, 인터럽트가 종료되면 다시 원래 수행중이던 작업으로 돌아가 수행하게 됩니다.