CPU 내부에는 CPU가 설정해놓은 예외 상황이 존재한다(예를 들어, 0 나누기 등)
그러한 예외들을 1, 2, 3, 4, ...n개 등록해 놓는것을 하드웨어 예외라고 한다.
소프트웨어 또한 그러한 예외 상황을 지정해두고 있다.
예외가 발생해 CPU가 예외를 알리면 소프트웨어는 해당 예외를 확인해 추후 상황을 결정한다.
즉 CPU는 예외를 알리기만 하지만, 그에 대한 결정은 소프트웨어가 결정한다.
예외의 결정은 운영체제가 하거나, 사용자가 제작한 어플리케이션이 한다.
즉, CPU가 발생시킨 하드웨어 예외를 OS가 받아 소프트웨어 예외를 처리한다.
이를 처리하는 방식은 OS 자체적으로 해결하거나 / 다시 전달해 사용자가 전달받아 사용자 어플리케이션에서 처리한다.
이러한 예외를 SEH라고 한다. (소프트웨어 예외 / 어플리케이션 예외)
윈도우 기반에서 APP 예외는 잘 안다룬다고 함
SEH
예외 처리 코드는 거추장스럽따
예외 처리 코드를 따로 분리하면 가독성에 상당히 도움이 된다.
종료 핸들러
예외 핸들러
result = num1 / num2; 에서 예외가 발생하면 바로 __except로 넘어간다.
스택 풀기의 개념
C++ try catch 참고
아무런 except가 없으면 윈도우는 프로세스를 종료시킨다. 이게 윈도우 예외처리 방식
std::exception 참고
return EXCEPTION_CONTINUE_EXECUTION; 에 의해 에러가 난 코드부터 다시 실행한다.
그냥 함수 스택 풀어버리고 기존 함수로 이동해서 예외처리해버림
'운영체제 > 윈도우 시스템' 카테고리의 다른 글
I/O와 CPU 클럭의 관계 (1) | 2019.10.16 |
---|---|
파일 I/O와 디렉터리 컨트롤 (0) | 2019.10.15 |
메모리 계층 (0) | 2019.10.15 |
쓰레드 동기화 기법 (0) | 2019.10.11 |
쓰레드 생성과 소멸 성격과 특성 상태 컨트롤 우선순위 컨트롤 (0) | 2019.10.11 |