컴퓨터시스템구조론 제 7 장 입력 / 출력 (Input/Output : I/O)
7.1 외부 장치들 (External Devices) I/O 모듈에 접속 종류 인간이 읽을 수 있는 장치 : 비디오 단말기, 프린터, 등 기계가 읽을 수 있는 장치 : 자기 디스크, 자기 테이프, 센서 (sensor), 구동장치 (actuator), 등 통신 장치 : 모뎀 (modem), 네트워크 인터페이스 카드 (NIC), 등
I/O 모듈 : 주변장치와 시스템 버스의 연결 주변장치 제어 및 통신 기능
외부장치 구성도 ( 교재 p 참조 ) z 제어신호 z 상태신호 z 데이터 신호 z 변환기 (Transducer) z 버퍼
7.2 I/O 모듈 I/O 모듈 (I/O Module) 의 필요성 주변장치 (peripheral device) 의 종류가 다양하다. 주변장치의 종류가 다양하며 운용방식도 제각각이다 전송되는 데이터 단위 ( 단어 길이 ) 가 서로 다르다 전송 속도가 서로 다르다 데이터의 형식 (format) 이 서로 다르다 주변장치들이 CPU 와 RAM 에 비하여 훨씬 더 느리다 결과적으로, 프로세서 및 주기억장치가 접속되는 시스템 버스와 주변장치 사이의 직접적인 통신은 불가능하며, 인터페이스를 위한 I/O 모듈이 필요하다.
I/O 모듈의 기능 제어 (control) 와 타이밍 (timing) 프로세서와의 통신 장치들과의 통신 : 상태정보, 데이터 전송 데이터 버퍼링 (data buffering) : 주기억장치나 프로세서에 비해 주변장치의 전송률은 매우 낮아 모듈내에 일시적으로 데이터를 저장하는 기능 오류 검출 (error detection) I/O 모듈 : I/O 채널 (channel), I/O 프로세서, I/O 제어기 (controller), 혹은 장치 제어기 (device controller) 라고도 함
I/O 동작의 처리순서 1. 프로세서가 I/O 모듈에게 장치의 상태를 검사하도록 요청한다 2. I/O 모듈이 상태를 알려준다 3. 만약 장치가 준비된 상태라면, 프로세서가 장치에게 데이터 전송을 요청한다 4. I/O 모듈이 외부장치로부터 데이터를 받는다 5. I/O 모듈이 프로세서로 데이터를 보내준다
I/O 모듈 기능 명령해석 (Command Decoding) : 제어버스를 통해 프로세서로부터 제어명령을 주고 받음 데이터 : 데이터 버스 이용, 데이터 교환 상태보고 (Status Reporting) 주변장치는 매우 느려 I/O 모듈의 상태 확인 필요 예 ) BUSY, READY 주소 인식 : I/O 장치도 주소를 가짐
I/O 모듈의 내부 조직도 ( 교재 참조 )
I/O 동작의 처리 기법 프로그램 I/O (Programmed I/O) 인터럽트 - 구동 I/O (Interrupt-driven I/O) 직접 기억장치 액세스 (Direct Memory Access : DMA)
7.3 프로그램 I/O 프로세서가 I/O 를 직접 제어하는 방식 동작 순서 프로세서가 I/O 장치의 상태를 검사하고, Read/Write 명령 및 데이터를 전송한 후, I/O 모듈이 동작을 완료할 때까지 ( 상태 검사를 반복하면서 ) 기다린다. [ 단점 ] 프로세서 시간이 낭비된다 (I/O 동작을 처리 하는 동안에 프로세서가 다른 일을 하지 못한다 )
I/O 명령 (I/O command) 프로세서는 I/O 모듈로 외부장치의 주소와 I/O 명령을 보낸다 I/O 명령의 종류 제어 (control) : 모듈이 해야 할 동작을 지정 검사 (test) : I/O 모듈과 주변장치의 상태 검사 [ 예 ] I/O 동작의 완료 여부, 오류 발생 여부 읽기 (read) : I/O 모듈에게 주변장치로부터 데이터를 읽어서 내부 버퍼에 저장하도록 명령, 이후 데이터를 시스템버스에 실음 쓰기 (write) : 데이터 버스로부터 데이터를 받아서 주변장치로 보내도록 명령
I/O 주소지정 (I/O addressing) 기억장치 - 사상 I/O (memory-mapped I/O) I/O 장치와 기억장치가 주소 공간을 공유한다. 기억장치 주소 공간의 감소 기억장치에 대한 읽기 / 쓰기와 같은 방법으로 I/O 를 액세스한다. I/O 를 위한 별도의 명령어가 필요하지 않다. 사용할 수 있는 명령어가 다양하므로 프로그래밍이 용이하다. 고립형 I/O 혹은 I/O- 사상 I/O (Isolated I/O 혹은 I/O-mapped I/O ) I/O 장치와 기억장치가 별도의 주소 공간을 가진다. I/O 와 기억장치는 별도의 선택 신호를 가져야 한다 [ 예 ] I/ORD 신호, I/OWR 신호 I/O 를 위한 별도의 명령어가 필요하다. 사용할 수 있는 명령어 종류가 제한된다.
I/O 주소지정 방식의 사용 예 10 비트 주소 : 1024 개 주소지정 가능 절반 512 개 : 기억장치 주소 절반 512 개 : I/O 주소로 사용 데이터 레지스터 상태 / 제어 레지스터 키보드로부터 데이터를 읽어 CPU 내의 AC 로 보내는 프로그램
7.4 인터럽트 - 구동 I/O 프로세서로부터 I/O 명령을 받은 I/O 모듈이 동작을 수행하는 동안, 프로세서가 다른 프로그램을 처리할 수 있도록 하는 방식 I/O 모듈은 I/O 명령 처리를 완료하였을 때 프로세서 에게 인터럽트 신호를 보내어 알리며, 그때 프로세서는 잠깐 이를 처리한 후, 다시 원래의 프로그램 수행을 계속한다.
인터럽트 - 구동 I/O 의 순서 ( 읽기 동작의 경우 ) 1. 프로세서가 I/O 모듈로 읽기 (read) 명령을 보낸다 2.I/O 모듈은 주변장치로부터 데이터를 읽는다. 그 동안 프로세서는 다른 일을 수행한다 3.I/O 모듈이 프로세서로 인터럽트 신호를 보낸다 4. 프로세서가 데이터를 요구한다 5.I/O 모듈이 데이터를 전송한다
인터럽트 처리 과정 I/O 모듈이 인터럽트를 요구했을 때, 프로세서는 1. 프로세서는 현재 실행중인 명령어의 실행을 완료한다 2. 인터럽트를 검사하고, 요구가 있다면 그 장치에게 확인 신호를 보낸다 3. 프로그램 상태 단어 (PSW) 와 프로그램 카운터 (PC) 내용을 스택 (stack) 에 저장 ( 스택포인터가 가리키는 번지에 저장 ) 한다 4. 인터럽트 처리 프로그램의 시작 주소를 프로그램 카운터에 적재한다 ( 인터럽트 서비스를 시작한다 )
인터럽트 처리 과정의 흐름도
인터럽트 프로그램 시작 주소
설계 요소들 ( 인터럽트를 요구한 I/O 모듈을 확인하기 위한 것 ) 많은 수의 I/O 장치가 있는 경우 인터럽트를 요구한 장치를 어떻게 찾을 것인가 ? 여러 장치들이 인터럽트를 요구했다면 어떤 것을 먼저 처리할 것인가 ? 방법 다수 인터럽트 선 (multiple interrupt lines) 소프트웨어 폴 (software poll) 데이지 체인 (daisy chain) 버스 중재 (bus arbitration)
다수 인터럽트 선을 이용하는 방법 I/O 모듈들이 각각 별도의 인터럽트 요구 선과 확인 선으로 접속되며, 각 요구 선은 우선 순위를 가진다. 가장 간단함
[ 장점 ] 하드웨어가 간단하다 [ 단점 ] 접속할 수 있는 장치의 수에 한계가 있다 버스 선이나 프로세서 핀 수에 한계가 있다
소프트웨어 폴 (software poll) 방식 프로세서가 어떤 모듈이 인터럽트를 요구했는지 순서대로 검사하며, 우선 순위는 검사 순서에 의해 결정된다
[ 장점 ] 별도의 하드웨어가 필요하지 않다 [ 단점 ] 검사하는데 시간이 오래 걸린다
데이지 체인 (Daisy Chain) 방식 시스템 구성 모든 I/O 모듈들이 하나의 인터럽트 요구 선을 공유한다 I/O 모듈들은 인터럽트 확인 신호를 이용하여 데이지 체인 형태로 연결된다 ( 프로세서와 가까운 모듈의 우선순위가 높다 ) 동작 원리 1. 한 개 ( 혹은 그 이상 ) 의 모듈이 인터럽트를 요구한다 2. 프로세서가 확인 신호를 보낸다 3. 인터럽트를 요구하지 않은 모듈은 옆의 다음 모듈로 통과시킨다 4. 인터럽트를 요구한 모듈은 데이터 버스를 통하여 인터럽트 벡터 (interrupt vector, I/O 모듈의 주소 또는 고유번호 ) 를 보낸다. 프로세서는 벡터를 이용하여 I/O 모듈을 구분한다
데이지 체인의 구성도
버스 중재 (Bus arbitration) 을 이용하는 방식 1.I/O 모듈은 먼저 버스 사용권을 얻은 다음에 인터럽트를 요구하여야 한다 2. 프로세서는 확인 신호를 보내어 응답한다 3.I/O 모듈은 벡터를 보낸다
7.5 직접 기억장치 액세스 (DMA : Direct Memory Access) 인터럽트 - 구동 방식과 프로그램 I/O 방식의 문제점 1. 프로세서가 장치를 검사하고 서비스하는 속도에 의하여 I/O 전송률이 제한된다 2. 프로세서가 I/O 전송을 위하여 많은 시간을 소모 한다. 이유 : 프로세서가 I/O 데이터 전송에 직접 개입 해야 하고, 전송되는 모든 데이터들이 프로세서를 경유해야 하기 때문 대량의 데이터 전송 시 유리함
DMA 의 기능 기억장치와 I/O 모듈 간의 데이터 전송을 별도의 하드웨어인 DMA 모듈 (DMA 제어기 ) 이 처리하며, 프로세서는 개입하지 않도록 하는 방식 I/O 동작을 DMA 모듈에게 일임 I/O 명령 후 프로세서는 다른 일을 함 DMA 모듈이 I/O 동작 일을 대신 처리해 줌 시스템 버스의 사용 문제 : CPU 와 DMA 기 사이 ( 사이클 스틸링 : Cycle Stealing) p.217 참조
DMA 의 동작 원리 데이터 전송이 필요할 때, 프로세서는 다음과 같은 정보가 포함된 명령을 DMA 모듈로 보낸다 : 동작의 종류 (Read/Write) 지정 I/O 장치의 주소 데이터가 읽혀지거나 쓰여질 기억장치의 시작 주소 전송될 데이터의 수 DMA 모듈이 한 번에 한 단어씩 데이터 전송 수행, 프로세서는 다른 일을 처리한다. DMA 모듈은 데이터 전송을 완료한 다음에, 프로세서로 인터럽트를 보낸다. 프로세서는 잠시 중지됨. 저장 불필요
명령어 사이클 동안의 DMA 및 CPU 중단점들
DMA 구성 방법 p.218~219 참조 기억장치 (Memory) 와 I/O 모듈 사이의 데이터 전송을 DMA 가 담당 한 단어 전송 시 1 차 ) DMA 와 I/O 모듈과의 통신 2 차 ) 기억장치와 DMA 모듈과의 통신
특징 a. 단일 - 버스, 분리식 DMA : 한 번의 데이터 전송을 위하여 버스를 두 번 사용 b. 단일 - 버스, 통합 DMA-I/O : 한 번의 데이터 전송을 위하여 버스를 한 번만 사용 c.I/O 버스 : DMA 모듈에 여러 I/O 장치들이 별도의 I/O 버스를 통하여 접속. 시스템 버스는 DMA 모듈이 기억장치와 데이터 교환 시에만 사용
7.6 I/O 채널과 프로세서 I/O 장치들이 점차 더 복잡하고 정교해지고 있다. [ 예 ] 3D graphics cards 프로세서가 I/O 모듈에게 전송을 명령하고, I/O 모듈이 전체 전송 동작을 담당한다. I/O 성능을 향상시키기 위하여 전용 프로세서를 사용 하게 되었다 I/O 채널 (I/O channel) 혹은 I/O 프로세서 (I/O 프로세서 ). I/O 채널은 DMA 개념이 확장된 것 이 프로세서는 별도의 지역 기억장치 (local memory) 를 가진다.
I/O 채널의 특성 선택기 채널 (Selector channel) : 접속된 여러 장치들 중의 하나를 선택하여 데이터 전송을 지원 ( 그림 (a)) 멀티플렉서 채널 (Multiplexor channel) : 동시에 여러 장치들의 전송을 지원 ( 그림 7.15 (b)) 바이트 멀티플렉서 : 전송률이 서로 다른 여러 개의 문자 I/O 장치들에 대한 바이트 단위의 동시 전송을 지원 블럭 멀티플렉서 : 고속 I/O 장치들의 블록 단위의 동시 전송을 지원