혼자 공부하는 컴퓨터구조 + 운영체제

명령어 사이클과 인터럽트

단점이없어지고싶은개발자 2022. 10. 5. 21:21
반응형

CPU가 하나의 명령어를 처리하는 정형화된 흐름명령어 사이클이라고 한다. 이 흐름이 끊어지는 상황이 있는데 이 현상을 인터럽트 라고 한다.

명령어사이클은 프로그램 속 각각의 명령어들이 반복되며 실행된다. CPU가 메모리에서 명령어를 가지고 오는데 이게 명령어 사이클의 첫 번째 과정이다. 

1) 메모리에서 가져오는 단계를 인출 사이클(fetch cycle)이라고 한다.

2) 인출한 명령어를 실행하는 과정을 실행 사이클(execution cycle)이라고 한다. 제어장치가 명령어 레지스터에 담긴 값을 해석하고, 제어 신호를 발생시키는 단계다.

3) 예외적으로 간접 주소 지정 방식은 오퍼랜드 필드에 유효 주소의 주소를 명시하기 때문에 메모리에 재차 접근해야 하기 때문에 이 단계를 간접 사이클(indirect cycle)이라고 한다.

 

인터럽트

인터럽트(Interrupt) : 방해하다, 중단시키다. CPU가 수행 중인 작업을 방행하는 신호.

  • 동기 인터럽트(synchronous interrupts)는 CPU가 실행하는 프로그래밍상의 오류와 같은 예외적인 상황에 발생.
  • 비동기 인터럽트(asynchronous interrupts)는 주로 입출력장치에 의해 발생한다.
    • 키보드, 마우스와 같은 입출력장치가 어떠한 입력을 받아들였을 때 이를 처리하기 위해 CPU입력 알림을 보낸다.
    • 입출력장치는 CPU보다 속도가 느리기 때문에 CPU는 다른작업을 처리하고, 완료될 때 CPU가 처리하게 된다. 효율적으로 명령어를 처리할  수 있게 된다

 

비동기 인터럽트 처리 순서

  1. 입출력장치는 CPU에 인터럽트 요청 신호를 보낸다.
    • 인터럽트 하기 전 인터럽트 요청 신호를 요청한다.
  2. CPU는 실행 사이클이 끝나고 명령어 인출하기 전 항상 인터럽트 여부를 확인한다.
  3. CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인한다.
    • 인터럽트 플래그는 인터럽트를 받아들일지, 무시할지를 결정하는 플래그다. 하지만, 정전이나 하드웨어 고장으로 인한 인터럽트가 발생하면 인터럽트 플래그와는 상관없이 먼저 처리된다(...당연한게 아닌가 싶지만)
  4. 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업한다.
  5. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행한다.
    • 인터럽트 서비스 루틴은 인터럽트 핸들러라고도 부르는데, 인터럽트를 처리하기 위한 동작들로 이루어진 프로그램이다.
    • 각각 다른 인터럽트 서비스 루틴이 있고, 이 루틴을 구분하기 위해 인터럽트 벡터를 이용한다. 인터럽트 서비스 루틴을 구분한다. 
    • 인터랩트 벡터를 이용해 CPU는 인터럽트 서비스 루틴의 시작 주소를 알아내고, 그 주소로부터 실행된다.
  6. 인터럽트 서비스 루틴 실행이 끝나면 백업해 둔 작업을 복구해 실행한다.
반응형