본문 바로가기

Programming/Linux_Kernel

segment 와 paging 기법

x86 에서는 segment 라는 선형주소를 물리주소로 변환시켜주는 unit 을 사용합니다.

하지만 이기능이 linux 와 page 와 매우 유사하여 다소 혼동되는 부분이 있습니다.

이에대해 understanding the linux kernel 에서는 다음과 같이 기술하고 있습니다.


x68 마이크로 프로세서는 프로그래머가 app을 서브루틴이나 전역 데이터 영역, 지역데이터 영역같은 논리적인 부분으로 쪼갤 수 있도록 segmentation 이라는 기법을 지원한다. 그러나 리눅스는 이를 매우 제한적으로 사용한다. 


- segmentation 과 paging 은 둘 다 프로세스의 물리 주소 공간을 나누기 위해 사용됨.

- segmentation 은 각 프로세스에 다른 선형주소 공간을 할당

- paging 은 같은 선형 주소 공간을 다른 물리 주소 공간과 mapping


linux 가 segmentation 보다 paging 을 선호하는 이유


- 모든 프로세스가 동일한 segment register 값을 가지면, 즉 모든 프로세스가 동일한 선형주소 공간을 공유하면 메모리 관리가 더 간단해짐

-리눅스 설계의 목적 중 하나는 대중적인 다른 아키텍처와 호환하게 하는 것인데, ROCS 아키텍처에서는 segmentation 을 매우 제한적으로 지원함.


따라서 리눅스 2.6 버전에서는 x86 아키텍처가 필요로 하는 경우에만 segmentation 을 사용함.


- 사용자 모드에서 동작중인 모든 리눅스 프로세스들은 명령어와 데이터를 위해 동일한 한 쌍의 segment 를 사용함. (uset code segment, uset data segment)

- kernel mode 에서 동작중인 모든 리눅스 프로세스들은 kernel code segment 와 kernel data segment 를 사용


결국 linux 에서는 논리주소가 선형주소와 일치함




'Programming > Linux_Kernel' 카테고리의 다른 글

slab allocator  (0) 2014.03.31
linux kernel code 에서 system call 찾는 방법  (0) 2014.03.31
커널 API - IOCTL 함수 작성시 자료형의 검사  (0) 2014.03.28
x86 inline assembly  (0) 2014.03.24
Lock-free, cas  (0) 2014.03.24