본문 바로가기
프로그래밍/OS

포트 I/O

by 사악신 2014. 4. 18.


포트 I/O 에 대한 내용이 자세하지 않아 여기저기 자료를 찾아보았습니다. 아래는 시스템 버스(어드레스 버스, 컨트롤 버스, 데이터 버스) 를 나타낸 그림입니다.




보시면 아시겠지만 I/O 어드레스가 별도 존재합니다. 입출력 장치의 컨트롤러는 시스템 버스와 연결되는데 이때 메모리 영역처럼 고유한 주소를 가지게되며 이를 I/O 어드레스라 부릅니다.(메모리 어드레스와 구분해야합니다.)




예를 들어 Port I/O 에서 0x60, 0x64 번지의 경우 키보드와 관련되지만... 메모리(램) 에서 해당 번지는 전혀 다른 공간에 위치하고 있습니다. 이와 같이 분리된 형태를 Port I/O 라고 부르며 인텔 프로세서들이 주로 사용하는 방식입니다. 반면, 메모리의 특정 공간에 I/O 주소를 매핑하여 사용하는 방식(I/O 어드레스가 가리키는 곳과 메모리 어드레스가 가리키는 곳이 동일함)을 memory mapped I/O 라고 부르며 과거 매킨토시에서 사용한 모토로라의 프로세서 및 RISC 칩에서 사용하는 방식입니다.


Port I/O

- I/O 와 Memory 가 분리되어있어 전체 메모리를 사용할 수 있다.(최근 메모리 용량이 급증하며 큰 장점은 아니다.)

- I/O 어드레스에 접근할 수 있는 별도 어셈블리 명령어가 있어(IN, OUT), 언제 I/O 가 발생하는지 소스 파악이 용이하다.

- 별도 할당된 버스를 사용하여 빠른 편이다.


Memory mapped I/O

- 단순한 구조를 가진다.

- 임베디드 시스템 구현시 용이하다.(저렴하고 쉽다)

- 주소와 데이터 버스를 많이 사용하게 되어, 매핑된 장치에 접근하는 속도가 느리다.


다음은 일반적으로 알려져있는 포트들이며 IN/OUT 명령어로 해당 주소로 접근 가능합니다.


참고: http://wiki.osdev.org/I/O_Ports



반응형

'프로그래밍 > OS' 카테고리의 다른 글

FPC 로 OS 커널 만들기... - 3 -  (0) 2014.04.30
A20 게이트  (0) 2014.04.20
포트 I/O  (0) 2014.04.18
x86 CPU 메모리맵  (0) 2014.04.17
FPC 로 OS 커널 만들기... - 2 -  (0) 2014.04.11
FPC 로 OS 커널 만들기... - 1 -  (1) 2014.04.09

댓글0