Machineboy空

CPU ③ 명령어 사이클과 인터럽트 본문

Computer/CS

CPU ③ 명령어 사이클과 인터럽트

안녕도라 2024. 1. 5. 14:09

CPU는 메모리로부터 명령어나 데이터를 가져와서 실행하기도 하고 필요하면 메모리에 값을 저장하기도 한다.

명령어 사이클 ?

CPU가 메모리의 실행 프로그램을 실행하는데 일정한 패턴이 있고, 정해진 패턴 흐름에 따라 명령어를 처리한다.

 

인터럽트 ?

정해진 흐름을 방해받기도 한다. 정해진 흐름을 끊는 신호.


 

1) 명령어 사이클 (Instruction cycle)

 

프로그램 속 명령어들은 일정한 주기가 반복되며 실행되고 이 주기를 명령어 사이클(Instruction cycle)이라고 한다.

인출 사이클 (Fetch Cycle) 메모리에 저장된 명령어를 실행하려면
가장 먼저 CPU로 가져와야 한다.
실행 사이클 (Execution Cycle) 가져 와서 실행

 

하지만 CPU로 명령어를 가지고 와도 바로 실행이 불가능한 경우도 있다.

이 경우, 간접 사이클이 추가되기도 한다.

2) 인터럽트 (Interrupt)

  • CPU의 정해진 흐름을 끊는 전기 신호
    • CPU가 꼭 주목해야 할 때, CPU가 얼른 처리해야 할 다른 작업이 생겼을 때 발생
    • "대리, 이거 급한 거니까 지금 하던 일 멈추고 이것부터 처리해주게 "
     

동기 인터럽트(exception) 비동기 인터럽트(hardware interrupt)
CPU가 예기치 못한 상황을 접했을 때 발생 주로 입출력장치에 의해 발생
ex) 알림(세탁기 완료 알림, 전자레인지 조리 알림)과 같은 역할


ex) 키보드 같은 입출력장치에서 스페이스 바 누르면 CPU가 그것을 인지하고 정해진 흐름을 중단하고 입력을 처리해줘야겠다하는 식으로 행동하게 됌

 

2-1) 비동기 인터럽트 (hardware Interrupt)

 

  • 비동기 인터럽트(hardware interrupt)의 필요성

입출력 작업 도중에도 효율적으로 명령어를 처리하기 위한 하드웨어 인터럽트


  • 하드웨어 인터럽트의 처리 순서

인터럽트 요청 신호
 
인터럽트 플래그
현재 인터럽트를 받아들일 수 있다, 없다를 판단하는 플래그

*모든 인터럽트를 인터럽트 플래그로 막을 수 있는 것은 아니다
인터럽트 벡터
인터럽트마다 고유한 인터럽트 서비스 루틴의 시작 주소를 가지고 있다

메모리에 인터럽트 벡터 테이블이 있다. 
인터럽트 
서비스 루틴
예) 루틴A에는 프린터의 서비스 루틴, B에는 키도브 서비스 루틴 등이 적혀있음

 

즉, CPU가 인터럽트를 처리한다

 

== '인터럽트 서비스 루틴을 실행하고, 본래 수행하던 작업으로 다시 되돌아 온다'

+ 인터럽트 시작 주소는 인터럽트 벡터를 통해 알 수 있다.

 

+ 인터럽트가 발생하면 메모리 스택 영역에 지금 작업 내용을 백업하고 인터럽트를 실행