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

위키백과, 우리 모두의 백과사전.
내용 삭제됨 내용 추가됨
잔글편집 요약 없음
6번째 줄: 6번째 줄:
포트 매핑 입출력을 사용할 때 얻을 수 있는 가장 큰 장점은 어드레싱 능력이 제한된 CPU를 사용할 때 나타난다. 포트 매핑 입출력이 입출력 접근을 메모리 접근과 분리하기 때문에 메모리용으로 주소 영역 전체를 사용할 수 있다. 또다른 장점은 [[어셈블리어]]로 된 소스 목록을 볼 때, 언제 입출력이 수행되는지를 알아보기가 쉽다. 이는 바로 입출력용으로만 쓰는 명령어를 써서 입출력을 수행하기 때문이다.
포트 매핑 입출력을 사용할 때 얻을 수 있는 가장 큰 장점은 어드레싱 능력이 제한된 CPU를 사용할 때 나타난다. 포트 매핑 입출력이 입출력 접근을 메모리 접근과 분리하기 때문에 메모리용으로 주소 영역 전체를 사용할 수 있다. 또다른 장점은 [[어셈블리어]]로 된 소스 목록을 볼 때, 언제 입출력이 수행되는지를 알아보기가 쉽다. 이는 바로 입출력용으로만 쓰는 명령어를 써서 입출력을 수행하기 때문이다.


메모리 매핑 입출력을 사용하는 장점은, 포트 입출력을 구현할 때 필요한 부수적인 복잡성이 없어지기 때문에, CPU는 내부 로직이 덜 필요하고, 그러므로 더 저렴하고, 더 빠르고, 더 쉽게 CPU를 만들 수 있다는 것이다. 바로 이 점은 [[RISC|reduced instruction set computing]] 추구하는 것과 그런 노선을 따르는 것이고, 이런 방식은 [[임베디드 시스템]]을 구현할 때 장점으로 작용한다. [[16비트]] CPU 구조가 없어지고, [[32비트]]와 [[64비트]] 구조로 대치되어 감에 따라, 입출력 장치를 위해 메모리 맵 일부를 확보해 놓는 것은 더 이상 문제가 되지 않는다.{{출처|날짜=2007년 10월}}<!-- 하위 호환성은 어떨까?... 문제가 되지 않겠는가? --> 그리고 장치를 어드레싱하기 위해서 일반적인 메모리 명령어를 사용한다는 것은 메모리뿐 아니라 입출력을 위해서도 모든 CPU 어드레싱 모드가 다 지원된다는 것을 의미한다.
메모리 매핑 입출력을 사용하는 장점은, 포트 입출력을 구현할 때 필요한 부수적인 복잡성이 없어지기 때문에, CPU는 내부 로직이 덜 필요하고, 그러므로 더 저렴하고, 더 빠르고, 더 쉽게 CPU를 만들 수 있다는 것이다. 바로 이 점은 [[RISC]] 추구하는 바와 노선을 따르는 것이고, 이런 방식은 [[임베디드 시스템]]을 구현할 때 장점으로 작용한다. [[16비트]] CPU 구조가 없어지고, [[32비트]]와 [[64비트]] 구조로 대치되어 감에 따라, 입출력 장치를 위해 메모리 맵 일부를 확보해 놓는 것은 더 이상 문제가 되지 않는다.{{출처|날짜=2007년 10월}} <!-- 하위 호환성은 어떨까?... 문제가 되지 않겠는가? --> 그리고 장치를 어드레싱하기 위해서 일반적인 메모리 명령어를 사용한다는 것은 메모리뿐 아니라 입출력을 위해서도 모든 CPU 어드레싱 모드가 다 지원된다는 것을 의미한다.


하지만 메모리 매핑 입출력은 어드레스와 데이터 버스를 무척 많이 사용하게 된다. 그래서 보통 메인 메모리에 접근하는 것보다 매핑된 장치에 접근하는 것이 더 느리다. 반면, 포트 매핑 입출력은 입출력용으로 할당된 버스를 사용할 경우 느리지 않다.
하지만 메모리 매핑 입출력은 어드레스와 데이터 버스를 무척 많이 사용하게 된다. 그래서 보통 메인 메모리에 접근하는 것보다 매핑된 장치에 접근하는 것이 더 느리다. 반면, 포트 매핑 입출력은 입출력용으로 할당된 버스를 사용할 경우 느리지 않다.

