문제:
Memory Mapped I/O와 I/O Mapped I/O (Isolated I/O라고도 함)를 입출력 장치 영역, 명령어 및 하드웨어 관점에서 비교하여 설명하시오. (25점)
답변:
개념 및 목적
• Memory Mapped I/O: 메모리 맵드 I/O는 입출력 장치를 메모리 주소 공간에 배치하여 CPU가 메모리에 접근하듯이 장치와 상호작용하도록 하는 방식입니다. 메모리와 I/O 장치를 동일한 주소 공간에서 관리하여 별도의 입출력 명령어가 필요하지 않습니다.
• I/O Mapped I/O (Isolated I/O): I/O 맵드 I/O는 메모리와 I/O 장치를 분리된 주소 공간에 배치하여 각각 다른 주소 영역에서 관리하는 방식입니다. I/O 장치에 접근하기 위해서는 별도의 입출력 명령어를 사용합니다.
입출력 장치 영역
• Memory Mapped I/O: 메모리 주소 공간에 I/O 장치가 할당되기 때문에 메모리의 일부가 I/O 장치와 공유됩니다. 예를 들어, CPU의 메모리 주소 0x8000이 I/O 장치와 연결되면, 해당 주소로 접근하여 데이터를 읽거나 쓸 수 있습니다. 메모리 공간을 활용하므로 I/O 장치 수가 많아지면 메모리 공간이 줄어들 수 있습니다.
• I/O Mapped I/O: 메모리와 분리된 I/O 주소 공간을 사용하므로 메모리 공간과 I/O 주소 공간 간에 충돌이 발생하지 않습니다. 입출력 장치의 주소는 I/O 주소 공간 내에서만 유효하며, 메모리 주소 공간과는 독립적입니다. 따라서 입출력 장치가 메모리 공간을 점유하지 않으므로 많은 I/O 장치가 필요할 경우 유리합니다.
명령어
• Memory Mapped I/O: 일반 메모리 접근 명령어(LOAD, STORE)를 그대로 사용하여 I/O 장치에 접근합니다. 추가적인 I/O 명령어가 필요하지 않아 하드웨어 설계가 단순해질 수 있습니다.
• I/O Mapped I/O: 별도의 입출력 명령어(IN, OUT 등)를 사용하여 장치에 접근합니다. 이러한 명령어는 CPU 명령어 집합에 포함되어 있어, CPU는 메모리 접근 명령어와 I/O 접근 명령어를 구분하여 처리할 수 있습니다. 입출력 명령어를 위한 하드웨어가 별도로 필요하기 때문에 명령어 집합과 하드웨어가 약간 복잡해질 수 있습니다.
하드웨어 관점
• Memory Mapped I/O: CPU와 메모리, 그리고 I/O 장치가 동일한 주소 버스를 공유하므로, 추가적인 I/O 제어 회로가 필요하지 않습니다. 입출력 처리를 위해 메모리 버스와 데이터 버스의 일부를 사용하여 효율적입니다. 단, 메모리와 I/O가 동일한 주소 공간을 공유하기 때문에 메모리 충돌이 발생할 수 있어 주소를 신중하게 할당해야 합니다.
• I/O Mapped I/O: I/O 전용 주소 버스와 제어 신호가 필요하며, 이를 통해 CPU는 특정 주소 공간을 I/O 장치와 연결합니다. 메모리와 I/O의 분리로 인한 하드웨어 비용이 약간 증가할 수 있지만, 메모리 공간과는 독립적으로 I/O 장치와의 상호작용이 가능하여 더 많은 입출력 장치를 효율적으로 관리할 수 있습니다.
장단점 비교
• Memory Mapped I/O
• 장점: 입출력 장치에 접근할 때 별도의 I/O 명령어가 필요하지 않아 CPU가 메모리 접근을 통해 I/O 작업을 쉽게 수행할 수 있습니다. 메모리와 I/O가 동일한 주소 버스를 사용하므로 하드웨어가 단순해지고 개발이 용이해집니다.
• 단점: 메모리 주소 공간을 입출력 장치가 점유하므로, I/O 장치가 많아질 경우 사용할 수 있는 메모리 공간이 줄어듭니다. 대규모 시스템에서 메모리 충돌 가능성도 증가합니다.
• I/O Mapped I/O
• 장점: 메모리와 I/O가 독립적으로 관리되므로 많은 수의 I/O 장치를 효율적으로 관리할 수 있습니다. 메모리 주소 공간이 온전히 메모리만을 위해 사용될 수 있어 더 넓은 메모리 주소를 활용할 수 있습니다.
• 단점: I/O 명령어 집합과 별도의 제어 하드웨어가 필요하므로 하드웨어 설계가 복잡해질 수 있습니다.
개선점 및 전망
• 현대 시스템에서는 고속 입출력 처리를 위해 Direct Memory Access(DMA)와 Memory-mapped I/O의 장점을 결합하는 방식이 많이 사용되고 있습니다. 특히, 메모리 효율성을 높이기 위해 캐시 메모리와 함께 사용하여 메모리 버스를 통한 빠른 데이터 전송이 가능하도록 하고 있습니다. 반면에, I/O Mapped I/O는 소규모 임베디드 시스템과 같이 단순한 설계가 필요한 곳에서 여전히 많이 사용되고 있으며, 해당 분야에서의 성능 최적화 연구가 지속될 전망입니다.