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