2008년 2월 19일 (화) 14:25 판

메모리 매핑 입출력(Memory-mapped I/O, MMIO)과 포트 입출력컴퓨터 안의 CPU주변 장치 사이에서 입출력을 수행하는 두 가지의 상호 보완적인 방법이다. 또, 보통 메인프레임 컴퓨터에서 보통 채널이라고 불리는 입출력만 전담하는 프로세서를 사용하는 방법도 있다. 이러한 전담 프로세서는 자신만의 명령어를 가지고 이를 수행한다.

두 입출력 방식의 상대적인 장점들

포트 매핑 입출력을 사용할 때 얻을 수 있는 가장 큰 장점은 어드레싱 능력이 제한된 CPU를 사용할 때 나타난다. 포트 매핑 입출력이 입출력 접근을 메모리 접근과 분리하기 때문에 메모리용으로 주소 영역 전체를 사용할 수 있다. 또다른 장점은 어셈블리어로 된 소스 목록을 볼 때, 언제 입출력이 수행되는지를 알아보기가 쉽다. 이는 바로 입출력용으로만 쓰는 명령어를 써서 입출력을 수행하기 때문이다.

메모리 매핑 입출력을 사용하는 장점은, 포트 입출력을 구현할 때 필요한 부수적인 복잡성이 없어지기 때문에, CPU는 내부 로직이 덜 필요하고, 그러므로 더 저렴하고, 더 빠르고, 더 쉽게 CPU를 만들 수 있다는 것이다. 바로 이 점은 RISC가 추구하는 바와 그 노선을 따르는 것이고, 이런 방식은 임베디드 시스템을 구현할 때 장점으로 작용한다. 16비트 CPU 구조가 없어지고, 32비트64비트 구조로 대치되어 감에 따라, 입출력 장치를 위해 메모리 맵 일부를 확보해 놓는 것은 더 이상 문제가 되지 않는다.[출처 필요] 그리고 장치를 어드레싱하기 위해서 일반적인 메모리 명령어를 사용한다는 것은 메모리뿐 아니라 입출력을 위해서도 모든 CPU 어드레싱 모드가 다 지원된다는 것을 의미한다.

하지만 메모리 매핑 입출력은 어드레스와 데이터 버스를 무척 많이 사용하게 된다. 그래서 보통 메인 메모리에 접근하는 것보다 매핑된 장치에 접근하는 것이 더 느리다. 반면, 포트 매핑 입출력은 입출력용으로 할당된 버스를 사용할 경우 느리지 않다.

불완전한 어드레스 디코딩

장치가 어드레스를 완전히 디코딩할 수도 있고, 아니면 불완전하게 디코딩할 수도 있다.

  • 완전히 디코딩을 할 경우 주소 버스의 모든 라인을 검사하게 되는데, CPU가 매핑되지 않은 메모리 영역에 접근하면 오픈 데이터 버스 상태를 야기한다.
  • 불완전한 디코딩, 혹은 부분 디코딩이라고 하는 방법은 주소 일부분을 검사하는, 더 간단하고 대체적으로 단순한 로직을 사용한다. 이러한 간단한 디코딩 회로는 장치가 여러 개의 다른 어드레스에 반응을 할 수 있게 하거나, 메모리 맵의 다른 곳들에 해당 장치의 가상본을 효과적으로 만들 수 있게 도와 준다. 이 때, 이 가상본들은 모두 똑같은 실제 장치를 가리키게 된다. 그러므로 보통은 이러한 방식을 쓴다고 하여 특별히 좋을 것은 없다. 다만, 디코더를 단순하게 만들 수 있다는 장점이 있다. 보통 디코딩하는 그 로직 자체는 프로그래밍으로 짤 수 있기 때문에, 시스템이 필요에 따라 메모리 맵을 다시 설정할 수 있다.

참고 문서