시리즈 글보기
[시스템] 예외처리① - Exception과 Vector Table
[시스템] 예외처리② - 예외처리 및 인터럽트 처리 과정
예외(Exception)
컴퓨터 시스템 동작 중 예기치 않은 상황
- 바운더리를 벗어나 스펙에 없는 상황을 일으킴
- 오류, 정전, 재시작, 입출력 요구 및 시스템 호출의 발생으로 인해 현재 수행 중인 프로그램을 중단하고 예외 처리 한 후 다시 복귀한다.
- 긍정적 사용 : 입출력 인터럽트, 시스템 호출, 디버그 등(의도적으로 컴퓨터 사양의 생산성을 높이기 위해 사용)
- 부정적 사용 : 정전, 하드웨어 오류, 메모리 접근 불가, 명령어 해독 불가 등
- 모든 컴퓨터 시스템은 예외 처리를 위해 Vector table을 갖는다.
- 인터럽트도 예외의 일종
* System call 할 수 없다면 스스로 코드를 짜서 써야 함
* Debug디버그 : 버그제거, 작성한 프로그램이 의도대로 되는지 검사
* Error오류 : 그냥 두면 시스템이 다운되므로 해당되는 오류를 정의해서 처리해 주어야 함
*소프트웨어 관점에서는 긍정적인 면이 많고, 하드웨어 관점에서는 부정적인 부분이 많으나 인터럽트처럼 유용한 경우도 존재
Vector Table
- 모든 컴퓨터 시스템에는 예외 종류와 처리를 위한 정보(예외를 처리하는 시작주소)를 가짐
- 각 CPU마다 고유의 형식으로 정의해서 사용
- 외부 입출력 장치(HDD, Print, USB 등)와 시스템 간(CPU와 Memory)의 인터페이스
* 외부 입출력 장치를 실행하려면 CPU의 명령이 있어야 처리가 가능
- 컴퓨터 시스템과 사용자간(Application Software)의 인터페이스
- 컴퓨터의 시작과 끝을 처리하는 프로그램의 주소를 가짐
* Table테이블 : 1차원 배열의 메모리로 구성
* 입출력 장치를 위한 인터럽트
- System과 교류하려면 Interrupt가 있어야 함
- 외부 입출력 장치를 실행하려면 드라이브가 있어야 하는데 CPU는 외부 입출력 장치에 관심이 없음
→ CPU가 인식할 수 있는 Signal신호을 보냄 → CPU는 그 신호에 대한 드라이브를 구동시킴
* Vector Table은 CPU제작자가 구성하므로 CPU마다 다름(스펙은 CPU제작자가, 프로그램은 엔지니어가)
* 예외처리 시작주소
- PC ← Address , BR (BR address) : Address만큼 점프해서 프로그램을 실행
- 예 : BR #$FFFF1010 : PC에 FFFF1010 주소를 넣음(BR #$FFFF1010 명령과 같음)
* 하드웨어적으로 예외1이 발생 → 무조건 Vector Table 예외1으로 감 → 예외1으로 가서 BR명령어 실행 → 후에 다시 예외처리 전의 위치로 복귀
* 다른 프로그램을 실행하다가 신호를 받으면 잠시 하던 일을 중단하고 Vector Table로 가서 예외 발생주소로 처리하러 다녀오는 과정이 반복되는데 사람이 자각하지 못할 정도로 빠르게 진행됨
* Interrupt Controller 장치 스케줄
PIC : Programmable Interrupt Controller
ARM Core의 Vector Table
* ARM 코어 : ARM회사에서 만든 CPU이름, 기본적인 CPU모듈
o Reset(시작)
- 프로그램의 시작주소
- 부트로더가 소스코드를 로드하면 여기로 점프하여 시작
- PC ← 0 혹은 하드웨어적으로 Reset되는 경우(Watchdog/약 전류)
* 아키텍처에 따라 다름. 시작하자마자 BIOS 프로그램이 돌아가는 경우에는 PC에 BIOS 시작주소를 가리킴
o Prefetch Abort/Data Abort
- 실제로 존재하지 않는 주소를 읽거나 쓰는 우에 발생(Invalid Alignment)
- 캐시로부터 다음 소스코드와 데이터를 읽어오기 위해 Abort를 이용
* 실행 예상되는 명령어를 먼저 미리 인출하여 메모리 안에 Prefetch해 놓으면(캐시도 함께 빨라지므로) 성능 향상
* 예시) Address Error 등
o Undefined Instruction
- CPU(CU)가 IR에 있는 명령어를 해석할 수 없는 상황에 발생
* 정의되지 않는 코드/포맷에 맞지 않은 코드
o SWI(Software Interrupt)
- 프로그램에서 의도적으로 인터럽트를 발생시키려고 할 때 사용.
* System Call, Soft-timer, Break Point, Single Step 등
o IRQ(Interrupt Request)
- 외부 장치들이 시스템 내로 입력하거나 신호를 보낼 때 인터럽트 요구
- 하드웨어 인터럽트
- 시스템은 IRQ를 받으면 해당되는 ISR로 처리하여 분기하여 처리함.
o FIQ(Fast Interrupt Request)
- 인터럽트를 빠르게 처리할 때 사용
* SOC – System On Chip
- 칩이 마치 시스템과 같은 SOC(Core + Module)
* Prefetch
- 캐시 메모리와 연결되어 있음
- Fetch와 같이 순차적으로 하나씩 인출하는 것이 아니고 여러 개 같이 인출할 수 있음
* Invalid Alignment
- 데이터 내용과 관계없이 주소에 문제 발생. Out of Bound
* Data Error
- MBR 레지스터에 오버플로우 혹은 언더플로우 등 데이터 에러 발생
- 이 자체로는 데이터 표현이 불가능
* 정의되지 않은 명령어
- Address Alignment가 맞지 않은 경우(명령어 중간에서부터 가져와 패턴이 안 맞음)
- Addressing이 잘못되어 데이터에 가서 명령어를 가져오는 경우
* Reset을 제외하고는 모두 클래스 처리
* Power button와 Reset
- Power button : 테이블을 다시 깔아 테이블 자체 변경
- Reset : 테이블의 내용만을 바꿈
** 효과는 같고 Reset의 속도가 더 빠름
* Watchdog 감시견
- CPU가 잘 도는지 감시하는 것으로 CPU 오작동시 CPU를 죽임
Vector Table의 구성
Exception | Low Vector |
High Vector |
Reset |
0x00000000 |
0xFFFF0000 |
Undefined Instruction |
0x00000004 |
0xFFFF0004 |
SWI(Software Interrupt) |
0x00000008 |
0xFFFF0008 |
Abort(Prefetch) |
0x0000000c |
0xFFFF000c |
Abort(Data) |
0x00000010 |
0xFFFF0010 |
Reserved |
0x00000014 |
0xFFFF0014 |
IRQ(Interrupt Request) |
0x00000018 |
0xFFFF0018 |
FIQ |
0x0000001c |
0xFFFF001c |
* 예외가 발생하면 각 예외를 처리하는 프로그램의 시작주소로 점프
* core를 작게 하려고 나머지는 소프트웨어적으로 처리
→ Exception Handler
'컴퓨터공학과 > Computing System' 카테고리의 다른 글
[시스템] 입출력장치① - I/O에 대한 모든것(입출력 통신, 장치드라이버) (0) | 2012.06.03 |
---|---|
[시스템] 예외처리② - 예외처리 및 인터럽트 처리 과정 (0) | 2012.06.02 |
[시스템] 운영체제 정리 - Regular OS, Multi-Processing OS, Network OS, Distributed OS, Real-Time OS (0) | 2012.06.02 |
[시스템] CPU정리② - 레지스터와 CPU 동작방법 (0) | 2012.05.26 |
[시스템] CPU정리① - CPU 내부 들여다보기 + CPU꿀정보 (1) | 2012.05.26 |