본문 바로가기
OS

인터럽트 Interrupt

by tovantablack 2020. 7. 30.
728x90
728x90

인터럽트: Device가 CPU에게 동작이 끝났다고 알리는 동작

 

인터럽트가 필요한 이유: 입출력을 기다리긴 너무 힘드뤄,,, 인터럽트를 이용하여 작업 중간에 다른 프로그램이나 명령어를 수행 가능하게 함으로써 시스템의 처리 효율을 향상한다.

 

인터럽트의 발생

하드웨어: 시스템 버스를 통해 CPU에 신호 전송

소프트웨어: system call을 통해 인터럽트 발생 (밑에 내부 인터럽트)

 

인터럽트의 종류
외부 인터럽트: 입출력 장치, 타이밍 장치, 전원 등 외부적인 요인에 의해 발행하는 인터럽트
- 전원 이상 인터럽트: 정전이나 전원에 이상이 있는 경우
- 기계 고장 인터럽트: CPU 등의 기능적인 동작 오류가 발생한 경우
- 입출력 인터럽트: 입출력의 종류 등의 이유로 CPU의 수행을 요청하는 인터럽트


내부 인터럽트: 잘못된 명령이나 데이터를 사용할 때 발생하는 인터럽트
- 0으로 나누는 경우
- 오버플로우/언더플로우가 발생한 경우
- 프로그램 상의 오류(잘못된 메모리 장소 참조..)
- 함수 등 명령어를 잘못 사용한 경우
- SW인터럽트: CPU가 인스트럭션을 수행하는 도중에 일어나는 인터럽트 (system call)

 

인터럽트의 동작 구조

인터럽트 발생 -> 현재 연산 중단 -> 인터럽트 처리(ISR: Interrupt Service Routine) -> 중단된 연산 재개

 

연산 중단 시! 인터럽트가 발생했을 당시의 상황을 그대로 저장하고 추가적인 인터럽트를 비활성화하여 Lost interrupt를 방지한다.

 

인터럽트의 우선순위

전원 공급의 이상 > CPU의 기계적인 오류 > 외부 신호에 의한 인터럽트 > 입출력 전송 요청/완료/오류 > 프로그램 검사 인터럽트 > SVC 인터럽트(슈퍼바이저 호출)

 

인터럽트의 처리

SW적 방법: Polling

인터럽트 정보를 조사하는 특정 루틴을 호출하여 CPU가 각 장치를 순환하면서 인터럽트 요구를 체크하고 해당 처리기(핸들러)를 호출한다(계속 확인하면서 대기 탄다는 얘기).

 

HW적 방법: Vectored Interrupt System

인터럽트 발생 시 인자로 배열의 인덱스가 전달되고, 그 위치에 있는 ISR이 실행된다.

인터럽트 벡터 = 인터럽트 서비스 루틴의 주소가 기록되어있는 테이블(배열)로, 부팅 시 메모리에 위치한다.

 

 

 

728x90
728x90

댓글