인터럽트 (Interrupt)
인터럽트란 '끼어들다, 중단시키다, 방해하다' 라는 뜻으로 마이크로컨트롤러는 여러가지 일을 처리해야만 하고 동시에 처리할 수 없는 일들을 순서적으로 하나씩 처리해야 한다. 그러나 지금 하고 있는 일보다 긴급한 일 (또는 중요한 일) 이 발생하면 그 일을 먼저 처리해주고 나서 하던 일을 계속하게 되는 것이다. 이러한 긴급한 일을 '인터럽트' 라고 한다.
마이크로프로세서는 인터럽트를 감지하면 지금 실행중인 기계어 코드를 중단하고 자신의 상태를 기억시켜둔 후 해당 인터럽트를 위한 처리 프로그램으로 점프하여 해당 일을 수행한다.
루틴이란 어떤 프로그램이 실행될 때 불려지거나 반복해서 사용되도록 만들어진 일련의 코드들을 지칭한다. 인터럽트 처리를 위한 루틴을 인터럽트 서비스 루틴 (ISR, Interrupt Service Routine) 이라고 한다.
인터럽트의 종류
하드웨어 인터럽트 (Hardware Interrupt)
전류공급의 문제나 기계 고장, 입출력 상의 오류 등과 같이 하드웨어적인 오류로 인해 발생된다.
소프트웨어 인터럽트 (Software Interrupt)
어떤 수를 0으로 나누라는 명령어 실행, 페이지 폴트 등과 같은 시스템 에러가 생겼거나 예외 상태일 때 발생된다.
인터럽트 처리 과정
1. 인터럽트 요청 신호 발생
2. 현재 수행중인 명령을 중단하고 복귀 주소를 스택에 저장한다
3. 인터럽트 처리 루틴이 실행되어 인터럽트를 요청한 장치를 식별한다
4. 인터럽트 서비스 루틴 (ISR) 을 수행하여 인터럽트 원인을 파악하고 실직적인 작업을 수행한다.
5. 저장된 주소로 복귀하여 수행중이던 프로그램을 재개한다
인터럽트 우선 순위
인터럽트 동시 발생 시 처리 우선순위는 다음과 같다
1) 하드웨어 인터럽트 > 소프트웨어 인터럽트
2) 정전 · 전원 이상 인터럽트 > 기계 고장 인터럽트 > 외부 인터럽트 > 입출력 인터럽트 > 프로그램 인터럽트 > SVC 인터럽트
'리버싱' 카테고리의 다른 글
[리버싱] CALL, JMP, RET (RETN) 명령어 (0) | 2017.08.27 |
---|---|
[리버싱] 브레이크포인트란 (0) | 2017.08.27 |
[리버싱] API 란 (0) | 2017.08.25 |
[리버싱] 레지스터란 (0) | 2017.08.25 |
과제 (0) | 2017.08.23 |