인터럽트
인터럽트란
- CPU가 특정 기능을 수행하는 도중에 급하게 다른 일을 처리하고자 할 때 사용할 수 있는 기능
- 대부분의 컴퓨터는 한 개의 CPU를 사용하므로 한 순간에는 하나의 일 밖에 처리할 수 없기 때문에 어떤 일을 처리하는 도중에 우선 순위가 급한 일을 처리할 필요가 있을 때 대처할 수 있는 방안이 필요
- 인터럽트는 CPU가 프로그램을 실행하고 있을 때 입/출력 장치나 혹은 다른 예외상황이 발생하여 처리가 필요할 경우에 CPU에 알려서 처리하는 기술
- 프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행중인 작업을 일시 중단하고, 발생된 상황을 우선 처리한 후 실행중이던 작업으로 복귀하여 계속 처리
- 어느 한 순간에 CPU가 실행하는 명령은 하나인데 다른 장치와의 대화는 어떻게 이루어지는가?에 대한 답
인터럽트 종류
하드웨어 인터럽트
- 일반적으로 인터럽트를 이르는 말
- CPU외부로부터의 인터럽트 요구 신호에 의해 발생되는 인터럽트
- 키보드 마우스와 같은 하드웨어가 발생시킨 인터럽트
- Maskable interrupt
- Interrupt Mask(인터럽트가 발생하였을 때 요구를 받아들일지 말지 지정하는 것)가 가능
- 인텔CPU 에서 INTR pin으로 신호가 들어옴
- Non Maskable interrupt
- Interrupt Mask가 불가능
- 거부, 무시할 수 없음 (매우 중요함)
- 정전, 하드웨어 고장 등 어쩔수없는 오류
- 인텔 CPU에서 NMI pin으로 신호가 들어옴
- 종류
- 입출력 인터럽트 (I/O interrupt) - 입출력 작업의 종료나 입출력 오류에 의해 CPU의 기능이 요청됨
- 정전,전원 이상 인터럽트(Power fail interrupt) - 전원 공급의 이상
- 기계 착오 인터럽트(Machine check interrupt) - CPU의 기능적인 오류
- 외부 신호 인터럽트(External interrupt) - I/O 장치가 아닌 오퍼레이터나 타이머에 의해 의도적으로 프로그램이 중단된 경우
소프트웨어 인터럽트
- 프로그램이 오류를 범하여 Exception이 발생하거나 사용자 프로그램이 커널함수 사용을 위해 호출하는 Systeme Call이 발생하는 경우
- PU내부에서 자신이 실행한 명령이나 CPU의 명령 실행에 관련된 모듈이 변화하는 경우 발생
- trap 또는 exception 이라고도 함
- 예외 상황(Exception)
- 프로그램이 허용되지 않은 연산을 수행하려고 할 때, 자동적으로 발생
- 운영체제는 예외 상황이 발생했을 때, CPU의 제어권을 획득해 이 상황에 대한 조치를 함
- 예외 상황에 대한 처리 루틴을 자신의 코드 영역에 가지고 있음
- 시스템 콜(System Call)
- 사용자 프로세스가 운영체제의 서비스를 요청하기 위해 커널의 함수를 호출하는 것
- 사용자 프로세스가 직접 특권 명령을 수행할 수 없으므로 특권 명령을 수행하려 할 때, 시스템 콜을 사용
- 종류
- 프로그램 검사 인터럽트 (Program check interrupt)
- 0으로 나누는 경우
- OverFlow/UnderFlow
- 페이지 부재
- 부당한 기억장소의 참조
- 사용자가 프로그램을 실행시키거나 supervisior을 호출하는 동작을 수행하는 경우
- 프로그래머에 의해 코드로 짜인 감시 프로그램을 호출하는 방식
- 프로그램 검사 인터럽트 (Program check interrupt)
인터럽트 우선순위
전원 이상(Power fail) > 기계 착오(Machine Check) > 외부 신호(External) > 입출력(I/O) > 명령어 잘못 > 프로그램 검사(Program Check) > SVC(SuperVisor Call)
인터럽트 우선순위 판별법
- Polling (소프트웨어적 방법)
- 인터럽트 요청 플래그를 차례로 비교해 우선순위가 가장 높은 인터럽트 자원을 찾고, 이에 해당하는 인터럽트 서비스 루틴을 수행
- 속도가 빠른 장치에 높은 등급을 부여
- 우선순위 변경이 쉬움
- 많은 인터럽트가 있을 경우 하드웨어적인 방법에 비해 우선순위 판단 속도가 느림
- Interrupt (하드웨어적 방법)
- MCU 자체가 하드웨적으로 변화를 체크하여 변화 시에만 일정한 동작을 하는 방식
- 인터럽트를 요청할 수 있는 장치와 CPU 사이에 장치번호를 식별할 수 있는 버스를 직별/병렬로 연결
실행 과정
- 인터럽트 신호에 의하여 현재 실행 중인 명령어를 종료
- 레지스터의 모든 정보를 스택 영역(또는 프로세스 제어 블록/PCB)에 전송
- 프로그램 카운터에 인터럽트 처리 프로그램(인터럽트 핸들러/서비스 루틴)의 시작 위치를 저장
- 제어권이 인터럽트 처리 프로그램을 실행
- 4번이 완료되면 스택 영역(또는 PCB)에 위치한 내용을 다시 레지스터에 저장
- 프로그램 카운터에 중단된 프로그램의 시작 위치를 저장
- 중단된 프로그램을 재실행
'공부 > 운영체제' 카테고리의 다른 글
[운영체제] PCB와 Context Switching (0) | 2024.02.24 |
---|---|
[운영체제] 시스템 콜(System Call) (0) | 2024.02.24 |
[운영체제] CPU 스케줄링 알고리즘 (0) | 2024.02.24 |
[운영체제] 프로세스와 스레드 (0) | 2024.02.20 |
[운영체제] 메모리계층 (0) | 2024.02.20 |