본문 바로가기
기타

정보처리 필기_전자계산기 구조_18강_인터럽트

by avvin 2019. 7. 28.





1. 인터럽트 


2. 인터럽트의 종류


3. 인터럽트의 처리과정


4. 인터럽트의 우선순위 판별법



1. 인터럽트


하드웨어나 프로그램 착오시, 주변장치의 입출력 요청시 발생 


사용자 (operator)가 임의로 발생시킬 수 있다. // ex) ctrl + z 



인터럽트 체제의 기본 요소 


1) IRQ : 인터럽트 요청 신호


2) 인터럽트 처리(Handing) 루틴 : 


(수행중인 인스트럭션은 끝내고 처리한다. 100번지 명령까진 끝내고 그 다음 104번지를 PC에 보존하는 것)


수행중인 프로그랜 상태 보존, 문맥 교환  인터럽트 요청장치 검색(원인 판별)


 > 인터럽트 서비스 루틴 수행(분기주소 : vector)  >  조치 후 프로그램 상태 복구(복귀주소 불러옴)


3) 인터럽트 서비스(/취급) 루틴 : 인터럽트에 대한 실질적인 처리 과정 


인터럽트 시작부터 종료 후 복귀까지 인터럽트 처리 루틴이 담당하고, 

실질적인 처리과정은 인터럽트 서비스루틴이 담당


(인터럽트 처리 방법은 운영체제가 담고 있다)

운영체제에 인터럽트를 처리하기 위한 내용을 담고 있는 부분 = 인터럽트 서비스 루틴(IRS)





* IRQ : Interrupt Request


복귀주소 보관


(Context Switch)

문맥 교환 : 인터럽트 처리를 위해 주프로그램 루트에서 필요한 Context들을 인터럽트 처리를 위한 context들로 교환해줌


인터럽트 처리 루틴


1. 원인 판별


2. 문제 해결 (Interrupt sub routine)


복귀주소 가져오고 주프로그램 루틴 이어서 진행




인터럽트 플래그 (IF) = IEN 


인터럽트 발생 원인


HW(정전(최상위 인터럽트), 고장) 문제, SW(프로그램상) 문제, 

operator의 의도적 조작(외부요인), 오버플로우나 언더플로우 발생시

입출력시 cpu 기능이 요청되는 경우, SVC : supervicor call (운영체제의 감시 프로그램이 호출)


프로세스 인터럽트 같은건 없음


분기명령 자체는 인터럽트의 발생 원인이 될 수 없다. 인터럽트가 발생시 인터럽트 처리를 위해 분기가 필요할 뿐




2. 인터럽트의 종류


외부 인터럽트(기계적 장애나 오류로 발생/분류는 안중요 각각 인터럽트의 이름과 특징 알아두기)

(정확히는 HW 신호에 의한 인터럽트. ex. DMA제어기가 CPU에 보내는 신호로 인한 인터럽트 )


- 전원 이상 인터럽트 ( Power Fail Interrupt ) : 최우선권이 주어짐


- 기계 검사 인터럽트 ( Machine Check Interrupt ) : CPU 오류


- 외부 신호 인터럽트 (External Signal Interrupt)


일정 시간이 만료된 경우 (타이머에 의해 발생)

오퍼레이터가 콘솔상의 인터럽트 기 Ctrl + Alt + Del 누른경우


- 입출력 인터럽트 (IO Interrupt)





내부 인터럽트 (SW에 의해)


트랩(Trap)이라고도 한다.


( 코딩 중에 에러나는 경우 생각하면 된다. )

- 오버플로우나 언더플로우가 발생한 경우

- 0에 의한 나눗셈

- 불법적인 명령

- 보호 영역 내의 메모리 어드레스를 Access 하는 경우


>>프로그램 검사 인터럽트 (program check interrupt)




>> 스택이 넘치는것도 오버플로우



프로그램에 오류가 없어도 CPU에서 필요로하는 페이지가 가상메모리에 가있으면 페이지 폴트 발생


>> 오퍼레이터와 대화, 입출력 수행, 기억장치 할당

>>모두 운영체제가 하는 일. 운영체제가 호출하여 인터럽트를 발생시키는건 SuperVisor Call Interrupt




3. 인터럽트의 동작 원리 / 처리과정



1. 인터럽트 요청 신호 발생(제어권이 운영체제에게)

2. 현재 수행중인 명령을 완료하고 상태를 기억시킴 (문맥교환)

3. 어느 장치가 인터럽트를 요청했는지 찾음(원인 판별)

4. 인터럽트 취급 루틴 (실질적인 인터럽트 처리)

5. 보존한 프로그램 상태 복귀하여 fetch 사이클로 넘어가 다음명령 실행



인터럽트 발생 시 이행해야할 사항


- CPU가 확인할 사항


- 프로그램 카운터 내용(복귀주소 메모리에 저장)

- 상태 조건 내용 (PSW: Program Status Word)

- 사용한 모든 레지스터 내용 : 범용 레지스터에 저장된 결과값들


- 인터럽트 서비스 루틴의 시작 주소 (=분기주소 =  Vector주소) 를 발생시킴

- 인터럽트 서비스 루틴이 완료된 후 CPU를 원상복귀시킴



인터럽트 반응 시간 (interrupt response time)


인터럽트 요청 신호 발생 시점부터 인터럽트 취급루틴의 수행(분기)이 시작될때까지의 시간


결과값을 저장하고, 원인판별까지 시간이 얼마나 걸렸는가


IRQ부터 vector까지



다중인터럽트 처리 시스템인 경우엔 인터럽트 서비스 프로그램을 실행해도 다른 인터럽트 처리를 막지 않는다.



고유 인터럽트 요청 신호회선 체제


각 장치마다 신호선을 따로가짐, 어떤 장치에 문제가 생긴건지 판별하는 단계가 필요없다




동시에 X

 


외부 인터럽트(HW)가 먼저고 내부 인터럽트(SW)가 나중이다





4. 인터럽트의 우선순위 판별법


인터럽트 요청이 들어왔을 시, 어떤 장치에서 인터럽트가 발생했는 지 판별하는 과정



HW적 방법 - 데이지 체인(Daisys Chain) : 


모든 장치를 직렬로 검사. 순서가 정해져있다. 속도가 빠르다. 신호를 보낸 장치를 찾으면 장치 넘버와 함께 넘겨줌


SW적 방법 - 폴링 (poling) //폴드 인터럽트라는건 없다


프로그램에 의해 순위를 정함. 순위를 바꿀 수 있고 속도는 비교적 느림 이 순위대로 장치에 신호를 보내서 알아봄



벡터 인터럽트 (Vectored Interrupt, 분기 주소만 필요)★


인터럽트 발생 시 프로세서의 인터럽트 서비스가 특정의 장소로 점프(분기)하여 서비스할 수 있게 한다.

인터럽트를 요청한 장치가 자신의 장치번호(분기할 곳의 정보)를 장치번호 버스를 통해 CPU(프로세서)에 알리는 방식

장치 식별을 위한 별도의 프로그램 루틴이 없어 폴링보다 빠르다.






인터럽트는 하드웨어의 신호에 의해서 분기! 서브루틴 call과 다르다.