1. 인터럽트란?
- CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외 상황이 발생하여 처리가 필요한 경우에 마이크로프로세서에게 알려서 처리할 수 있도록 하는 것!
- 종류 : 소프트웨어 인터럽트 / 외부,내부 인터럽트
1) 소프트웨어 인터럽트
- 프로그램 처리 중 명령의 요청명령어의 수행에 의해 발생. ex)시스템 콜
+) 🎯 시스템 콜이란?
: 운영체제에서 정의된 함수를 호출하는 것.
ex) printf()함수는 사용 시 궁극적으로 운영체제 내에서 정의된 write()라는 시스템 콜로 실행됩니다.
2) 외부 인터럽트
- 입출력 장치, 타이밍 장치, 전원 등의 외부적인 요인으로 발생. ex) 마우스, 키보드 등
3) 내부 인터럽트
- Trap이라 부름, 잘못된 명령이나 데이터 사용 시 발생. ex) 0으로 나누기, 오버플로우
2. 인터럽트 발생시 처리 과정
1) 현재 수행 중인 프로그램을 멈추기
2) 프로세스 제어 블록, 즉 상태 레지스터와 PC등을 스택에 잠시 저장 (원래 하던 작업으로 돌아와야 하기 때문에)
3) 다시 인터럽트 서비스 루틴으로 와서 커널 코드를 수행
4) 이 때 이루어지는 함수 호출은 원래 수행 중이던 프로세스의 커널 스택을 사용
5) 인터럽트 처리가 끝난 후 프로세스 제어 블록에 저장된 주소로 돌아가 중지된 작업의 나머지 부분을 마저 수행
📢 만약 인터럽트가 없었더라면?
: 컨트롤러가 특정한 어떤 일을 할 시기를 알기 위해서 계속 체크를 해야 함 -> 이를 폴링이라고 한다. 이렇게 폴링을 할 때는 원래 하던 작업에 더이상 집중할 수 없어 기능이 떨어진다.
3. 컨트롤러가 일의 우선순위를 판별하는 방법
1) 폴링 방식
- 정해진 시간 또는 순번에 상태를 확인해서 상태 변화가 있는지 체크하는 방식 (계속해서 확인하는 방식)
- 인터럽트 요청 플래그를 차례로 비교해서 우선순위가 가장 높은 인터럽트 자원을 찾아 알맞는 인터럽트 서비스 루틴을 수행
2) 인터럽트 방식
- 인터럽트 핀에 신호가 들어오면 MCU가 즉각적으로 하던 동작을 멈추고 인터럽트 서비스 루틴을 실행하는 방식
- 어떨 때 유리한 방식인지?
* 발생시기를 예측하기 힘든 경우에 컨트롤러가 가장 빠르게 대응할 수 있는 방식