[시스템] 예외처리② - 예외처리 및 인터럽트 처리 과정

시리즈 글보기

[시스템] 예외처리① - Exception과 Vector Table

[시스템] 예외처리② - 예외처리 및 인터럽트 처리 과정

 

 


예외처리 처리과정

1) 예외 발생

 

2) 예외 모드의 SPSR 레지스터에 현재 프로그램 상태 CPSR를 저장

 - 현재 실행 SR을 SPSR에 저장

 * SPSR(Save Program Status Register) : 이전 동작 모드의 CPSR(Current Program Status Register)를 저장

 

3) 복귀를 위해 예외 모드 LR 레지스터에 현재  프로그램 카운터 PC값을 저장

 * LR(Link Register) : 복귀 주소 링크. Branch 후에 복귀할 주소를 PC에 저장

 

4) CPSR의 모드 비트를 변경하여 해당 예외에 대응하는 동작 모드로 진입  

   - 이미 SPSR에 CPSR을 저장했으므로 마음대로 변경 가능

   - 하드에서 동작

 

5) PC에 예외 핸들러의 주소를 저장하여 해당 예외 처리

 

6) 예외처리 후 다시 복귀

 - PC ← LR, CPSR   SPSR 후 점프 

 

 

정리하면 

 ① 예외 발생

 ② SPSR ← CPSR

 ③ PC → LR

 ④ (Vector table에 저장) PC Vector table의 예외처리 주소 점프

 ⑤ 예외 처리

 ⑥ PC LR, CPSR SPSR 점프 복귀

 

* SR(Status Register)는 SPSR(Save Program Status Register)과 CPSR(Current Program Status Register)로 나뉨

* 예외가 발생하면 CPSR의 내용을 SPSR에 넣고 반대로 예외를 처리하고 복귀할 때는 SPSR의 내용을 CPSR에 넣음

 

* Handler

 = controller : 하드웨어적

 = manager : 소프트웨어적

 

* Prefetch Abort, Data Abort,Undefined Instruction… 는 모두 클래스이기 때문에 각각 핸들러를 가짐

 

 

 

인터럽트 Interrupt

컴퓨터에 설정된 장치에서 프로세서로 보내는 하드웨어 신호로, 현재 실행 중인 프로그램의 수행을 미루고 다른 프로그램의 수행을 요구하는 명령

 

- 인터럽트를 이용하여 단일 프로세서 컴퓨터에서 다른 프로그램이나 명령어를 수행할 수 있다. 시스템이 예측하지 못한 사용자 입력, 갑작스런 정전, 컴퓨터 시스템으로부터의 긴급 요청, 잘못된 명령어 수행, 입출력 작업 완료 같은 긴급 상황을 적절히 처리하기 위해 필요함

- 외부 장치의 동작과 자신의 동작을 조정할 수 있는 수단으로 인터럽트 사용

- 입력 장치가 새로운 입출력 연산 수행 시, 프로세서는 먼저 폴링을 통해 각 장치의 상태 비트를 검사한다. 인터럽트의 개념이 없으면 장치의 상태를 계속 점검하는 과정이 필요해 프로세서가 다른 연산을 수행할 수 없으므로 오버헤드가 증가하여 수행 시간이 낭비됨

* 인터럽트 요청 회선IRQ : 버스 제어선 중 하나로 인터럽트 신호를 전달하는 목적으로 사용

- 인터럽트는 크게 인터럽트 요청과 인터럽트 서비스 루틴으로 구성됨 

- 인터럽트를 수행하기 위해 컴퓨터는 인터럽트 제어 선을 제공하여 인터럽트 발생과 더불어 적절한 처리를 수행함. 인터럽트 요청 신호에 의해 수행되는 루틴을 인터럽트 처리 프로그램, 인터럽트 서비스 루틴이라 함. 인터럽트 발생 원인에 따라 해당 예외에 대한 루틴을 수행

 

* Interrupt Request Line인터럽트 요청 회선IRQ은 신호를 주려고 사용하며 PIC로 연결됨

 

* Polling

- 입출력 장치를 점검하여 누가 입출력을 요청하는지 CPU가 책임지고 결정

- 입출력장치가 입출력을 하려면 CPU가 책임짐. 하드웨어가 요청하는지 계속 확인 

→ 오히려 인터럽트를 처리하다 본연의 임무처리가 어려울 수 있으므로 입출력으로만 구성되어있는 프로그램일 때는 인터럽트보다 폴링방법이 좋음

 

* 인터럽트에도 우선순위가 존재

인터럽트가 동시에 발생할 시 , PIC에 의해 우선순위를 검사하여 우선순위 높은 입출력장치를 먼저 처리(CPU와의 연결)할 수 있게 됨

 

 

인터럽트 처리과정

 

(a) : 인터럽트 전

- 메모리에 프로그램 A가 로드되어 실행되고 있으며, 레지스터내 PC(프로그램 카운터)는 현재 명령어를 가리킴

(b) : 인터럽트 신호 도달

- 프로세서에 인터럽트 신호가 도달하여 현재 명령어를 종료하고, 모든 레지스터 내용을 메모리의 스택 영역에 저장

- PC에는 인터럽트 처리 프로그램(프로그램 B)의 시작 위치를 저장하고 프로그램 B로 제어를 넘겨 이를 실행

(c) : 인터럽트 루틴 종료

- 스택 영역에 있던 내용을 레지스터에 다시 저장한 뒤,  PC를 비롯하여 중단했던 프로그램 A를 다시 시작한다.

 

* 인터럽트는 언제 발생할지 모르기 때문에 LIFO(Last in First out)인 스택에 저장

* Stack Point Register : 스택 영역의 주소를 가리키는 레지스터

 

* 스택

- 소프트웨어적으로 스택처럼 구현할 수 있는 프로그램이 있으며 하드웨어적으로는 stack point register에 그 메모리 주소를 가지고 있음.

- 재귀 루틴을 처리하기에 좋음 Push Push Pop Pop

 

반응형
그리드형

댓글

❤️김세인트가 사랑으로 키웁니다❤️