8

전두엽힘주기·2025년 4월 22일

Computer System

목록 보기
5/13

8.1 예외상황 (Exceptional Control Flow)

예외 상황 (Exception)

일반적인 제어 흐름에서 벗어나 프로세서 상태의 급격한 변화에 대응하는 메커니즘

하드웨어나 소프트웨어에서 발생한 이벤트(event)에 대해 시스템이 자동으로 반응

예외 상황의 처리

이벤트가 발생하면, 예외 테이블(Exception Table)을 참고하여 해당 이벤트에 적절한 예외 처리 루틴(Handler)으로 제어를 전환

예외 처리 루틴은 서브루틴 형태이며, 일반적으로 간접 프로시저 호출 방식으로 호출됨 (jump table 사용)

예외 처리 후 제어 흐름의 복귀 방식

예외의 종류에 따라, 핸들러가 처리를 마친 뒤 제어를 복귀시키는 방법은 세 가지로 나뉜다:

  1. 현재 인스트럭션으로 복귀

예: 페이지 폴트(Page Fault)

현재 실행 중이던 인스트럭션을 다시 실행해야 하는 경우

하드웨어가 예외 처리 후 프로그램 카운터(PC)를 원래 위치로 되돌림

  1. 다음 인스트럭션으로 복귀

예: 트랩(Trap), 시스템 콜

예외 처리가 완료되면, 정상적으로 다음 명령어부터 실행을 계속함

  1. 프로그램 종료

예: 치명적인 에러 (divide-by-zero, 잘못된 명령어 등)

프로그램 실행을 즉시 중단하고 종료

8.1.1 예외 처리 (Exception Handling)

예외 번호 (Exception Number)

시스템은 각 예외 상황마다 고유한 양의 정수 번호(예외 번호)를 부여함

일부 예외 번호는 하드웨어(프로세서 설계자)가 정의하고, 나머지는 운영체제 커널 설계자가 할당

예외 처리 과정 (Runtime Flow)

  1. 이벤트 발생 감지

프로세서가 실행 중 예외 상황(이벤트)을 감지함

  1. 예외 번호 결정

해당 이벤트에 대한 예외 번호를 결정

  1. 예외 핸들러 주소 결정

예외 번호는 예외 테이블(Exception Table)에서의 인덱스 역할을 하며,
테이블의 시작 주소는 예외 테이블 베이스 레지스터(Exception Table Base Register)에 저장되어 있음

예외 번호를 인덱스로 하여, 해당 예외 핸들러의 주소를 테이블에서 찾아 호출

프로시저 호출과 예외 처리 비교

항목프로시저 호출예외 처리
제어 흐름명시적 함수 호출예기치 않은 이벤트 발생
스택 동작리턴 주소를 스택에 push리턴 주소 + 추가 프로세서 상태 push
리턴 주소호출 이후의 명령어현재 또는 다음 명령어
실행 모드일반적으로 사용자 모드커널 모드 (시스템 자원 접근 가능)
스택 사용사용자 스택커널 스택

예외 핸들러 동작

핸들러는 커널 모드에서 실행됨
→ 시스템 자원에 완전한 접근 가능

예외 발생 시, 프로세서는 다음을 수행함:

현재 실행 중이던 사용자 프로그램의 상태(PC, 레지스터 등)를 커널 스택에 저장

커널로 제어를 전환

예외 처리가 끝나면:

필요한 경우 프로그램 카운터(PC)를 복원하고 사용자 모드로 돌아감

중단되었던 사용자 프로그램을 계속 실행

요약하면:
하드웨어는 예외를 감지하고 컨텍스트 저장 및 핸들러 호출까지만 처리하고,
실제 예외 상황에 대한 세부 처리는 소프트웨어(핸들러)가 담당

예외 상황 (Types of Exceptions)

운영체제와 하드웨어 시스템에서 발생하는 예외 상황은 다음 네 가지 주요 유형:

1. 인터럽트 (Interrupt)

정의:
프로세서 외부의 입출력 장치(I/O device)로부터 발생하는 비동기적 이벤트
→ 특정 인스트럭션 실행과 무관하게 발생

예시: 타이머 인터럽트, 키보드 입력, 네트워크 패킷 수신

처리 흐름:

디바이스가 인터럽트를 발생시키면, 예외번호를 시스템 버스에 보냄

프로세서의 인터럽트 핀이 high로 전환

예외 번호를 읽어 인터럽트 핸들러 호출

복귀:
→ 다음 인스트럭션으로 제어를 돌림 (현재 인스트럭션은 이미 완료된 상태)

2. 트랩 (Trap) & 시스템 콜 (System Call)

정의:
의도적으로 소프트웨어에서 발생시키는 동기적 예외
→ 특정 인스트럭션 실행 결과로 발생

트랩:

예: 소프트웨어 디버깅, 시스템 콜

사용자가 커널의 기능을 사용하기 위해 호출

시스템 콜(System Call):

사용자 프로그램이 커널 기능을 요청하는 인터페이스 역할

함수처럼 보이지만 실제로는 예외 처리 메커니즘을 통해 구현됨

구분함수 호출시스템 콜
실행 모드사용자 모드커널 모드
실행 범위제한된 명령어특권 명령어 가능
스택 사용사용자 스택 공유별도의 커널 스택 사용

복귀:
→ 다음 인스트럭션으로 제어를 돌림 (트랩 실행 이후 정상 흐름 복귀)

3. 오류 (Fault)

정의:
수정 가능한 에러 조건으로 발생하는 예외
→ 예: 페이지 폴트(Page Fault), 나누기 0

처리 흐름:

프로세서가 예외를 감지

오류 핸들러를 호출

핸들러가 에러를 수정 가능하다면:

→ 현재 인스트럭션으로 제어를 돌려 재실행

수정이 불가능하다면:

→ 프로그램 강제 종료

복귀:
→ 현재 인스트럭션으로 돌아가 다시 시도

4. 중단 (Abort)

정의:
복구할 수 없는 치명적인 하드웨어 오류
→ 예: 메모리 패리티 에러, 하드웨어 고장

복귀:
→ 절대 사용자 프로그램으로 제어가 복귀하지 않음

예외 상황 요약

예외 유형발생 시점원인복귀 지점예시
인터럽트비동기외부 장치다음 인스트럭션키보드 입력
트랩 / 시스템 콜동기명령어 실행다음 인스트럭션read(), write()
오류 (Fault)동기정정 가능한 에러현재 인스트럭션페이지 폴트
중단 (Abort)동기치명적 에러복귀 없음메모리 오류

0개의 댓글