-
인터럽트 (Interrupt)
CPU의 작업을 방해하는 신호, CPU의 정상적인 실행 흐름을 끊는 것
(1) 동기 인터럽트 (예외)
- CPU가 실행하는 명령어와 직접적으로 관련된 상황 때문에 발생
- 폴트: 예외 발생 후 예외가 발생한 명령어부터 실행
- 어떤 명령어를 실행하기 위해 꼭 필요한 데이터가 보조기억장치에 저장되어 있는 경우
- 트랩: 예외가 발생한 명령어의 다음 명령어부터 실행
- 중단: CPU가 실행 중인 프로그램을 강제로 중단시킬 수밖에 없는 심각한 오류
- 소프트웨어 인터럽트: 시스템 콜이 발생했을 때 나타나는 예외
(2) 비동기 인터럽트 (하드웨어 인터럽트)
- 명령어 실행과 관계없이 발생하는 외부 상황에 의해 발생
- 주로 하드웨어 장치에서 오는 신호에 의해 CPU가 실행하던 작업을 중단하고 처리하는 형태
- CPU의 명령어 실행과 무관하게 발생하므로 "비동기” 인터럽트
- 예시: 하드웨어 인터럽트, 타이머 인터럽트, 전원 관리 인터럽트 등
명령어 사이클
CPU가 명령어를 처리할 때 일정한 주기를 반복하는 과정
Instuction Cycle
(1) 인출 사이클 (필수) (Fetch Cycle)
- 메모리에 있는 명령어를 CPU로 가져오는 단계
(2) 실행 사이클 (필수) (Execution Cycle)
(3) 간접 사이클 (Indirect Cycle)
- 특정 명령어를 실행하기 위해 한 번 더 메모리에 접근하는 단계
(4) 인터럽트 사이클 (Interrupt Cycle)
- CPU가 실행 중에 발생하는 인터럽트를 처리하기 위해 수행하는 특별한 사이클
- 예시: 프린터가 작업을 끝내고 CPU에게 알려주는 것
(비동기) 인터럽트 사이클
(1) 인터럽트 발생
- 키보드 입력, 네트워크 패킷 수신, 예외 상황 (0으로 나누기) 등
(2) 인터럽트 확인
- CPU는 실행 사이클이 끝나고 인출 사이클 실행 전 항상 인터럽트 요청 여부를 확인함
- 인터럽트 요청이 들어왔고 현재 인터럽트 플래그가 1이라면 (3)단계로 넘어감
- 인터럽트 플래그가 0으로 설정되어 있더라도 무시할 수 없는 인터럽트 요청도 존재함
(3) 현재 상태 백업
- 인터럽트 처리 전, CPU는 현재 실행 중인 프로그램의 상태(현재 프로그램 카운터, 레지스터 값 등)를 스택에 저장함
(4) 인터럽트 서비스 루틴 (ISR, Interrupt Service Routine) 실행
- ISR: 인터럽트를 처리하기 위한 프로그램, 인터럽트 핸들러
- CPU는 인터럽트 벡터를 참조하여 ISR을 실행함
- 인터럽트 벡터: ISR을 식별하기 위한 정보. ISR의 시작 주소를 포함하고 있음.
- 각 인터럽트는 고유한 ISR을 가지고 있음
- 예시: 타이머 인터럽트 발생 시 ISR이 해당 타이머를 리셋하거나 특정 작업 수행
- 메모리에 여러 개의 ISR이 저장되어 있음. CPU는 이를 구분하기 위해 인터럽트 벡터를 이용함
(5) 원래 상태 복구 및 재개
- CPU는 스택에 저장된 이전 상태를 복구하여, 인터럽트 발생 이전에 실행 중이던 명령어로 돌아가 실행을 재개함