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 |