본문 바로가기

Hop the wag during working

I/O control

I/O control의 방법은 크게 memory-mapped I/OI/O mapped I/O(port I/O, port-mapped I/O 또는 PMIO)로 나뉘어진다.

이것은 주변장치(Peripherals)인 In/Output device들을 cpu에 어떻게 연결되어있느냐에 따라 나누어진다.

우선 memory-mapped I/O는 메모리와 주변장치가 같은 버스에 연결된 것으로 load, store의 명령을 가지고 메모리에 접근하듯이 IO device에도 접근이 가능토록한 것이다.
예를 들면 32bit cpu에 1MB의 memory가 연결되어있다고 했을 때 32bit bus는 4GB의 address영역을 가지게 되는데 1MB의 영역을 제외한 나머지 address영역은 비어있게 된다. 이렇게 비어있는 address영역에 IO device를 할당하여 사용하는 것이 바로 memory-mapped I/O인 것이다.

이에 반해 I/O mapped I/O는 메모리영역과 IO device의 bus를 나누어 설계한 것으로
inp/outp, inb/outb와 같이 IO device에 접근하기 위한 instruction이 따로 존재하는 것이다.
즉, memory영역의 0x0번지와 I/O영역 0x0번지가 따로 존재한다는 의미이다.

memory-mapped I/O경우 RISC cpu의 이점과 같이 instruction을 줄일수 있고 cpu의 면적도 작아지므로 단가도 낯출 수 있어 embedded system에 적합하다. 허나 memory와 IO device간의 특성상 접근시간이 틀리다는 문제점이 있다.
또한 bus width가 작은 cpu의 경우 address영역이 메모리와 주변장치까지 넣기에 부족할 경우가 발생할 수 있다.

I/O mapped I/O의 경우 memory와 IO device의 영역이 분리되어 있으므로 비교적 넓은 address공간을 사용할 수 있다.


ARM과 같은 embedded cpu의 경우 memory-mapped I/O를 사용하며
Intel의 i386계열의 cpu는 I/O mapped I/O architecture를 사용한다.

출처 : 내 머리..-_ -훗...