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

내용 삭제됨 내용 추가됨
JongAmPark (토론 | 기여)
편집 요약 없음
2번째 줄:
{{다른 뜻 설명|입출력 포트에 대한 일반적인 의미를 알아 보려면 [[컴퓨터 포트 (하드웨어)]]를 참조하십시오.}}
'''메모리 매핑 입출력'''(Memory-mapped I/O, MMIO)과 '''포트 입출력'''은 [[컴퓨터]] 안의 [[중앙 처리 장치|CPU]]와 [[주변 장치]] 사이에서 [[입출력]]을 수행하는 두 가지의 상호 보완적인 방법이다. 또, 보통 [[메인프레임 컴퓨터]]에서 보통 채널이라고 불리는 입출력만 전담하는 프로세서를 사용하는 방법도 있다. 이러한 전담 프로세서는 자신만의 명령어를 가지고 이를 수행한다.
 
Memory-mapped I/O ([[memory-mapped file]] I/O와 혼동하지 말기 바란다.)는 메모리와 I/O 디바이스를 억세스하기 위해, 같은 [[어드레스 버스]]를 이용한다. 그리고 메모리를 억세스하기 위한 CPU 인스트럭션을, 디바이스를 억세스하는데도 쓴다. I/O 디바이스를 처리해주기 위해서, CPU의 어드레스 공간중 일부가 I/O를 위해서 할당이 되어야만 하는데, 이렇게 할당하는 것은 일시적일 수도 있고 ( [[Commodore 64]] 컴퓨터는 I/O 디바이스와 일반적인 메모리를 [[뱅크 스위칭|뱅크 스위치]]할 수있었다.), 아니면 영구적일 수도 있다. 각 I/O 디바이스는 CPU의 어드레스 버스를 모니터하고 있다가, CPU가 디바이스용으로 할당된 메모리 공간을 억세스하면 거기에 반응를 보내준다. 그리고 [[데이터 버스]]를 의도한 디바이스의 [[하드웨어 레지스터]]에 연결해 준다.
 
Port-mapped I/O는 I/O를 수행하기 위해 특별히 고안된 CPU instruction을 사용한다. 이 방식은 보통 [[인텔 마이크로 프로세서들|Intel microprocessors]]에서 구현되어 있다. 인텔 프로세서에는 IN과 OUT이라는 명령어가 있는데, 이것은 I/O 디바이스에 1 byte를 읽고/쓰기 위한 것이다. 또한 I/O 디바이스는 일반적인 메모리 공간과 별도로, 독립된 어드레스 공간을 가진다. 이것의 구현은 CPU의 물리적 인터페이스에서, 특별히 준비된 "I/O" pin을 이용해서 구현되거나, 혹은 I/O 전담으로 쓰이는 [[computer bus|bus]]를 이용해서 구현된다.
 
한 디바이스의 [[direct memory access]] (DMA)는 그런 CPU와 디바이스간의 통신 방법에 영향을 받지 않는다. 특히 메모리 매핑에 영행을 받지 않는다. 이것은 DMA가 CPU를 통하지 않는, 메모리와 디바이스간의 직접적인 통신 방법이기때문이다.
 
[[하드웨어 인터럽트]]는 CPU와 주변 장치간에 통신을 하는 또 하나의 방법이다. 하지만, 이러저러한 이유로 좀 다르게 취급된다. 앞서 살펴본 방법과 달리, 이 방식은 디바이스가 요청을 하는 것이다. 그리고 단방향 통신이다. 즉 정보가 디바이스에서 CPU로만 흐른다는 것이다. 마지막으로 각 인터럽트 라인은, "인터럽트가 발생했다"라는 식으로 고정된 의미를 갖는 단 한 [[bit]]의 정보만을 가지게 된다.
 
== 두 입출력 방식의 상대적인 장점들 ==