인터럽트 (Interrupt)
인터럽트는 프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우, 현재 실행 중인 작업을 즉시 중단하고 발생된 상황에 대한 우선 처리가 필요함을 CPU에게 알리는 것입니다.
하드웨어 장치가 CPU에게 어떤 사실을 알려주거나 CPU의 서비스를 요청해야할 경우, CPU 내에 있는 인터럽트 라인을 세팅하여 인터럽트를 발생시킨다
CPU는 매번 프로그램 카운터(PC)가 가리키는 명령어를 수행한 뒤, 다음 명령을 수행하기 전에 인터럽트 라인이 세팅되었는지 체크합니다.
이를 통해 인터럽트가 발생했으면 CPU는 현재 수행 중이던 프로세스를 멈추고 운영체제의 인터럽트 처리 루틴으로 이동하여 처리힙니다.
인터럽트의 종류
1. 하드웨어 인터럽트 (외부 인터럽트)
하드웨어 컨트롤러가 CPU의 서비스를 요청하기 위해 발생시키는 인터럽트 (일반적)
- 입출력 인터럽트 (I/O Interrupt) : 입출력 작업의 종료나 입출력 오류에 의해 CPU의 기능이 요청됨
- 전원 이상 인터럽트 (Power Fail Interrupt) : 전원 공급의 이상
- 기계 착오 인터럽트 (Machine Check Interrupt) : CPU의 기능적인 오류
- 외부 신호 인터럽트 (External Interrupt) : 오퍼레이터나 타이머에 의해 의도적으로 프로그램이 중단됨
- 타이머에 의한 인터럽트 (자원이 할당된 시간이 다 끝난 경우)
- 키보드로 인터럽트 키를 누른 경우 (ex. Control + Alt + Delete)
- 외부장치로부터 인터럽트 요청이 있는 경우
2. 소프트웨어 인터럽트 (내부 인터럽트)
잘못된 명령이나 잘못된 데이터를 사용할 때 발생하며 Trap이라 부릅니다.
1) 예외 상황 (Exception)
- 프로그램이 허용되지 않은 연산을 수행하려 할 때 자동적으로 발생합니다.
- ex) 0으로 나누는 경우, OverFlow/UnderFlow 등
- 운영체제는 예외 상황이 발생했을 때, CPU의 제어권을 획득해 이 상황에 대한 조치를 취합니다
- 예외 상황에 대한 처리 루틴을 자신의 코드 영역에 가지고 있습니다.
2) 시스템 콜 (System Call)
- Supervisor Call (SVC)
- 운영체제가 제공하는 서비스에 대한 프로그래밍 인터페이스 = System Call
- System Call을 실행시키기 위한 CPU 명령어 = Supervisor Call
- 사용자 프로세스는 운영체제의 서비스를 요청하기 위해 커널의 함수를 호출합니다.
- 이때, 사용자 프로세스는 직접 특권 명령을 수행할 수 없으므로 시스템 콜을 사용합니다.
- fork() : 새로운 프로세스를 생성함
- exec() : child 프로세스에서 parent와 다른 동작을 수행함
- wait() : child 프로세스가 종료될 때까지 기다림
- 등등
인터럽트 동작 순서
- 인터럽트 요청
- 프로그램 실행 중단
- 현재의 프로그램 상태 보존 : PCB(Process Control Block), PC(Program Counter) 등을 이용합니다.
- 인터럽트 처리 루틴 실행 : 인터럽트를 요청한 장치를 식별하기 위해 CPU에 위치한 인터럽트 벡터를 읽습니다.
- 인터럽트 서비스 루틴 실행 : 인터럽트 원인을 파악하고 실질적인 작업을 수행합니다. 인터럽트 서비스 루틴 수행 중에 우선순위가 더 높은 인터럽트가 발생하면 다시 재귀적으로 1번~5번을 수행합니다.
- 상태 복구 : 인터럽트 발생 시 저장해둔 PC를 다시 복구합니다.
- 중단된 프로그램 실행 재개 : PC의 값을 이용하여 이전에 수행 중이던 프로그램을 재개합니다.
- 인터럽트 벡터 (Interrupt Vector)
- 여러 가지 인터럽트에 대해 해당 인터럽트 발생시 처리해야 할 루틴의 주소를 보관하고 있는 테이블
- 일종의 함수를 가리키는 포인터
- CPU에 위치
- 인터럽트 서비스 루틴 (ISR)
- 실제 인터럽트를 처리하기 위한 루틴으로 인터럽트 핸들러라고도 한다.
- 운영체제 코드 부분에는 각종 인터럽트 별로 처리해야 할 내용이 이미 프로그램되어 있습니다.
- 커널이 실행
인터럽트 우선순위
여러 장치에서 인터럽트가 동시에 발생하거나 인터럽트 서비스 루틴 수행 중 인터럽트가 발생했을 경우에는 우선순위를 따져서 처리합니다.
일반적으로 하드웨어 인터럽트가 소프트웨어 인터럽트보다 우선순위가 높습니다.
전원 이상 (Power fail) > 기계 착오 (Machine Check) > 외부 신호 (External) > 입출력 (I/O) > 명령어 잘못 > 프로그램 검사 (Program Check) > SVC (SuperVisor Call)
728x90
반응형
'CS 지식 > 운영체제' 카테고리의 다른 글
[CS] 교착 상태 (0) | 2023.08.26 |
---|---|
[CS] 상호 배제 (0) | 2023.08.26 |
[CS] IPC 통신 (0) | 2023.08.24 |
[CS] 프로세스와 스레드 (0) | 2023.08.16 |
[CS] 운영체제 (0) | 2023.08.14 |