#1. Programmed I/O
- 원하는 I/O가 완료되었는지 여부를 검사하기 위해 CPU가 상태 플래그를 계속 조사하여 I/O가 완료된 경우 MDR(MBR)과 AC 사이의 자료 전송을 CPU가 직접 처리하는 방식
- I/O 작업 시 CPU는 계속 I/O 작업에 관여해야 하기 때문에 다른 작업을 할 수 없음
- 입력의 완료를 알리기 위해 인터럽트가 필요 없는 대신 CPU가 지속적으로 입출력 완료 여부를 확인해야함
#2. Interrupt I/O
- 데이터를 전송할 준비가 되면 I/O 인터페이스가 컴퓨터에게 알려 입출력이 이루어짐
- I/O 인터페이스는 CPU에게 인터럽트 신호를 보내 입출력이 있음을 알림
- CPU가 지속적으로 Flag를 검사하지 않아도 되기 때문에 Pragrammed I/O보다 효율적
- CPU가 입력을 지시한 후 워드의 입력이 이루어지는 사이 다른 작업(타 프로그램 실행)이 이루어짐
#3. DMA(Directed Memory Access)
- 입출력 기기들이 CPU의 레지스터를 거치지 않고 직접 메모리를 엑세스하여 입출력 데이터 전송
- CPU는 I/O에 필요한 정보를 DMA 제어기에 알려 I/O 동작을 개시시킨 후, 다른 작업을 수행
- 입출력 자료 전송 시 CPU를 거치지 않기 때문에 CPU의 부담 없이 빠른 데이터 전송 가능
- DMA의 우선순위는 메노리 참조의 경우 중앙처리장치보다 상대적으로 높음
- 인터럽트 신호를 발생시켜 CPU에게 입출력 종료를 알림
- Cycle Steal 방식을 이용하여 데이터 전송
(CPU와 DMA 방식의 입출력 장치가 공통된 버스를 통해 주기억장치에 연결된 경우, 우선순위가 높은 입출력 채널이 접근 사이클을 먼저 사용하여 주기억장치에 접근하는 것 >> 작업 효율성 UP, CPU의 양보)
- CPU가 DMA 제어기로 보내는 정보
a. I/O 장치의 주소
b. 데이터가 있는 주기억장치의 시작주소
c. DMA를 시작시키는 명령
d. 입출력하고자 하는 자료의 양
e. 입력 또는 출력을 결정하는 명령
- DMA 구성요소
a. 인터페이스 회로 : CPU와 입출력장치 통신 담당
b. 주소 레지스터 및 주소라인 : 기억장치의 위치 지정을 위한 번지 기억 및 전송
c. 워드 카운트 레지스터 : 전송되어야 할 워드의 수 기억
d. 제어 레지스터 : 전송방식 결정
e. 데이터 레지스터 : 전송에 사용할 자료나 주소를 임시로 기억하는 버퍼 역할
- DMA 전송 절차
1. CPU가 DMA 제어기에 명령을 내림
2. DMA제어기가 CPU에게 버스 사용 요구 (= Bus Request)
3. CPU가 DMA 제어기에게 버스 사용 허가 (= Bus Grant)
4. DMA 제어기가 주기억장치에서 데이터를 읽어 디스크로 전송 (= Data Transfer)
5. 2~4번을 반복하다가 데이터 전송이 완료되면 인터럽트 신호 보냄
#4. Channel I/O
- I/O를 위한 특별 명령어를 I/O 프로세스에게 수행토록 하여 CPU 관여없이 주기억장치와 입출력장치 사이에서 입출력을 제어하는 입출력 전용 프로세서(IOP)
- 채널을 DMA 방법으로 입출력 수행 (= DMA 확장 개념)
- 채널 제어기는 채널 명령어로 작성된 채널 프로그램을 해독하고 실행하여 입출력 동작 처리
- CPU로부터 입출력 전송을 위한 명령어를 받으면 CPU와는 독립적으로 동작하여 입출력 완료
- 채널을 주기억장치에 기억되어 있는 채널 프로그램의 수행과 자료 전송을 위해 주기억장치 직접 접근
- I/O 장치는 제어장치를 통해 채널과 연결
- I/O 채널을 CPU의 I/O명령을 수행하지 않고 I/O 채널 내의 특수목적 명령을 수행함
- CPU와 인터럽트로 통신
- 채널의 종류
a. Selector Channel : 고속 입출력장치(자기디스크, 자기테이프, 자기드럼) 1개와 입출력하기위해 사용
b. Multiplexer Channel : 저속 입출력장치(카드리더, 프린터) 여러개를 동시에 제어하는 채널
c. Block Multiplexer Channel : 동식에 여러 개의 고속 입출력 장치 제어
#5. Isolated I/O
- 입출력 장치들이 입출력 버스를 통해 CPU와 연결되어 있는 경우
- 메모리는 따로 메모리 버스를 통해 연결
- 입출력은 입출력을 담당하는 명령어를 통해 실행/입출력버스를 통해 해당 장치의 지정, 데이터, 입출력 구분 제어값 전달
- 입출력 명령어가 명령어 집합에 추가되어 제어로직 복잡
- 입출력 버스를 장착하는데 추가비용
#6. Memory-mapped I/O
- CPU가 입출력 장치를 엑세스할 때, 입출력과 메모리의 주소공간을 공동 데이터버스, 주소버스, 제어버스 등으로 구분하지 않고 하나의 메모리 공간에 취급하여 배치하는 방식
- 입출력을 위한 명령어를 따로 사용않고, 메모리에 대한 명령어를 활용하여 입출력 수행
- 입출력 장치들은 각각 메모리의 한 번지를 할당받아 입출력 수행 > 메모리를 동적으로 사용 불가