🦢 인터럽트
인터럽트: CPU 프로그램 실행 시 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요한 경우, 마이크로프로세서에게 알려 처리할 수 있도록 하는 것
- 필요 이유: 입출력 연산이 CPU 명령 수행속도보다 현저히 느림 > CPU가 입출력 처리를 기다릴 시간이 없기 때문에 입출력이 연산 완료 후 CPU에게 작업 완료를 알리는 것
- 하드웨어/소프트웨어는 인터럽트를 발생시키기 위해 CPU내에 있는 인터럽트 라인을 세팅함
- CPU는 매번 명령을 수행하기 전에 인터럽트라인이 세팅되어있는지 검사함
- 하드웨어 인터럽트: 하드웨어가 발생시키는 인터럽트
- CPU가 아닌 다른 하드웨어 장치가 CPU에게 알릴 것이 있거나, CPU 서비스를 요청해야 할 경우
- 소프트웨어 인터럽트: 소프트웨어가 발생시키는 인터럽트
- 소프트웨어 (사용자 프로그램)가 스스로 인터럽트 라인 생성 (예) 예외 상황, system call
🦢 인터럽트 처리 방법
- 인터럽트 발생 시 CPU는 현재 진행 중인 작업을 완료하고 현재까지 수행 중이던 상태를 해당 프로세스의 Process Control Block (PCB)에 저장함
- PCB에는 수행중이던 메모리 주소, 레지스터 값, 하드웨어 상태 등을 저장
- PC(Program Counter, IP)에 다음 실행할 명령의 주소 저장
- 인터럽트 벡터를 읽고 ISR 주소값을 얻어 Interrupt Service Routine (ISR)로 점프하여 루틴 실행
- 해당 코드 실행 후 대피시킨 레지스터 복원
- ISR의 끝에 IRET 명령어에 의해 인터럽트가 해제
- IRET 명령어: Interrupt Return 명령어, 이전 테스크로 다시 돌아가는 어셈블리 명령어
- IRET 명령어가 실행되면 대피시킨 PC 값을 복원하여 이전 실행 위치로 복원
정리:
-
프로그램 실행 중단: 현재 실행중이던 명령어까지만 수행
-
현재의 프로그램 상태 보존: PC(Program Counter)의 값을 스택에 저장
- Context을 저장한다고도 함
- Context: 프로세스의 상태와 관련된 레지스터의 집합
-
인터럽트 처리루틴 실행: 인터럽트를 요청한 장치 식별
-
인터럽트 서비스 루틴 (ISR) 실행: 인터럽트 원인 파익 & 실질적 작업 수행. 처리기 레지스터 상태 보존.
- 서비스 루틴 수행 중 우선순위가 더 높은 인터럽트가 발생하면 재귀적으로 1~5 수행
-
상태 복구: 인터럽트 발생시 저장해둔 PC(Program Counter)값을 다시 복구
-
중단된 프로그램 실행 재개: PC값을 이용해 이전에 수행중이던 프로그램 재개
🦢 Polling vs. Interrupt
Polling vs. Interrupt
- Polling:
- 하드웨어의 변화를 지속적으로 읽어들이며 이벤트의 수행 여부를 주기적으로 검사
- 해당 신호를 받았을 때 이벤트 실행
- Interrupt:
- 하드웨어의 변화를 감지하여 외부로부터 입력을 CPU가 알아채는 방법
- 이벤트를 수행하라는 IRQ를 받으면 인터럽트 핸들러를 통해 ISR이 동작
🦢 하드웨어/소프트웨어 인터럽트
하드웨어 인터럽트:
- CPU 외부의 디스크 컨트롤러/주변장치로부터 요구됨
- 운영체제의 처리를 요하는 상황을 알리기 위해 전지적인 신호를 사용해 구현
- HW 인터럽트 종류:
- 기계검사 인터럽트: 프로그램 실행 중 갑작스런 정전/컴퓨터 내에서 기계적 문제
- 외부 인터럽트: 오퍼레이터나 타이머에 의해 의도적으로 프로그램 중단
- 입출력 인터럽트: 입출력의 종료나 입출력의 오류에 의해 CPU의 기능이 요청됨
- 프로그램검사 인터럽트: 프로그램 실행 중 보호된 기억공간 내에 접근하거나 불법적인 명령 수행과 같은 프로그램의 문제 발생
소프트웨어 인터럽트: CPU 내부에서 자신이 실행한 명령/CPU의 명령 실행에 관련된 모듈이 변화하는 경우 발생
- 프로그램 실행 중 프로그램 상의 처리 불가능한 오류/이벤트를 알리기 위함 > trap/exception (예외)
- 프로그램 내에서 특별한 서비스를 요구하거나 감시를 목적으로 의도적으로 프로그램이 발생시킨 특별한 명령어에 의해 발생
- (예) 존재하지 않는 메모리 주소에 접근, 나눗셈에서 0으로 나누고자 하는 경우
참고: