일반적으로 프로세서는 프로그램의 흐름이 순차적이라 생각하고 동작, 그러나 제어 흐름이 바뀔 때가 있다.
명령어로 제어 흐름 변경: 전통적으로 제어 흐름을 변경하는 방법
- 점프(JMP), 분기
- 콜(CALL), 리턴
-> 여러 환경에서 유연하게 작동하지 않음
예외적인 제어 흐름 변경: 제어 흐름에 갑작스런 변화를 만들어 유연하게 처리할 수 있게함
- 컴퓨터의 모든 수준에서 발생
예) 키보드 입력, 커널 수준의 문맥 전환, 응용 프로그램에서의 전환 등 - 예외상황: 일부 이벤트에 대한 응답으로 OS커널에 대한 제어 이전
유저 코드에서 특정 이벤트 발생 -> 커널에서 예외처리 -> 유저코드 다음 줄로 복귀- 예외 테이블: 각 이벤트마다 고유 번호, 핸들러(예외 처리하는 코드) 주소 저장
- 예외 분류
- 동기적 예외: 현재 명령어 실행 중에 발생하는 예외 상황
- 비동기적 예외: 명령어 실행과 독립적으로 발생하는 예외 상황
- 예외의 종류
- 인터럽트(비동기적): 프로세서 외부의 이벤트로 발생
키보드 입력, 마우스 클릭, 네트워크 패킷 도착 등 - 트랩(동기적): 의도적인 예외상황
예) syscall, breakpoint 등 - 오류(fault)(동기적): 의도하지 않았으나 정정 가능
운영체제에서 복구 노력하고 만약 문제가 해결되면 현재 명령어 다시 실행 또는 종료
예) 페이지 fault, protection fault, 부동소수점 fault <- 주로 논리적 오류 - 중단(동기적/비동기적): 복구할 수 없는 치명적인 에러에서 발생
아예 복구 시도 없 프로그램 중단 루틴으로 넘어감. 프로그램 재시작 또는 종료됨
예) 메모리 손상, 잘못된 명령어 <- 주로 시스템, 하드웨어적 오류
- 인터럽트(비동기적): 프로세서 외부의 이벤트로 발생
728x90
반응형
'CS > 컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조](24)[프로세스 생성 & 종료] (0) | 2025.03.03 |
---|---|
[컴퓨터 구조](23)[프로세스] (0) | 2025.02.28 |
[컴퓨터 구조](21)[ELF와 링커심볼] (0) | 2025.02.17 |
[컴퓨터 구조](20)[링킹] (0) | 2025.02.14 |
[컴퓨터 구조](19)[캐시 구조 & 원리] (0) | 2025.02.13 |