인터럽트란 무엇인가?
프로그램 실행 도중에 예기치 않은 상황이 발생할 경우 현재 실행 중인 작업을 즉시 중단하고, 발생된 상황에 대한 우선 처리가 필요함을 CPU에게 알리는 것입니다.
그렇다면, 인터럽트가 발생했을 때 수행중이던 프로세스의 정보는 어디로 가는걸까요? 진행 중이던 작업의 내용은 커널(운영체제 중 메모리에 상주하여 일을 처리하는 역할)의 자료 구조에 저장됩니다. 이 자료 구조를 우리는 PCB라고 부릅니다. PCB에 대한 내용은 추후 다룰 예정입니다.
내부 인터럽트
- 하드웨어 고장
- 컴퓨터 고장
- 데이터 전달 과정에서의 비트 오류
- 전원이 나간 경우
- 실행할 수 없는 명령어 : 기억장치에서 인출한 명령어의 비트 패턴이 정의되어 있지 않은 경우
- 예외상황(Exception) : 나누기 0을 하는 경우, 권한 없는 메모리 참조 등
- 사용 권한 위배 : 사용자가 운영체제만 사용할 수 있는 리소스에 액세스하는 경우
- 시스템 콜(System Call) : 프로세스가 운영 체제의 서비스를 요청하기 위해 커널의 함수를 호출하는 경우
외부 인터럽트
- 타이머 인터럽트 : 타이머가 일정한 시간 간격으로 CPU에게 인터럽트를 요청
- 입출력 인터럽트 : 속도가 느린 입출력장치가 입출력 준비가 완료되었음을 알리기 위해 인터럽트를 요청
인터럽트 발생 처리 과정
- 인터럽트 요청
- 프로그램 실행 중단
- 레지스터의 모든 정보를 스택 영역(또는 PCB)에 전송
- 인터럽트 서비스 루틴이 끝나면 다시 원래 작업으로 돌아와야 하기 때문에 잠시 저장해둔다.
- 프로그램 카운터(PC)에 인터럽트 처리 프로그램(인터럽트 핸들러/서비스 루틴)의 시작 위치를 저장
- 제어권이 인터럽트 처리 프로그램을 실행
- 인터럽트 원인을 파악하고 실질적인 작업을 수행한다. 처리기 레지스터 상태를 보존한다.
- 서비스루틴 수행 중 우선순위가 더 높은 인터럽트가 발생하면 또 재귀적으로 1~5를 수행한다.
- 인터럽트 서비스 루틴을 실행할 때 인터럽트 플래그(IF)를 0으로 하면 인터럽트 발생을 방지할 수 있다.
- 4번이 완료되면 스택 영역(또는 PCB)에 저장한 내용을 다시 레지스터에 복구(저장)
- 프로그램 카운터(PC)에 중단된 프로그램의 시작 위치를 저장
- 중단된 프로그램을 재실행
우선 순위가 높은 인터럽트란 무엇일까요?
더보기
우선순위 판별 방법
폴링 방식
사용자가 명령어를 사용해 입력 핀의 값을 계속 읽어 변화를 알아내는 방식
- 인터럽트 요청 플래그를 차례로 비교하여 우선순위가 가장 높은 인터럽트 리소스를 찾아 이에 맞는 인터럽트 서비스 루틴을 수행한다.
인터럽트 방식
MCU 자체가 하드웨어적으로 변화를 체크하여 변화 시에만 일정한 동작을 하는 방식
- Daisy Chain
- 병렬 우선순위 부여 방식
참고 자료
운영체제(공룡책)
https://velog.io/@pppp0722/%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8Interrupt%EB%9E%80
https://itwiki.kr/w/%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8