인터럽트
정해진 흐름 대로 CPU가 실행되고 있는데 이것을 끊는 것을 인터럽트라고 한다.
인터럽트의 종류
- 동기 인터럽트(예외) : CPU에 의해 발생하는 인터럽트이다. CPU가 명령어들을 수행하다가 예상치 못한 상황이 발생하면 동기 인터럽트가 발생한다.
- 비동기 인터럽트(하드웨어 인터럽트) : 특정한 동기화 신호 없이 다른 프로세스, 장치, 또는 외부 이벤트에 의해 발생 (ex. 전화/문자 메시지, 웹 브라우저의 팝업 창, 입출력장치 등)
하드웨어 인터럽트를 사용하는 이유는 입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해서이다. 예를 들어 프린트를 하는 상황에서 만약 인터럽트가 없다면, CPU는 프린트 완료 여부를 확인하기 위해 주기적으로 확인해야 한다. 그러나 인터럽트가 있다면 입출력 작업 동안 CPU는 다른 일을 할 수 있다.
- 하드웨어 인터럽트의 처리 순서
- 입출력장치는 CPU에 인터럽트 요청 신호를 보낸다.
- CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인한다.
- CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인한다.
- 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 PCB에 백업한다.
- CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행한다.
- 인터럽트 서비스 루틴 실행이 끝나면 4번에서 백업해 둔 작업을 복구하여 실행을 재개한다.
- 인터럽트 요청 신호 : 장치/프로그램이 CPU의 처리를 필요로 할 때, CPU에게 해당 처리를 요청하는 신호
- 인터럽트 플래그 : 인터럽트 요청 신호를 받은 다음 현재 인터럽트를 받아들일 수 있는지 없는지 표시하는 플래그이다. 그러나, 모든 인터럽트를 인터럽트 플래그로 막을 수 있는 건 아니다. 예를 들어, 정전, 하드웨어 고장 등 꼭 처리해야 하는 너무 중요하고 긴급한 인터럽트는 막지 못한다. (Non Maskable Interrupt)
- 인터럽트 벡터 : 각각의 인터럽트를 구분하기 위한 정보이다. 인터럽트 마다 각각의 서비스 루틴을 위한 시작 주소를 가지고 있으며 인터럽트 벡터를 통해 시작 주소를 알 수 있다. 메모리에 인터럽트 벡터를 모아놓은 인터럽트 벡터 테이블이 있다.
- 인터럽트 서비스 루틴 : 인터럽트가 발생했을 때 해당 인터럽트를 어떻게 처리하면 되는지 적혀있는 프로그램이다. 프로그램이기 때문에 메모리에 저장되어 있다. (마우스, 키보드, 프린터 등 각각에 대한 인터럽트 서비스 루틴이 있다.)
- 하드웨어 인터럽트의 처리 순서
'Computer Science > Operating System' 카테고리의 다른 글
[OS] IPC (Inter Process Communication) (0) | 2023.05.28 |
---|---|
[OS] PCB (Process Control Block) & Context Switching (0) | 2023.05.28 |
[OS] 시스템 콜 (System Call) (0) | 2023.05.27 |
[OS] 프로세스(Process) & 스레드(Thread) (0) | 2023.05.21 |
[OS] 운영체제란? (0) | 2023.05.21 |