"메모리 맵 입출력"의 두 판 사이의 차이

잔글
편집 요약 없음
잔글 (주소 버스라는 말은 쓰입니다. 국어사전에도 나온 말입니다.)
잔글
{{다른 뜻 설명|입출력 포트에 대한 일반적인 의미를 알아 보려면 [[컴퓨터 포트 (하드웨어)]]를 참조하십시오.}}
'''메모리 맵 입출력'''(Memory-mapped I/O, (MMIO, 메모리 매핑 입출력)'''과 '''포트 입출력'''은 [[컴퓨터]] 안의 [[중앙 처리 장치|CPU]]와 [[주변 장치]] 사이에서 [[입출력]]을 수행하는 두 가지의 상호 보완적인 방법이다. 또, 보통 [[메인프레임 컴퓨터]]에서 보통 채널이라고 불리는 입출력만 전담하는 프로세서를 사용하는 방법도 있다. 이러한 전담 프로세서는 자신만의 명령어를 가지고 이를 수행한다.
 
Memory-mapped메모리 맵 I/O입출력([[메모리 매핑 파일]] 입출력과 혼동하지 말 것.) 메모리와 입출력 장치 접근을 위해, 같은 [[주소 버스]]를 이용한다. 그리고 메모리에 접근하기 위한 CPU 명령어는 장치에 접근하는 데에도 쓰인다. 입출력 장치를 처리하려면 CPU의 주소 공간 중 일부가 입출력을 위해 할당되어야 하는데, 이렇게 할당하는 것은 일시적일 수도 있고 ([[코모도어 64]] 컴퓨터는 입출력 장치와 일반적인 메모리를 [[뱅크 스위칭|뱅크 스위치]]할 수 있었다.), 아니면 영구적일 수도 있다. 각 입출력 장치는 CPU의 주소 버스를 감시하고 있다가, CPU가 장치를 위해 할당한 메모리 공간에 접근하면 이에 반응를 보낸다. 그리고 [[데이터 버스]]를 의도한 장치의 [[하드웨어 레지스터]]에 연결해 준다.
 
포트 매핑 입출력은 입출력을 수행하기 위해 특별히 고안된 CPU 명령어를 사용한다. 이 방식은 보통 [[인텔 마이크로 프로세서|인텔 마이크로 프로세서들]]에서 구현된다. 인텔 프로세서에는 IN과 OUT이라는 명령어가 있는데, 이것은 입출력 장치에 1 바이트를 읽고 쓰기 위한 것이다. 또한 입출력 장치는 일반적인 메모리 공간과 별도로, 독립된 주소 공간을 가진다. 이러한 것은 CPU의 물리적 인터페이스에서, 특별히 준비된 입출력 핀을 이용해서 구현되거나, 아니면 입출력 전담으로 쓰이는 [[컴퓨터 버스|버스]]를 이용해서 구현된다.
 
한 장치의 [[DMA]] (Direct Memory Access)는 그러한 CPU와 장치 사이의 통신 방식에 영향을 받지 않는다. 특히 메모리 매핑에맵에 영향을 받지 않는다. DMA가 CPU를 통하지 않고, 메모리와 장치 사이에 직접 통신하기 때문이다.
 
[[하드웨어 인터럽트]]는 CPU와 주변 장치 사이에 통신을 하는 또 하나의 방법이다. 하지만, 여러 이유로 조금 다르게 취급된다. 앞서 살펴본 방법과 달리, 이 방식은 장치가 요청을 하며 한 방향으로만 통신한다. 다시 말해, 정보가 장치로부터 CPU로만 흐른다는 것이다. 마지막으로 각 인터럽트 라인은, "인터럽트가 발생했다"라는 식으로 고정된 의미를 갖는 단 한 [[비트]]의 정보만을 가지게 된다.
 
== 두 입출력 방식의 상대적인 장점들 ==
포트 매핑 입출력을 사용할 때 얻을 수 있는 가장 큰 장점은 어드레싱 능력이 제한된 CPU를 사용할 때 나타난다. 포트 매핑 입출력이 입출력 접근을 메모리 접근과 분리하기 때문에 메모리용으로 주소 영역 전체를 사용할 수 있다. 또다른 장점은 [[어셈블리어]]로 된 소스 목록을 볼 때, 언제 입출력이 수행되는지를 알아보기가 쉽다. 이는 바로 입출력용으로만 쓰는 명령어를 써서 입출력을 수행하기 때문이다.
 
메모리 매핑 입출력을 사용하는 장점은, 포트 입출력을 구현할 때 필요한 부수적인 복잡성이 없어지기 때문에, CPU는 내부 로직이 덜 필요하고, 그러므로 더 저렴하고, 더 빠르고, 더 쉽게 CPU를 만들 수 있다는 것이다. 바로 이 점은 [[RISC]]가 추구하는 바와 그 노선을 따르는 것이고, 이런 방식은 [[임베디드 시스템]]을 구현할 때 장점으로 작용한다. [[16비트]] CPU 구조가 없어지고, [[32비트]]와 [[64비트]] 구조로 대치되어 감에 따라, 입출력 장치를 위해 메모리 맵 일부를 확보해 놓는 것은 더 이상 문제가 되지 않는다.{{출처|날짜=2007년 10월}} <!-- 하위 호환성은 어떨까?... 문제가 되지 않겠는가? --> 그리고 장치를 어드레싱하기 위해서 일반적인 메모리 명령어를 사용한다는 것은 메모리뿐 아니라 입출력을 위해서도 모든 CPU 어드레싱 모드가 다 지원된다는 것을 의미한다.
 
하지만 메모리 매핑 입출력은 주소와 데이터 버스를 무척 많이 사용하게 된다. 그래서 보통 메인 메모리에 접근하는 것보다 매핑된 장치에 접근하는 것이 더 느리다. 반면, 포트 매핑 입출력은 입출력용으로 할당된 버스를 사용할 경우 느리지 않다.
 
== 예 ==
 
== 참고 문서 ==
* [[mmap]], 다만 메모리 매핑 입출력과 혼동하지 말 것.
* 포트 매핑 입출력을 사용한 초창기 컴퓨터들.
** [[PDP-8]]
** [[Data데이터 General제너럴 Nova노바|노바]]
* [[PDP-11]], 메모리 매핑 입출력을 사용하는 초창기 컴퓨터 구조의 예
** [[유니버스]], PDP-11이 사용하는 입출력만을 전담하는 버스
* [http://www.cs.nmsu.edu/~pfeiffer/classes/473/notes/io.html 컴퓨터 입출력에 대한 대학교 강의 노트]