시작하기 전

명령어 사이클 : CPU가 하나의 명령어를 처리하는 과정에서 어떤 정해진 흐름이 있고, CPU는 그 흐름을 반복하며 명령어를 처리하는 정형화된 흐름
인터럽트 : 명령어 실행 흐름 도중 흐름이 끊어지는 상황

명령어 사이클

일정 주기로 실행되는 명령어들의 흐름

인출 사이클

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

실행 사이클

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

간접 사이클

간접 주소 지정 방식 같은 경우, 명령어를 실행하기 위해 메모리에 한 번 더 접근해야 하는데 이 때를 위한 단계

대략적으로 명령어 사이클은 위와 같이 동작한다.
하지만 아직 이게 끝은 아니다.

인터럽트

CPU가 수행 중인 작업을 방해받아 잠시 중단할 때가 있는데, 이때 방해하는 신호를 인터럽트라고 한다.

인터럽트 종류

  1. 동기 인터럽트(예외) : CPU에 의해 발생하는 인터럽트, CPU가 명령어들을 수행하다가 예상치 못한 상황에 마주쳤을 때(프로그래밍 오류) 발생하는 인터럽트
  2. 비동기 인터럽트(하드웨어 인터럽트) : 주로 입출력장치(키보드, 마우스)에 의해 발생하는 인터럽트

하드웨어 인터럽트

입출력 장치는 CPU보다 현저히 속도가 느려 CPU는 입출력 결과를 바로바로 알 수가 없음.
이 때문에 주기적으로 입출력장치에게 완료되었는지 확인해야 함
인터럽트를 사용하면 굳이 주기적으로 물어볼 필요가 없이 입출력장치에게 완료 인터럽트를 받을 때까지 다른 작업을 하면 됨

하드웨어 인터럽트 처리 속도

  1. 입출력정치는 CPU에 인터럽트 요청 신호를 보냄
  2. CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부 확인
  3. CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 인터럽트를 받아들일 수 있는지 여부를 확인
  4. 인터럽트를 받아들일 수 있는지 확인하면 CPU는 지금까지의 작업을 백업함
  5. CPU는 인터럽트 벡터를 참고하여 인터럽트 서비스 루틴을 실행한다.
  6. 인터럽트 서비스 루틴 실행이 끝나면 백업해둔 작업을 복구하여 실행 재개

인터럽트 요청 신호 : 인터럽트 하기 전 인터럽트 가능한지 요청 신호를 보내는 것
인터럽트 플래그 : 인터럽트 요청 신호를 무시할지 말지 결정하는 비트,만약 CPU가 중요한 일을 처리하고 있거나 어떠한 방해도 받으면 안되는 상황이라면 플러그가 '불가능'으로 설정됨 -> 인터럽트 요청 무시
인터럽트 서비스 루틴(안터럽트 핸들러) : 인터럽트를 처리하는 프로그램(마우스 동작 프로그램, 키보드 동작 프로그램....)

인터럽트 벡터 : 수많은 인터럽트 서비스 루틴을 구분하기 위한 정보

최종 명령어 사이클

profile
어쩌다보니 개발하게 된 구황작물

0개의 댓글