본문 바로가기

하드웨어

Segment:Offset


컴퓨터의 모든 것은 BUS라고 불리는 일련의 전선을 통해 연결되어 있다. RAM으로 연결
된 BUS는 16비트이다. 그래서 프로세스가 RAM에 자료를 쓸 필요가 있을 때 BUS를 통해 16비
트 로케이션을 보낸다. 이전에는 컴퓨터가 가질 수 있는 메모리에 한계가 있었다. 그러나
이 한계를 극복하기 위해 디자이너들은 20비트를 BUS를 통해 전달할 수 있는 방법을 고안해
냈다.
그래서 1MB의 메모리를 허용함으로써 메모리는 Segment라고 불리는 바이트의 집합으로
분리되었다. 그리고 그 세그먼트 내에 Offset 번호를 지정함으로써 메모리에 접근하게 되었
다. 그래서 만약 프로세서가 어떤 데이터에 접근하고자 한다면 먼저 세그먼트 번호를 보내
며, Offset 번호가 뒤따른다. 예를 들어, 프로세서가 1234:4321(segment:offset)의 리퀘스
트를 보내면 RAM은 세그먼트 번호 1234에 있는 4321 바이트를 보낸다. 다음 표를 보자.
+--+--+--+--+--+
5 | | | | | |
+--+--+--+--+--+
4 | | |* | | |
Y 축 +--+--+--+--+--+
(segment) 3 | | | | | |
+--+--+--+--+--+
2 | | | | | |
+--+--+--+--+--+
1 | | | | | |
+--+--+--+--+--+
1 2 3 4 5
X 축(offset)
위의 표에서 *는 4:3에 위치해 있다. 물리적 주소(physical address)를 구하기 위해서는 다
음과 같이 하면 된다.
Segment x 10h(여기서 h는 이 수가 16진수라는 것을 가르킴) + offset = 물리적 주소
예를 들어, 1234:4321에서 물리적 주소는 다음과 같다.
1234 x 10h + 4321 = 16661