모든 입출력 장치들은 I/O Port를 거쳐야만 공유 메모리 영역을 사용 할 수있다.
그러나 모니터는 다른 입출력 장치와는 다르게 메모리와 직접 연결되어 사용된다.
이 말을 그림으로 표현하면 아래와 같다.
모니터는 가로 80자 세로 25줄을 표현한다.
총 : 2000개의 문자를 사용한다.
문자가 1Byte면 글자는 총 2KB가 된다.
그렇다고 모니터 전용 메모리 영역이 2KB는 아니다.
속성으로 2KB를 더가지며 총 4KB가 된다.
문자당 속성은 1Byte(8Bit)이며 배경색 4Bit와 전경색(글자색) 4Bit로 구성된다.
모니터 전용 메모리는 하나가 아니라 여러 개가 존재한다.
왜냐면 페이지 단위로 버퍼처럼 사용하기 위함이다.
I/O가 특정 메모리 영역을 전용으로 사용하는 것을
MMIO(Memory Mapped I/O)라 한다.
MMIO (Memory Mapped I/O)는 쉽게 설명하자면 특정 메모리 영역과 I/O가 하나가 된다고 생각하면 된다.
즉, 설정된 영역의 메모리 공간은 다른 의미로는 사용할 수 없으며 오직 연결된 I/O에서만 사용이 가능하다.
예를 들어 모니터가 MMIO 되어있으면 해당 메모리 영역에 내용은 별도의
모니터로 보내는 명령 없이 메모리에 있는 내용이 화면에 출력된다.
예제) MMIO 영역에 데이터 입력
콜솔 화면을 띄워보자(실행 – CMD)
C:\> DEBUG (엔터)
-EB800:0200 41 49 42 57 43 82 44 55 45 91 (엔터)
-Q(엔터)
[결과]
[해설]
E : 메모리 영역에 입력
B800 : 모니터 전용 메모리 영역
0200 : 200번째 문자 위치에서 시작
1번째 41 : 알파벳 A
2번째 49 : 4 = 배경색, 9 = 글자색
3번째 42 : 알파벳 B
4번째 57 : 5 = 배경색, 7 = 글자색
5번째 43 : 알파벳 C
6번째 82 : 8 = 배경색, 2 = 글자색
7번째 44 : 알파벳 D
8번째 55 : 5 = 배경색, 5 = 글자색
9번째 45 알파벳 E
10번째 91 : 9 = 배경색, 1 = 글자색
Q : 종료
위의 예제를 실행하면 결과와 같은 내용이 보여질 것이다.
이는 B800(모니터 전용 메모리 영역)에 데이터를 입력한 것이다.
메모리에 데이터를 넣었을 뿐 화면에 출력 하라는 명령은 하지 않았다.
그러나 입력이 되는 순간 화면에 나타나는 것을 확인할 수 있다.
다음으로 8번째 속성을 보면 배경색과 글자색이 동일한 값을 가지고 있다.
그러므로 화면에는 ‘D’ 라는 글자가 보이지 않는다.
이번 이야기는 개발하는데 큰영향을 가져오지는 않는다.
하지만 이런 부분도 존재 한다는 걸 알려주고 싶다.