폴링
특정 주기마다 스레드를 돌면서 시그널이 들어왔는지 확인하는 방식이다. (소프트웨어적으로 시그널을 확인하는 것) 이렇게 특정 주기마다 계속 확인해야 하기 때문에 시스템의 리소스를 많이 먹는다는 단점이 있다.
인터럽트
프로그램 실행 도중에 예기치 않은 상황이 발생할 경우 현재 실행 중인 작업을 즉시 중단하고, 발생된 상황에 대한 우선 처리가 필요함을 CPU에게 알리는 것 (하드웨어적으로 시그널을 확인하는 것) 시그널이 들어온 정확한 타이밍을 알 수 있고, 반응 시간이 빠르며 시스템 부하가 적다.
인터럽트 처리 과정
프로그램 실행 -> 인터럽트 요청 -> 프로그램 중단(수행중인 명령을 완료하고 PC, SR 저장) -> ISR 처리(인터럽트 벡터를 통하여 주소 접근) -> 프로그램 재시작(PC를 통해 접근)
그렇다면, 인터럽트가 발생했을 때 수행중이던 프로세스의 정보는 어디로 가는걸까? 진행 중이던 작업의 내용은 커널(운영체제 중 메모리에 상주하여 일을 처리하는 역할)의 자료 구조에 저장된다. 이 자료 구조를 우리는 PCB라고 부른다.
동시에 발생한다면?
우선순위 기반 처리 => 인터럽트 우선순위가 따라 처리된다.
- 우선순위 결정 요소
- 인터럽트의 중요도
- 처리의 긴급선
- 요구되는 응답 시간
- 처리 방식
- 중첩 허용: 처리 중인 인터럽트보다 우선순위가 높은 인터럽트 발생 시 현재 처리 중단하고 새로운 인터럽트를 먼저 처리한다. (중첩 금지: 한 번에 하나의 인터럽트만 처리)
H/W 인터럽트
외부 장치에서 발생하는 인터럽트.
ex) 키보드/마우스 입력, 타이머 인터럽트, 전원 이상
S/W 인터럽트
프로그램 내부에서 발생하는 인터럽트.
ex) 시스템 콜, 프로그램 오류, 예외 상황(0으로 나누기, 오버플로우)
참고 자료
운영체제(공룡책)
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