논리 주소
기계어 명령에서 피연산자의 주소나 명령어 주소를 지정할 때 사용한다. 논리 주소는 세그먼트와 세그먼트의 시작부터 실제 주소까지의 거리를 나타내는 오프셋으로 이루어진다.
즉, CPU의 프로그램 카운터(PC)나 명령어에서 직접 참조하는 주소로, CPU의 세그먼트 레지스터와 함께 형성된다. 프로그램이 직접 사용하는 주소이며, 물리 메모리 주소와는 다를 수 있다. CPU는 이 주소를 메모리 관리 장치(MMU)를 통해 변환한다.
논리 주소는 세그먼트 기법을 통해 선형 주소(가상 주소)로 변환된다.
선형 주소
가상 주소라고도 불리는 선형 주소는 논리 주소가 세그먼트 기법을 통해 변환된 결과이다. 세그먼트란 페이지와 다르게 가변적인 크기의 논리적 블록을 뜻한다. 세그먼트 기법은 이러한 세그먼트로 메모리를 나누는 기법이다.
이 주소는 아직 실제 메모리 주소가 아닌 CPU가 MMU에서 사용하는 주소이다. 이 주소는 주로 페이지 테이블을 통해 물리 주소로 매핑된다. 즉, 메모리 페이징 메커니즘에서 사용되고, 페이지 테이블을 통해 물리 주소로 변환된다.
물리 주소
실제 메모리 칩에 접근하는 주소이다. CPU가 메모리 모듈로 데이터를 읽고 쓰기 위해 사용하는 실제 주소로, 물리 메모리 공간 내에서 실제 위치를 나타내고 하드웨어적으로 참조된다.
선형 주소와 물리 주소는 1대1 매칭되지 않는다. 이는 가상 메모리 시스템과 페이지 테이블 기법때문이다. 선형 주소는 프로세스 별로 고유하며 각 프로세스는 자신만의 가상 주소 공간을 갖는다. 또 선형 주소는 페이지 테이블에 의해 물리 주소를 가리킬 수 있고 물리 메모리의 한 프레임이 여러 가상 메모리 페이지에 매핑될 수 있다. (공유 메모리 등)
각 주소의 크기는 CPU의 비트 수에 따라 달라진다. 예를 들어 32bit CPU에서는 논리 주소의 크기가 32비트일 수 있고 64bit CPU에서는 논리 주소가 64비트를 사용하는 경우가 많다. 다만 실제로는 운영체제와 하드웨어가 지원하는 범위에 따라 다를 수 있다. 일반적으로 선형 주소와 논리 주소의 크기는 같다. 물리 주소는 32비트 시스템에선 대체로 같은 32비트를 사용하고, 64비트 시스템에선 48~52비트를 사용한다.
'현생 > 리눅스 커널' 카테고리의 다른 글
하드웨어 세그먼테이션 - 2 (0) | 2024.08.26 |
---|---|
하드웨어 세그먼테이션 - 1 (0) | 2024.08.25 |
유닉스 커널 개요 - 3. 메모리 관리 (0) | 2024.08.23 |
유닉스 커널 개요 - 2. 시그널, 프로세스 간 통신, 프로세스 관리 (0) | 2024.08.22 |
유닉스 커널 개요 - 1. 커널, 프로세스와 동기화 (0) | 2024.08.21 |