- 기본적으로 컴퓨터는 CPU가 가장 중요하고 함께 Main Memory가 있어야한다.
- CPU가 동작하기 위해 필요한 data와 처리된 data의 결과를 출력할 수 있는 방법이 있어야한다.
- 이런것들을 처리하는 것이 입출력장치(I/O device)이다.
- 이런 입출력장치가 컴퓨터와 interface 되어서 동작할 수 있게하는 것이 Controller.
대표적인
Input장치 : 키보드 마우스, 카메라
Output장치 : monitor, 스피커
Input / ouput 장치 : network card, stroge(HDD, SSD)
이런 입출력 장치들은 특정한 interface를 통해 컴퓨터와 연결된다. interface들은 다양한 형태로 존재한다.
- 모니터 : HDMI, DP, DV, RGB port
- USB(Universal Serial Bus)가 나오게 된 동기는 기존의 컴퓨터에 여러가지 입출력 장치를 연결하는 방식(z.B. parallel 포트, serial포트, PS2(마우스, 키보드), ethernet(RJ45) 등 )다양한 것들을 통일해서 연결하자 해서 나오게 된 것이다.
Network(Etherenet, WIFI), SDcard, 임베디드 시스템 같은 경우는 SPI(Serial Parallel Interface)를 많이 쓴다.
기타 I^2C, I^2S(스피커, 마우스) 같은 것을 연결할 때 사용한다.
이런 다양한 입출력 장치가 있고 이것들을 연결하는 다양한 Protocol이 있다.
z.B.)
노트북 : touchpad, keyboard, camera, microphone, usb, network,
rasiberry pi : CPU와 함께 다양한 parallel들이 있고 메모리가 있어서 외부에 다양한 연결을 위해 Connector들이 있다.
이런것 들에 대한 Contorllor는 rasiberry pi 칩 내부에 있다. 이런것들을 사용하기 위해 Linux를 올리고 HDMI로 모니터, USB로 키보드 연결해서 하나의 computer를 구성한다.
CPU, Memory, I/O controller가 상호 연결 되어야한다.
BUS : 공유 통신 채널
- data 및 data 전송 동기화를 위한 parallel set of wires
- bottleneck(병목현상)이 발생할 수 있다.
물리적 요소에 의해 성능이 제한된다.
- wires의 길이, 연결 수
최근, network와 switch를 사용한 고속 직렬 연결한다.
I/O Management
OS가 있는 system에서는 OS가 입출력 장치를 관리한다.
왜? OS는 HW를 관리하는 기능을 첫번째로 하고 있고 응용프로그램에 대해서 abstraction view를 보여주는 작업을 한다. 사용자는 편하게 사용할 수 있게하면서 HW는 resource가 제한되어 있기 때문에 효율적으로 동작할 수 있도록 설계해야한다.
Multiple programs share I/O resources
이런 resource를 여러개의 program에서 동시에 사용하게끔(공유) 동작을 한다.
- 적절히 protection 과 scheduling해야한다.
I/O causes asynchronous interrupts
이런 입출력 장치는 cpu가 의도해서 사용할 수 도 있지만 외부의 장치로 부터 급박하게 asynchronous하게 데이터가 도달 할 수 있다.
z.B.) 메일 어떤 일을 하는 와중에 mail이 왔다는 것을 interrupts 로 안다.
- cpu내의 exception처리와 유사하게 작동하게 되어있다.
I/O programming is fiddly
I/O program자체는 굉장히 성가시고 세세하다. detail한 protocal을 일일이 다 신경써서 구현해야한다.
운영체제가 없다면 우리가 직접 code를 짜서 동작시켜야한다. protection, shceduling..에 관한것 도
linux를 보면 입출력 장치를 위한 system call, open(어떤 장치를 쓰겠다), close(닫겠다.)
open된 장치에 대해서 file에 access하는 것 처럼 읽고 써야한다.
- OS는 입출력 장치 프로그램에 abstraction(추상화)를 제공합니다
그래서 편하게 쓸 수 있다.
I/O 장치는 I/O controller hardware에 의해 관리됩니다
I/O controler가 있어서 이쪽에 관련된 제어가 동작하게 끔 만들어져 있다.
실제로 I/O장치들이 computer와 연결되기 위해 hardware적으로 I/O contorller가 존재한다.
이것이 interface를 담당한다.
- I/O device가 붙어 있고 computer system에서 동작하게 되어 있다.
- I/O system자체가 주거나 받거나 하게 되어 있다.
- software와 함께 I/O가 동기화해서 동작하게 되어 있다.
이러한 I/O controller는 몇가지 register를 가지고 잇다.
UART(Universal asynchronous receiver/transmitter) 안에 controller, register가 있다.
Command registers
- 동작을 시키기 위해서 명령어
Stataus registers
명령어에 의한 동작이 문제 없이 잘 동작했는지 처리 결과
- CPU는 이것을 읽어서 상태 확인
Data registers
읽기/쓰기전용, 읽기전용, 쓰기전용 3가지를 따로 만든다.
- 장치로 data전송, 장치에서 data 전송
이런I/O device에 접근할때 software입장에서 보면 data가 있는 address에 접근해서 동작을 하는 것이엇다.
3개의 register들을 CPU가 acccess해야한다.
I/O Register Mapping
1. Memory Mapped I/O
– register는 Memory와 같은 공간에 지정됩니다.
– CPU가 제공한 주소가 decoder에 의해 선택되어 해당 register에 access한다.
– OS는 주소 변환 메커니즘(address translation mechanism)을 사용하여 kernel만 access 할 수 있도록한다.
/*원래 memory address space가 있고 cpu에 physical한 주소 라인 갯수가 32개면 4GiB의 주소공간을 가지나다. 즉 메모리의 바이트별로 주소를 할당할 수 있고 이게 2^32개 있어 0q번지 부터 ffffffff addr space가 있다.
이공간에 memeory를 배치해서 사용한다.*/??
2. I/O instruction
- 주소공간을 공유하는 것이 아니고, I/O를 위한 주소공간이 따로 있다.
별도의 공간의 0번지 부터 ffff까지 주소공간을 가지고 register들의 주소가 할당되어 있고 hardware적으로 특정한 hardware register에 접근 될 수 있게 끔 만들어 놓는다.
– I/O register에 access하기위한 별도의 명령어
– kernel mode에서만 실행할 수 있습니다
입출력 방식은 어떤 것이 있는지 본다
1. Polling programed I/O
2. Interrupt base
3. DMA base
1. Polling programed I/O
1GHz로 동작하는 micro processor가 있고 pipeline이 잘 되어있어서 한 clock에 load, store가 동작하게 만들어져있다.
1초에 10억개를 load 또는 stroe가능하고 한번에 word단위 (4byte)로 할 수 있다.
4 * 10^9 byte의 데이터를 읽을 수 있다. 4,000,000 KB/s == 4,000 MB/s == 4 GB/s, data rate를 가진다
data rate (다 제각각)
I/O 장치의 속도는 작게는1초에 0.01KB ~ 1,250,000 KB (지금은 더 큼)
Input
device가 processor만큼 빠른 data 전송 준비가되지 않았을 수 있습니다
output
processor가 data를 저장하는 속도만큼 device가 data를 받아 들일 준비가되지 않았습니다.
의 10Byte 정도의 속도를 갖는 것 부터 시작해서 속도가 빠른 입출력 장치는 cpu와 같이 동작하는데 아무 문제가 없다.
이런 장치의 대표적인 것이 keyborad다. 1초에 10타 이상 치는게 쉽지 않다. 이런 device경우 processor가 입출력하는 load store를 따라가지 못한다. 결국에 cpu는 빠르게 동작하지만 입력장치가 천천히 동작하기 때문에 따라갈 수 가 없다.
ouput도 마찬가지..
Polling!
– I/O 장치가 입출력 제어기의 status register정보 저장
– processor가 status register를 계속 검사하여 입출력 가능을 확인
– processor가 data를 읽거나 쓴다.
• 입력: 입력 장치 -> 메모리, 출력: 메모리 -> 출력 장치
.input장치에 있는 data를 main memory내 buffer로 이동
.output은 data를 main memory에 저장하고 그것을 다시 출력장치에 내보내는것이 출력
– 장점: 프로세서가 모든 제어 및 입출력 수행하기 때문에 간단하게 동작
– 단점: Polling 시에 많은 CPU 시간 낭비 (busy wait loop)
Interrupt
- interrupt contorller를 사용한다.
- 입출력을 필요로 할 경우에 입출력 장치가 interrupt contorller를 통해 processor에게 통보
: cpu에 interrupt선으로 hardware적으로 aseert시킨다.
- processor가 수행 프로그램을 잠시 멈추고 입출력을 수행
: context를 save! context switching! interrrupt service routin 실행!
- processor는 다시 원 프로그램 수행
: context를 restore
- interrupt의 resource는 interrupt mecahnism을 통해서 입출력하게 한다.
• 장점: processor는 실제 입출력 동작에만 관여(CPU 시간 낭비가 없음)
• 단점: interrupt contorller 필요
DMA(Direct Memory Access)
- 뜻 : 직접 메모리에 접근한다
- DMAC (DMA contoller) : 입출력 비서
processor가 DMAC(DMA contoller)에게 I/O 명령 전달 / 비서에게 지시!
• I/O장치 주소, memory주소, 전송 방향, 전송량
: ex ) 앞으로 x입출력 장치에서 데이터가 10byte가 들어올 건데 메모리 몇 번지 부터 쌓아놓거라 명령을 한다
• DMA contoller는 bus의 마스터 형태로 필요한 신호를 발생하여 I/O 수행
:두 가지가 버스의 master가 되어 공유하면서 동작할 수 있고, 이것을 조절하는 기능이 추가 되어야한다
• 입출력 끝나면 processor에게 알림
• 장점: processor는 입출력 명령의 전달 및 확인에만 관여(DMA contoller가 직접 check한다),
Interrupt 보다 CPU 시간을 절약
• 단점: DMA contoller 필요
'컴퓨터 구조' 카테고리의 다른 글
컴퓨터 구조 8장 - FP (0) | 2020.06.20 |
---|---|
컴퓨터 구조 14장 - Bus (0) | 2020.06.18 |
컴퓨터 구조 13장 - Parallel Processor (0) | 2020.06.17 |
컴퓨터구조 12장 - Memory 2 : Virtual Memory (0) | 2020.06.17 |
컴퓨터구조 12장 - Memory 2 : Associative Caches (1) | 2020.06.17 |