[CS : 컴퓨터 구조] 명령어 사이클과 인터럽트
Computer Science/컴퓨터 구조

[CS : 컴퓨터 구조] 명령어 사이클과 인터럽트

T1) 명령어 사이클

  • 프로그램 속 명령어들은 일정한 주기가 반복되며 실행되는데 이 주기를 명령어 사이클이라고 한다.
  • 인출 사이클 : 실행할 내용을 가장 먼저 CPU로 갖고와야한다
  • 실행 사이클 : 갖고 온 내용을 바탕으로 실행한다.
  • 간접 사이클 : 간접 주소 지정 방식 같이 메모리 접근이 더 필요한 경우 발생하는 사이클이다.

(좌) 인출 사이클 , (우) 실행 사이클

 

 

※ 어떤 명령어는 인출과 실행 사이클 만으로 실행되고, 어떤 명령어는 인출, 간접, 실행 사이클을 거쳐 실행된다.

명령어 사이클

 

T2 ) 인터럽트

인터럽트 발생 예시

  • 인터럽트(interrupt) ; 방해하다, 중단시키다.
  • CPU가 정해진 흐름대로 프로그램을 처리하고 있는 과정 중 흐름을 끊어버리는 것이 인터럽트이다.
  • CPU가 꼭 주목해야할 때 혹은 CPU가 얼른 처리해야할 다른 작업이 생겼을 때 발생한다.

 

T2_sub1) 인터럽트의 종류

인터럽트 동기 인터럽트(예외) 폴트
트랩
중단
소프트웨어 인터럽트
비동기 인터럽트
(하드웨어 인터럽트)
막을 수 있는 인터럽트
막을 수 없는 인터럽트
  • 동기 인터럽트(예외) : CPU가 예기치 못한 상황을 접했을 때 발생한다.
  • 비동기 인터럽트(하드웨어 인터럽트) :
    • 주로 입 · 출력장치에 의해 발생한다. (ex 세탁기 완료알림, 전자레인지 조리 알림)과 같은 역할이다.
    • 입·출력 작업 도중에도 효율적으로 명령어를 처리하기 위해 하드웨어 인터럽트를 사용한다. ( 인터럽트가 없다면 CPU는 프린트 완료 여부를 확인하기 위해 주기적으로 확인해야하기때문이다. )
    • 결론적으로 입·출력장치는 CPU에 비해 느리기때문에 인터럽트가 있다면 입출력 작업 동안 CPU는 다른 일을 할 수 있다.
  • 하드웨어 인터럽트(비동기 인터럽트)의 처리 순서
    1. 입출력 장치는 CPU에 *인터럽트 요청 신호를 보낸다.
    2. CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인한다.
    3. CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는 지 여부를 확인한다.
    4. 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업한다.
    5. CPU는 인터럽트 백터를 참조하여 인터럽트 서비스 루틴을 실행한다.
    6. 인터럽트 서비스 루틴이 실행이 끝나면 4.에서 백업해둔 작업을 복구하여 실행을 재개한다.
  • 인터럽트 요청 신호 : 인터럽트는 CPU의 정상적인 실행 사이클을 멈추는 것이기 떄문에 요청신호를 보낸다.

인터럽트 요청 신호

  • CPU가 인터럽트 요청을 받아들이려면?
    • CPU가 실행 사이클이 끝난 후 인터럽트 플래그를 확인하여 수용여부를 확인한다.
    • 모든 인터럽트를 인터럽트 플래그로 막을 수는 없다. (ex 정전, 하드웨어 고장)

플래그 레지스터 구성

  • 인터럽트 서비스 루틴이란?
    • 인터럽트가 발생했을 때 해당 인터럽트를 어떻게 처리하기위한 프로그램
      • ex) 키보드가 or 마우스가 인터럽트 요청을 보내면 이렇게 행동해야한다.
    • CPU가 인터럽트를 받아들이기로 했다면 인터럽트 서비스 루틴을 실행한다.
      • 인터럽트 서비스루틴도 프로그램이기에 메모리에 저장되어있다.
      • 정상적으로 메모리에 있는 프로그램을 실행하다가 인터럽트가 발생하면 정해진 인터럽트 서비스 루틴을 수행하고 기존에 수행하던 프로그램 지점으로 되돌아가서 수행을 재개한다.

인터럽트 유무에 따른 수행과정

  • 인터럽트 벡터
    • 각각의 인터럽트를 구현하기 위한 정보(인터럽트를 실행하기 위한 시작 주소를 갖고있음)

 

결론 :

  • " CPU가 인터럽트를 처리한다. " → ;인터럽트 서비스 루틴을 실행하고, 본래 수행하던 작업으로 다시 되돌아온다.' 
  • CPU가 인터럽트 서비스 루틴을 실행하려면 CPU내부의 레지스터를 사용해야하는데 이미 실행 중이었던 프로그램에 대한 정보가 레지스터에 있었을 것이기 때문에 이 정보또한 보존되어야하기때문에 이 정보들은 메모리 스택영역에 저장된다.

인터럽트 유무에 따른 명령어 사이클

 

 

 

 

 

출처: 인프런-개발자를 위한 컴퓨터공학 1: 혼자 공부하는 컴퓨터구조 + 운영체제
https://www.inflearn.com/course/%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C/dashboard