시스템버스, I/O 및인터럽트(2)
1. I/O 장치의 접속 및 제어
컴퓨터 시스템에서 I/O 장치들은 CPU와 직접 접속되지 않으며, I/O 제어기(I/O controller) 라는 인터페이스 장치를 통해 시스템 버스에 연결됩니다. 이는 다음과 같은 여러 이유 때문입니다.
- 다양한 제어 방식 및 CPU의 한계
- "I/O 장치들은 종류에 따라 제어 방법이 서로 다르며, 그러한 제어 회로들을 CPU 내부에 모두 포함시키는 것이 불가능하기 때문에 CPU가 그들을 직접 제어할 수가 없음."
- 속도 차이
- "I/O 장치들의 데이터 전송 속도가 CPU의 데이터 처리 속도에 비하여 훨씬 더 느리고 속도가 서로 다르기 때문에, 고속의 시스템 버스와 I/O 장치들 사이에 직접 데이터를 교환하는 것은 불가능함."
- 데이터 형식 불일치
- "I/O 장치들과 CPU가 사용하는 데이터 형식의 길이가 서로 다른 경우가 많음."
I/O 제어기의 주요 기능
I/O 제어기는 이러한 문제들을 해결하며 다음과 같은 핵심 기능을 수행합니다:
- I/O 장치의 제어와 타이밍 조정
- CPU와의 통신 담당
- I/O 장치와의 통신 담당
- 데이터 버퍼링(data buffering) 기능 수행
- 오류 검출
I/O 제어기의 내부 구성
I/O 제어기는 일반적으로 상태/제어 레지스터 와 데이터 레지스터 를 포함합니다.
- 상태/제어 레지스터: I/O 장치의 상태, 오류 검사 결과, 그리고 CPU가 보낸 I/O 명령 단어를 저장합니다. (내부적으로 두 개의 레지스터로 구성되지만 주소는 하나만 지정)
- 상태 레지스터: I/O 장치의 상태 및 오류 검사 결과를 나타내는 비트들로 구성 (CPU가 읽기 동작 시 사용)
- 제어 레지스터: CPU가 보낸 I/O 명령 단어를 저장 (CPU가 쓰기 동작 시 사용)
- 데이터 레지스터: I/O 장치와 CPU 간에 실 제 데이터가 전송되는 경로. 데이터 블록 전체를 한꺼번에 전송받아 처리할 수 있도록 '데이터 버퍼(data buffer)'로 대체될 수 있음
프로그램을 이용한 I/O (programmed I/O)
이는 CPU가 I/O 장치의 상태를 반복적으로 검사(폴링)하면서 I/O 동작을 처리하는 방식입니다.
- 장점: 간단하며, 별도의 하드웨어가 필요하지 않습니다.
- 단점: "CPU가 I/O 동작에 직접 관여해야 하므로, 그 동안에 다른 일을 하지 못함."
I/O 주소지정(I/O addressing) 방법
I/O 제어기 내의 레지스터들(데이터 레지스터, 상태/제어 레지스터)에 주소를 할당하는 방식은 크게 두 가지로 나뉩니다.
기억장치-사상 I/O (memory-mapped I/O)
- 개념: "기억장치 주소 영역의 일부분을 I/O 제어기 내의 레지스터들의 주소로 할당하는 방식."
- 특징: 프로그래밍에서 LOAD, STORE와 같은 기억장치 관련 명령어를 I/O 장치 제어에도 사용 가능. 별도의 I/O 제어 신호가 필요 없음.
- 장점: "프로그래밍이 용이함 (사용 가능한 명령어들이 다양함)."
- 단점: "기억장치 주소 공간이 감소함 (절반)."
분리형 I/O (isolated-I/O)
- 개념: "I/O 장치 주소공간을 기억장치 주소 공간과는 별도로 할당하는 방식."
- 특징: IN, OUT과 같은 별도의 I/O 명령어와 I/O 읽기/쓰기 신호가 필요합니다.
- 장점: "I/O 주소공간으로 인하여 기억장치 주소 공간이 줄어들지 않음."
- 단점: "I/O 제어를 위해 I/O 명령어들만 이용할 수 있으므로, 프로그래밍이 불편함."
2. 인터럽트를 이용한 I/O
**인터럽트-구동 I/O(interrupt-driven I/O)**는 "인터럽트 메커니즘을 이용함으로써, I/O 동작이 진행되는 동안에 CPU가 다른 작업을 처리할 수 있도록 하는 방식"입니다. 이는 프로그램된 I/O 방식의 단점(CPU가 I/O 작업에 묶이는 문제)을 보완합니다.