본문 바로가기
Computer Science

[Operating System] Memory-mapped I/O Maps

by Henry Cho 2022. 5. 3.
728x90

Memory-mapped I/O Maps


포스트 난이도: HOO_Junior

 

[Notice] 포스트 난이도에 대한 설명

안녕하세요, HOOAI의 Henry입니다. Bro들의 질문에 대한 내용을 우선적으로 포스팅이 되다 보니 각각의 포스트에 대한 난이도가 달라서 난이도에 대한 부분을 작성하면 좋겠다는 의견을 들었습니다

whoishoo.tistory.com


 

# I/O Devices

I/O devices라고 하면 컴퓨팅에서 입출력과 관련 있는 디바이스들을 의미한다.

여러 종류의 디바이스들이 있지만 대표적으로 Block devices와 Character devices가 있다.


# Memory-mapped I/O Maps

Direct I/O라고 불리는 I/O mapped I/O와 달리 Memory-mapped I/O maps은 하나의 통일된 address space를 가지고 있다.

한마디로 MMIO(Memory-mapped I/O maps) I/O device를 Access 할 때 입출력과 메모리 공간을 별도로 분리하지 않고 하나의 메모리 공간을 사용한다는 것이다.

결과적으로 입출력 장치의 메모리나 register control를 메모리로 취급하여 address space에서 일부를 차지하게 된다.

# MMIO 장점

MMIO 방식을 취하게 되면 입출력 디바이스의 control registers들을 C나 C++로 구현이 가능하다.

C나 C++언어를 가지고 해당 부분의 프로그램을 작성할 수 있다는 것이다.

또한 MMIO의 장점은 별도의 시스템 보안을 필요로 하지 않는다.

왜냐하면 하나의 통일된 메모리로 관리가 이루어지다 보니 별도의 보안과 같은 유지관리 목적의 필요성이 없는 것이다.

Control registers들은 메모리에 저장되어 있으며, Virtual address space로도 포함이 된다.

마지막으로 모든 instructions들은 메모리에 있는 참조 control registers를 사용하고 참조하게 된다.

결과적으로 MMIO CPU내에서 필요한 내부 로직이 적기 때문에 임베디드 시스템에서 최적화된 효율성을 나타낸다.

MMIO는 RISC와 비슷한 방식을 추구한다고 볼 수 있다.


# MMIO 단점

MMIO에는 장점만을 가지고 있지는 않다.

CISC를 아직도 사용하는 이유가 있듯이 MMIO도 항상 좋은 점만을 가지고 있지는 않다.

예를 들면, MMIO는 결과적으로 주소와 데이터를 전달하는 BUS를 많이 사용하게 된다.

왜냐하면 I/O devices들의 control registers를 참조하기 위해서는 address space에 접근해야 하기 때문이다.

이것을 보고 multiple buses을 이용한다고도 하는데, 결과적으로 속도가 느려질 수밖에 없다.

반면에 포트 맵 입출력의 경우는 별도의 입출력용 BUS가 존재하기에 속도 문제가 없다.

한마디로 MMIO의 BUS는 여러가지의 데이터를 전달하는 역할을 수행하기에 속도가 느리지만 포트 맵 입출력의 경우에는 별도의 전용 BUS가 있기에 속도가 느리지 않다는 것이다.

또한 caching 문제도 발생할 수 있기 때문에 이를 방지할 수 있는 control registers가 필요하다.

예를 들어 disable caching이 발생했을 때 reference 할 control registers가 MMIO에는 필요하다.


 

728x90

댓글