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는 이전에 진행중이던 작업을 멈춘 부분부터 다시 작업을 이어나간다.
'컴퓨터공학기초 개념 > 컴퓨터구조' 카테고리의 다른 글
21. 컴퓨터 구조 - 소프트웨어 구조 (0) | 2021.08.17 |
---|---|
20. 컴퓨터구조 - 프로그램과 프로그래밍 언어 (0) | 2021.08.17 |
18. CPU 내부구조 - 명령어와 주소지정방식 (0) | 2021.08.12 |
17. CPU 내부구조 - 마이크로 연산과 ALU (0) | 2021.08.12 |
16. CPU 내부구조 - CPU 설계방식 (0) | 2021.08.11 |
댓글