CS/컴퓨터 구조

[컴퓨터 구조](22)[제어흐름변경]

황올뱀 2025. 2. 27. 18:39

일반적으로 프로세서는 프로그램의 흐름이 순차적이라 생각하고 동작, 그러나 제어 흐름이 바뀔 때가 있다.

명령어로 제어 흐름 변경: 전통적으로 제어 흐름을 변경하는 방법

    • 점프(JMP), 분기
    • 콜(CALL), 리턴
      -> 여러 환경에서 유연하게 작동하지 않음

예외적인 제어 흐름 변경: 제어 흐름에 갑작스런 변화를 만들어 유연하게 처리할 수 있게함

  • 컴퓨터의 모든 수준에서 발생
    예) 키보드 입력, 커널 수준의 문맥 전환, 응용 프로그램에서의 전환 등
  • 예외상황: 일부 이벤트에 대한 응답으로 OS커널에 대한 제어 이전
    유저 코드에서 특정 이벤트 발생 -> 커널에서 예외처리 -> 유저코드 다음 줄로 복귀
    • 예외 테이블: 각 이벤트마다 고유 번호, 핸들러(예외 처리하는 코드) 주소 저장
    • 예외 분류
      • 동기적 예외: 현재 명령어 실행 중에 발생하는 예외 상황
      • 비동기적 예외: 명령어 실행과 독립적으로 발생하는 예외 상황
    • 예외의 종류
      • 인터럽트(비동기적): 프로세서 외부의 이벤트로 발생
        키보드 입력, 마우스 클릭, 네트워크 패킷 도착 등
      • 트랩(동기적): 의도적인 예외상황
        예) syscall, breakpoint 등
      • 오류(fault)(동기적): 의도하지 않았으나 정정 가능
        운영체제에서 복구 노력하고 만약 문제가 해결되면 현재 명령어 다시 실행 또는 종료
        예) 페이지 fault, protection fault, 부동소수점 fault <- 주로 논리적 오류
      • 중단(동기적/비동기적): 복구할 수 없는 치명적인 에러에서 발생
        아예 복구 시도 없 프로그램 중단 루틴으로 넘어감. 프로그램 재시작 또는 종료됨
        예) 메모리 손상, 잘못된 명령어 <- 주로 시스템, 하드웨어적 오류
728x90
반응형