본문 바로가기
컴퓨터공학기초 개념/컴퓨터구조

19. CPU 내부구조 - 입출력과 인터럽트

by devraphy 2021. 8. 12.

 0. 시작하기전에 

- 지금까지 CPU가 내부적으로 수행하는 일(마이크로 연산), 동작 방식을 배웠다. 

- 이전 포스팅에서 명령어의 구성과 명령어가 데이터를 가져오는 방식(주소지정방식)에 대해서 알아 보았다.

- 그렇다면 CPU의 동작 방식에 대한 전반적인 이해가 생겼다고 할 수 있다. 

- 이번 포스팅에서는 CPU의 내부 동작방식을 생각하면서 입출력이 어떻게 처리되는지 알아보자.


1. 입출력 과정

a) 입출력의 구성

클릭하면 확대됩니다. 

- 컴퓨터의 모든 연산은 레지스터를 필요로 한다. 입출력 또한 마찬가지로 레지스터를 적극 활용한다. 

- 입출력은 다음과 같은 과정을 거친다.

 

▶ 입력장치를 통해 입력값이 시리얼 통신 인터페이스를 통해 컴퓨터에 들어온다.

▶ 컴퓨터에 들어온 입력값은 INPR(Input Register)에 저장된다. 

▶ INPR에 데이터가 적재되면 FGI라는 플래그가 활성화 되면서 Accumulator에 전달된다. 

▶ 연산의 결과값이 Accumulator에 다시 적재되고 OUTR(Out Register)에 전달된다. 

▶ Receiver 인터페이스를 통해 해당 결과값이 출력 장치를 통해 출력된다. 

 

 

 

b) 문제점 

- 사용자가 입력장치를 통해 무엇인가 컴퓨터에 입력하는 속도에 비해, 컴퓨터의 처리속도가 너무 빠르다.

- 사용자의 시점에서는 몇초의 시간동안 입력장치를 통해 입력값을 입력한다. 

- 그러나 밀리sec 또는 마이크로sec 단위로 처리하는 컴퓨터에게는 몇초는 엄청나게 긴 시간이다.  

- 이처럼, 컴퓨터의 내부 처리 프로세스와 입출력 장치 간의 속도차이로 인해 비효율이 발생한다. 

- 이를 해결하기 위한 방법이 인터럽트다. 

 


 2. 인터럽트(Interrupt)

- 인터럽트는 OS 포스팅에서 배운 개념이다. 

- 인터럽트는 어떤 이벤트 또는 오류가 컴퓨터 내부적으로 발생했을 때, CPU에게 이를 처리하라고 알리는 기능이다. 

- 그렇다면 입출력 문제를 인터럽트를 통해 어떻게 해결하는지 알아보자.

 

a) 프로그램 제어 전송 방식

- 위에서 설명한 입출력 과정에서 FGI라는 플래그를 활용한 것을 확인할 수 있다. 

- FGI 플래그를 활용한 입출력 통신을 프로그램 제어 전송 방식이라고 한다. 

- 이 방법은 앞서 설명한 속도차이로 인한 비효율이 발생한다는 문제점을 가지고 있다. 

 

b) IEN(Interrupt Enable Flip-Flop)

- 위에서 설명한 프로그램 제어 전송 방식의 문제를 해결하기 위해서 사용하는 방식이다. 

- CPU에게 interrupt를 보낼 수 있는 플립플롭을 사용하는 것이다. 

- 다음과 같은 과정을 거친다. 

 

▶ 입력을 받는 와중에는 FGI(플래그)를 확인하지 않는다.

▶ 입력을 받는 중에 CPU는 다른 일을 처리한다 (다른 프로그램을 돌린다)  

▶ 입력이 완료되어 FGI가 Set 상태로 변하면, CPU에게 인터럽트를 날린다. 

▶ Interrupt를 받은 CPU는 수행중인 작업을 일시정지한다. 

▶ FGI에 적재된 데이터를 확인하고 입출력 작업을 완료한다. 

▶ CPU는 일시정지 했던 작업을 재실행 한다. 

 

 

c) 인터럽트 발생 사이클 예시

- 간단하게 설명하자면 다음과 같다. 

- 인터럽트가 발생한다.

- CPU는 수행중인 작업을 멈추고, 어디까지 작업을 진행했는지 기록한다. 

- CPU는 발생한 인터럽트를 처리한다.

- CPU는 이전에 진행중이던 작업을 멈춘 부분부터 다시 작업을 이어나간다. 

클릭하면 확대됩니다.

 

댓글