출처 - https://github.com/jmxx219/CS-Study (opens in a new tab)
인터럽트
개념
- 예상치 못한, 외부에서 발생한 이벤트로, OS가 CPU의 정상적인 프로그램 실행을 방해했다는 의미
- CPU가 프로그램을 실행 중일 때 예외상황이 발생한 경우, CPU에게 알려 현재 실행중인 작업을 중단하고 발생된 상황을 처리하도록 하는 것
종류
-
외부 인터럽트 (
일반적인 인터럽트
)- CPU 외부로부터의 인터럽트 요구 신호에 의해 발생되는 인터럽트
- 하드웨어 컨트롤러가 CPU의 서비스를 요청하기 위해 발생시키는 인터럽트
- Machine check interrupt
- CPU의 기능적 오류
- I/O interrupt
- 입출력장치가 데이터 전송을 요구하거나 전송이 끝나 다음 동작이 수행되어야 할 경우
- 입출력 데이터에 이상이 있는 경우
-
내부 인터럽트 (
Trap: 트랩
)- CPU 내부에서 실행하면서 인터럽트에 걸리는 경우
- 컴퓨터의 내부 시스템에서 생성되는 인터럽트로, CPU 내부에서 자신이 실행한 명령이나 CPU의 명령 실행에 관련된 모듈이 변화하는 경우 발생
- 프로그램 실행 중 프로그램 상의 처리 불가능한 오류나 이벤트를 알리기 위한 경우 발생하는데, 이를
Trap
또는 예외라고 함 - Program check interrupt
- Division by zero
- Overflow/Underflow
- 기타 Exception
-
소프트웨어 인터럽트
SVC interrupt
, 운영체제에게 제어권을 넘겨 해결하는 Supervisor Call- 시스템 콜과 같은 맥락으로, 운영체제에 서비스를 요청하기 위해 인터럽트를 걸고 커널모드로 전환하는 인터럽트
인터럽트의 종류를 구분하는 관점
내부인터럽트에 소프트웨어 인터럽트를 포함하여 말하는 경우도 있다.
또한 외부,내부 인터럽트를 HW,SW인터럽트라 구분하기도 한다.
통상적으로 HW인터럽트를인터럽트
, SW인터럽트는트랩
이라는 용어를 사용한다.
인터럽트가 필요한 이유
- 운영체제는 동시에 여러 작업을 처리할 수 없고, 사용자는 한 번에 여러 작업을 처리하기를 원함
- 대부분의 컴퓨터는 한 개의 CPU만 사용하기 때문에, 어떤 일을 처리하는 도중 우선순위가 급한 일을 처리할 필요가 있을 때 대처할 수 있는 방안이 필요함
- 멀티태스킹이 가능하려면 먼저 시작한 작업이라도 우선순위가 더 높은 작업을 먼저 처리하도록 지시할 수 있어야 하는데, 해당 기능이 인터럽트임
인터럽트 처리 과정
- 인터럽트 발생
- 프로세스 중단 (
커널 개입
)- 프로세스의 정보를 PCB에 저장 (Context Saving)
- 인터럽트 처리 (
interrupt handling
)- 인터럽트 발생장소, 원인 파악
- 인터럽트 서비스 할 것인지 결정
- 인터럽트 서비스 루틴 호출 (
interrupt service
)- 인터럽트를 서비스하기로 결정했을 경우 진행
◼︎ 인터럽트 플래그 (Interrupt flag)
- 개념
- 하드웨어 인터럽트를 받아드릴지 무시할지 결정하는 플래그
0
설정 시 인터럽트 요청 무시
- 특징
- 모든 하드웨어 인터럽트를 인터럽트 플래그로 막을 수는 없음
- 막을 수 있는 것과 없는
maskabel Interrupt
,non maskabel Interrupt
으로 구분 됨
- 막을 수 있는 것과 없는
- 모든 하드웨어 인터럽트를 인터럽트 플래그로 막을 수는 없음
◼︎ 인터럽트 핸들러 (인터럽트 서비스 루틴 ISR
)
- 개념
- CPU가 실행하는 실제 인터럽트를 처리하는 루틴
- 인터럽트 발생 시, 인터럽트 별로 필요한 작업을 수행할 수 있도록 정해져있는 OS 안의 코드로 어떻게 처리하고 작동할 것인지에 대한 정보로 이루어짐
- 특징
- 인터럽트 핸들러는 인터럽트 원인에 따라 각각 존재
- OS의 코드 부분에는 각종 인터럽트별로 처리해야할 내용이 이미 프로그래밍 되어있음
- 호출된 인터럽트 서비스 또한 하나의 프로세스
- 따라서 서비스가 끝나면 ready상태의 프로세스들이 올라옴
◼︎ 인터럽트 벡터 테이블 (IVT
)
개념
- 여러가지 인터럽트에 대해 해당 인터럽트 발생시 처리해야 할 루틴의 주소를 보관하고 있는 테이블
- CPU에 존재
특징
- 인터럽트 벡터 테이블에서 발생한 인터럽트를 검사한 후, 해당하는 인터럽트 서비스를 실행
인터럽트 벡터
- CPU가 수 많은 서비스 루틴을 구분하기 위해 사용하는 벡터
- 인터럽트 벡터를 알면 인터럽트 서비스 루틴의 시작 주소를 알 수 있음
컴퓨터 구조와 하드웨어 구성
- CPU와 Main Memory의 연결
- Memory Bus에 의한 연결
- 고성능의 장치들을 CPU에 가깝게 배치
- 느린 장치들은 주변장치 I/O버스에 연결하도록 배치
하드웨어 장치
- 하드웨어 인터페이스 (Interface)
- 개념
- 인터페이스를 통해 시스템 소프트웨어가 동작을 제어할 수 있도록 함
- 하드웨어 장치들은 특정한 상호 동작을 위한 방식과 명시적인 인터페이스 가짐
- 레지스터 구성
상태(Status)
- 하드웨어 장치의 현재 상태를 읽을 수 있는 레지스터
명령(Command)
- 하드웨어 장치가 특정 동작을 하도록 요청할때 사용
데이터(Data)
- 하드웨어 장치에 데이터를 주고받을 때 사용
- 개념
- 내부 구조 (Internals)
- 개념
- 시스템에게 제공하는 장치에 대한 추상화 정의
- 개념
Polling
개념
- 하드웨어의 변화를 지속적으로 읽어드리며 이벤트의 수행여부를 주기적으로 검사하여 해당 신호를 받았을때 이벤트 실행
- 하드웨어 장치의 상태를 수시로 체크하여 명령을 받을 수 있는지 확인하는 것
동작
- 운영체제와 하드웨어간 상호작용
- 운영체제가 하드웨어 장치의
상태 레지스터
를 읽음으로써 명령의 수신여부를 주기적으로 확인하는 것
- 운영체제가 하드웨어 장치의
- 운영체제가
데이터 레지스터
에 데이터 전달 - 운영체제가
명령 레지스터
에 명령을 기록 - 폴링 반복문 실행
- 운영체제는 하드웨어 장치가 특정 동작을 처리했는지 폴링 반복문을 돌며 기다림
- 성공/실패 코드를 받음
특징
- 폴링 동안 다른 프로세스에게 CPU를 양도하지 않고 하드웨어 장치가 동작을 완료하는 동안 계속 루프를 돌며 하드웨어 상태 체크
- CPU의 많은 낭비 발생
- 특정 주기마다 계속 확인
- 시스템 리소스를 많이 소모
- 정확한 타이밍에 시그널이 들어왔는지 확인 불가
- 주기에 따른 오차 존재
- CPU가 깨어있을때만 사용 가능
- 구현이 쉬움
- 우선순위 변경이 용이
- CPU가 직접 일을 하기에 입출력 시간이 오래걸림
하드웨어 측면에서의 인터럽트
- CPU가 프로그램을 실행하는 중 특별한 처리가 필요한 경우 CPU에 알려 이를 처리
- 운영체제는 디바이스에 폴링하는 대신 I/O를 요청시킨 프로세스를 블록시킴
- CPU를 다른 프로세스에게 양도
- 하드웨어 인터럽트 발생
특징
- 폴링보다 높은 CPU 사용률
- CPU연산과 I/O장치 작업을 중첩시켜 수행 가능
- Context Switcing 발생
- 빠른 하드웨어 장치일 경우 폴링이 더욱 효과적
Ref
폴링(Polling) / 인터럽트(Interrupt) / DMA(Direct Memory Access) (opens in a new tab)