2008년 7월 10일 목요일

Segmentation

프로세스 내의 모든 다른 종류의 정보는 세그먼트(segment)라고 불리는 가변 크기의 '논리' 메모리 장치로 나누어진다. 세그먼트란 동일한 종류의 정보를 포함하고 있는 한 세트의 논리 어드레스이다. 세그먼트 어드레스는 0에서 시작하는 논리 어드레스 이며, 세그먼트의 베이스 어드레스를 가리키는 세그먼트 번호와 실제 물리 메모리 어드레스를 정의하는 세그먼트 오프셋으로 구성되어 있다. 세그먼트들은 독립적으로 보호된다. 이는 세그먼트들이 공유(다른 프로세스가 그 세그먼트에 접근할 수 있는곳, 읽기 전용, 읽기/쓰기와 같은 접근 속성을 할당받을 수 있다는 것을 의미한다.

대부분의 OS는 전형적으로 프로세스가 세그먼트 내에 5가지 종류의 정보들의 모두 또는 일부 조합을 가질 수 있도록 해준다.
▶ 텍스트(코드) 세그먼트, 데이터 세그먼트, bss(심벌에 의해 시작되는 블럭) 세그먼트, 스택 세그먼트, 힙 세그먼트

● 텍스트(text) 세그먼트 : 소스 코드를 포함하고 있는 메모리 공간
● 데이터(data) 세그먼트 : 소스 코드의 초기화 변수(데이터)를 포함하고 있는 메모리 공간
● bss 세그먼트 : 소스 코드의 초기화 되지 않은 변수(데이터)를 포함하고 있는 정적으로 할당된 메모리 공간
● 스택(stack) 세그먼트 : LIFP(last in, first out)큐로 구조화된 메모리의 일부이다.
● 힙(heap) 세그먼트 : 런타인시 블록 단위로 할당될 수 있는 메모리 영역, 보통 메모리 구역의 자유로운 링크 리스트로 구성

※ 데이터, 텍스트, bss 세그먼트들은 모두 컴파일시에 동일한 크기로 고정되며, 정적 세그먼트와 같다. 이 세가지 세그먼트들은 실행 가능한 파일의 일부이다. 한편 스택과 힙 세그먼트들은 컴파일시 고정되지 않으며, 런타임시에 그 크기가 변경 될수 있다.



댓글 없음: