인터럽트 편집하기
IT위키
편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 | 당신의 편집 | ||
1번째 줄: | 1번째 줄: | ||
;Interrupt | ;Interrupt | ||
;프로그램을 실행 중에 예기치 않은 상황이 발생할 경우 현재 실행중인 작업을 중단하고 발생된 상황을 처리한 후 다시 실행중인 작업으로 복귀하는 작업 | ;프로그램을 실행 중에 예기치 않은 상황이 발생할 경우 현재 실행중인 작업을 중단하고 발생된 상황을 처리한 후 다시 실행중인 작업으로 복귀하는 작업 | ||
8번째 줄: | 7번째 줄: | ||
===외부 인터럽트=== | ===외부 인터럽트=== | ||
* | * 전원 이상 인터럽트(Power fail interrupt) : 말그대로 정전, 파워 이상 등 | ||
* | * 기계 착오 인터럽트(Machine check interrupt) : CPU의 기능적인 오류 | ||
* | * 외부 신호 인터럽트(External interrupt) | ||
** 자원이 할당된 시간이 다 끝난 경우 | ** 자원이 할당된 시간이 다 끝난 경우 | ||
** 키보드로 인터럽트 키를 누른 경우(대표적으로 Control + Alt + Delete) | ** 키보드로 인터럽트 키를 누른 경우(대표적으로 Control + Alt + Delete) | ||
** 외부장치로부터 인터럽트 요청이 있는 경우 | ** 외부장치로부터 인터럽트 요청이 있는 경우 | ||
* | * 입출력 인터럽트(I/O Interrupt) | ||
** 입출력장치가 데이터 전송을 요구하거나 전송이 끝나 다음 동작이 수행되어야 할 경우 | ** 입출력장치가 데이터 전송을 요구하거나 전송이 끝나 다음 동작이 수행되어야 할 경우 | ||
** 입출력 데이터에 이상이 있는 경우 | ** 입출력 데이터에 이상이 있는 경우 | ||
=== 내부 인터럽트 === | === 내부 인터럽트 === | ||
* 잘못된 명령이나 잘못된 데이터를 사용할때 발생 | * 잘못된 명령이나 잘못된 데이터를 사용할때 발생 | ||
* '''Trap'''이라고도 함 | |||
* '''프로그램 검사 인터럽트(Program check interrupt)''' | * '''프로그램 검사 인터럽트(Program check interrupt)''' | ||
** Division by zero | ** Division by zero | ||
26번째 줄: | 26번째 줄: | ||
===소프트웨어 인터럽트=== | ===소프트웨어 인터럽트=== | ||
* | * SVC : SuperVisor Call | ||
** 사용자가 프로그램을 실행시키거나 감시프로그램(Supervisor)을 호출하는 동작을 수행하는 경우 | ** 사용자가 프로그램을 실행시키거나 감시프로그램(Supervisor)을 호출하는 동작을 수행하는 경우 | ||
** 복잡한 입출력 처리를 하는 경우 | ** 복잡한 입출력 처리를 하는 경우 | ||
== 인터럽트 동작 순서 == | == 인터럽트 동작 순서 == | ||
# | # 인터럽트 요청 | ||
# | # 프로그램 실행 중단 : 현재 실행중이던 Micro operation 까지 수행한다. | ||
# | # 현재의 프로그램 상태 보존 : PCB(Process Control Block), PC(Program Counter) 등 | ||
# | # 인터럽트 처리루틴 실행 : 인터럽트를 요청한 장치를 식별한다. | ||
# | # 인터럽트 서비스 루틴 실행 : 인터럽트 원인을 파악하고 실질적인 작업을 수행한다. 처리기 레지스터 상태를 보존한다. 서비스루틴 수행 중 우선순위가 더 높은 인터럽트가 발생하면 또 재귀적으로 1~5를 수행한다. | ||
# 상태복구 : 인터럽트 발생 시 저장해둔 PC(Program counter)를 다시 복구한다. | |||
# 중단된 프로그램 실행 재개 : PC의 값을 이용하여 이전에 수행중이던 프로그램을 재개한다. | |||
# | |||
# | |||
== 인터럽트 우선순위 == | == 인터럽트 우선순위 == | ||
; 여러 장치에서 인터럽트가 동시에 발생하거나 인터럽트 서비스 루틴 수행 중 인터럽트가 발생한 경우 우선순위 판별 필요 | ; 여러 장치에서 인터럽트가 동시에 발생하거나 인터럽트 서비스 루틴 수행 중 인터럽트가 발생한 경우 우선순위 판별 필요 | ||
* '''전원 이상'''(Power fail) > '''기계 착오'''(Machine Check) > '''외부 신호'''(External) > '''입출력'''(I/O) > '''명령어 잘못''' > '''프로그램 검사'''(Program Check) > '''SVC'''(SuperVisor Call) | |||
* 일반적으로 하드웨어 인터럽트가 소프트웨어 인터럽트보다 우선 순위가 | * 일반적으로 하드웨어 인터럽트가 소프트웨어 인터럽트보다 우선 순위가 | ||
* 일반적으로 내부 인터럽트 보다 외부 인터럽트가 우선 순위가 높다. | * 일반적으로 높고 내부 인터럽트 보다 외부 인터럽트가 우선 순위가 높다. | ||
=== 우선순위 판별 방법 === | === 우선순위 판별 방법 === | ||
==== 소프트웨어적인 방법 | ==== 소프트웨어적인 방법 ==== | ||
;Polling | ;Polling | ||
* 인터럽트 요청 플래그를 차례로 비교하여 우선순위가 가장 높은 인터럽트 자원을 찾고, 이에 해당하는 인터럽트 서비스 루틴을 수행한다. | * 인터럽트 요청 플래그를 차례로 비교하여 우선순위가 가장 높은 인터럽트 자원을 찾고, 이에 해당하는 인터럽트 서비스 루틴을 수행한다. | ||
68번째 줄: | 58번째 줄: | ||
* 많은 인터럽트가 있을 경우 하드웨어 적인 방법에 비해서 우선순위 판단 속도가 느리다. | * 많은 인터럽트가 있을 경우 하드웨어 적인 방법에 비해서 우선순위 판단 속도가 느리다. | ||
* 회로가 간단하고 융통성이 있으며, 별도의 하드웨어가 필요 없다. | * 회로가 간단하고 융통성이 있으며, 별도의 하드웨어가 필요 없다. | ||
==== 하드웨어적인 방법 ==== | ==== 하드웨어적인 방법 ==== | ||
82번째 줄: | 71번째 줄: | ||
** 우선순위가 높은 장치를 상위에 두고 우선순위 차례대로 배치한다. | ** 우선순위가 높은 장치를 상위에 두고 우선순위 차례대로 배치한다. | ||
* | * 병렬(Parallel) 우선순위 부여 방식 | ||
** 인터럽트가 발생하는 모든 장치를 하나의 직렬 회선으로 연결한다. | ** 인터럽트가 발생하는 모든 장치를 하나의 직렬 회선으로 연결한다. | ||
** 각 장치별 우선순위를 판별하기 위한 Mask register에 bit를 설정한다. | ** 각 장치별 우선순위를 판별하기 위한 Mask register에 bit를 설정한다. | ||
** Mask register상 우선순위가 높은 서비스 루틴 수행중 우선순위가 낮은 bit들을 비활성화 시킬 수 있다. | ** Mask register상 우선순위가 높은 서비스 루틴 수행중 우선순위가 낮은 bit들을 비활성화 시킬 수 있다. | ||
** 반대로 우선순위가 높은 인터럽트는 낮은 인터럽트 수행 중에도 우선 처리된다. | ** 반대로 우선순위가 높은 인터럽트는 낮은 인터럽트 수행 중에도 우선 처리된다. |