ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CS] CPU의 명령어 사이클과 인터럽트
    Computer Science 2024. 10. 18. 23:21

    인터럽트 (Interrupt)

    CPU의 작업을 방해하는 신호, CPU의 정상적인 실행 흐름을 끊는 것

    (1) 동기 인터럽트 (예외)

    • CPU가 실행하는 명령어와 직접적으로 관련된 상황 때문에 발생
    • 폴트: 예외 발생 후 예외가 발생한 명령어부터 실행
      • 어떤 명령어를 실행하기 위해 꼭 필요한 데이터가 보조기억장치에 저장되어 있는 경우
    • 트랩: 예외가 발생한 명령어의 다음 명령어부터 실행
      • 디버깅의 브레이크 포인트
    • 중단: CPU가 실행 중인 프로그램을 강제로 중단시킬 수밖에 없는 심각한 오류
    • 소프트웨어 인터럽트: 시스템 콜이 발생했을 때 나타나는 예외

    (2) 비동기 인터럽트 (하드웨어 인터럽트)

    • 명령어 실행과 관계없이 발생하는 외부 상황에 의해 발생
    • 주로 하드웨어 장치에서 오는 신호에 의해 CPU가 실행하던 작업을 중단하고 처리하는 형태
    • CPU의 명령어 실행과 무관하게 발생하므로 "비동기” 인터럽트
    • 예시: 하드웨어 인터럽트, 타이머 인터럽트, 전원 관리 인터럽트 등

    명령어 사이클

    CPU가 명령어를 처리할 때 일정한 주기를 반복하는 과정

    Instuction Cycle

    (1) 인출 사이클 (필수) (Fetch Cycle)

    • 메모리에 있는 명령어를 CPU로 가져오는 단계

    (2) 실행 사이클 (필수) (Execution Cycle)

    • CPU로 가져온 명령어를 실행하는 단계

    (3) 간접 사이클 (Indirect Cycle)

    • 특정 명령어를 실행하기 위해 한 번 더 메모리에 접근하는 단계

    (4) 인터럽트 사이클 (Interrupt Cycle)

    • CPU가 실행 중에 발생하는 인터럽트를 처리하기 위해 수행하는 특별한 사이클
    • 예시: 프린터가 작업을 끝내고 CPU에게 알려주는 것

    (비동기) 인터럽트 사이클

    (1) 인터럽트 발생

    • 키보드 입력, 네트워크 패킷 수신, 예외 상황 (0으로 나누기) 등

    (2) 인터럽트 확인

    • CPU는 실행 사이클이 끝나고 인출 사이클 실행 전 항상 인터럽트 요청 여부를 확인함
    • 인터럽트 요청이 들어왔고 현재 인터럽트 플래그가 1이라면 (3)단계로 넘어감
    • 인터럽트 플래그가 0으로 설정되어 있더라도 무시할 수 없는 인터럽트 요청도 존재함
      • 예시: 하드웨드 고장, 정전 등

    (3) 현재 상태 백업

    • 인터럽트 처리 전, CPU는 현재 실행 중인 프로그램의 상태(현재 프로그램 카운터, 레지스터 값 등)를 스택에 저장함

    (4) 인터럽트 서비스 루틴 (ISR, Interrupt Service Routine) 실행

    • ISR: 인터럽트를 처리하기 위한 프로그램, 인터럽트 핸들러
    • CPU는 인터럽트 벡터를 참조하여 ISR을 실행함
      • 인터럽트 벡터: ISR을 식별하기 위한 정보. ISR의 시작 주소를 포함하고 있음.
    • 각 인터럽트는 고유한 ISR을 가지고 있음
      • 예시: 타이머 인터럽트 발생 시 ISR이 해당 타이머를 리셋하거나 특정 작업 수행
    • 메모리에 여러 개의 ISR이 저장되어 있음. CPU는 이를 구분하기 위해 인터럽트 벡터를 이용함

    (5) 원래 상태 복구 및 재개

    • CPU는 스택에 저장된 이전 상태를 복구하여, 인터럽트 발생 이전에 실행 중이던 명령어로 돌아가 실행을 재개함