
주소 변환은 가상 주소(virtual address)를 물리 주소(physical address)로 매핑하는 메커니즘을 의미합니다. 이러한 주소 변환은 가상 메모리 관리 시스템에서 중요한 역할을 합니다.
Pintos에서의 주소 변환은 다음과 같은 과정으로 이루어집니다:
세그먼트 기반의 가상 주소를 페이지 기반의 가상 주소로 변환합니다. Pintos는 가상 주소를 세그먼트 번호와 오프셋으로 표현합니다. 세그먼트 기반의 가상 주소를 페이지 기반의 가상 주소로 변환하기 위해, 세그먼트 번호와 오프셋을 페이지 번호와 페이지 오프셋으로 변환합니다.
페이지 테이블(Page Table)을 사용하여 가상 주소를 물리 주소로 매핑합니다. Pintos의 페이지 테이블은 가상 주소 공간을 페이지 단위로 나눈 뒤, 각 페이지에 대한 물리 주소 매핑 정보를 저장하는 자료구조입니다. 페이지 테이블을 사용하여 가상 주소를 물리 주소로 변환하는 과정에서, 페이지 폴트(Page Fault)가 발생할 수 있습니다. 페이지 폴트는 요청된 페이지가 물리 메모리에 없는 경우에 발생하며, 필요한 페이지를 디스크에서 가져와서 메모리에 적재하는 작업을 수행합니다.
변환된 물리 주소를 사용하여 실제 메모리나 장치에 접근합니다. 변환된 물리 주소는 실제 물리 메모리의 위치를 가리키거나, 입출력(I/O) 장치와의 통신을 위한 주소 등으로 사용될 수 있습니다.
Pintos의 주소 변환은 가상 메모리 관리를 위한 핵심 기능 중 하나로, 프로세스 간의 메모리 공간 분리, 메모리 보호, 페이징 등을 지원합니다. 이를 통해 Pintos는 가상 메모리 관리를 효율적으로 수행하며, 안정적인 운영체제 환경을 제공할 수 있습니다

세그멘테이션(Segmentation)은 가상 메모리 관리 기법 중 하나로, 프로세스의 주소 공간을 논리적인 단위인 세그먼트(Segment)로 나누는 방법입니다. 각 세그먼트는 서로 다른 목적을 가지며, 프로세스의 코드, 데이터, 스택 등을 나타낼 수 있습니다.
세그멘테이션은 다음과 같은 특징을 가지고 있습니다:
논리적인 단위: 세그먼트는 논리적인 단위로 프로그램의 구성 요소를 나타냅니다. 코드 세그먼트는 프로그램의 실행 코드를, 데이터 세그먼트는 전역 변수와 정적 데이터를, 스택 세그먼트는 지역 변수와 함수 호출을 저장합니다.
크기의 가변성: 세그먼트의 크기는 가변적입니다. 각 세그먼트는 필요에 따라 크기가 동적으로 확장되거나 축소될 수 있습니다. 이는 프로세스의 요구에 따라 메모리 공간을 유연하게 할당할 수 있게 합니다.
보호와 공유: 세그먼트는 보호와 공유를 위한 기능을 제공합니다. 각 세그먼트는 접근 권한 정보를 가지며, 이를 통해 프로세스 간의 메모리 보호를 구현할 수 있습니다. 또한, 세그먼트는 공유할 수 있는 기능을 제공하여 여러 프로세스가 같은 세그먼트를 공유하여 메모리를 효율적으로 활용할 수 있습니다.
세그멘테이션은 주소 변환에 필요한 추가적인 계산과 세그먼트 테이블을 사용해야 한다는 단점이 있습니다. 이를 극복하기 위해 세그먼테이션과 페이징(Pageing)을 결합한 세그먼트 페이지맵핑(Segment Paging) 기법이 사용될 수 있습니다. 세그먼트 페이지맵핑은 세그먼트와 페이지 기법을 함께 사용하여 가상 주소를 물리 주소로 변환하는 메커니즘입니다.
세그멘테이션은 주로 복잡한 메모리 모델이 필요한 멀티태스킹 운영체제에서 사용됩니다. 세그멘테이션은 프로그램의 구조를 반영하고, 보호와 공유 기능을 제공함으로써 메모리 관리의 유연성과 효율성을 높일 수 있습니다.

페이징(Paging)은 가상 메모리 관리 기법 중 하나로, 프로세스의 주소 공간을 고정 크기의 작은 조각인 페이지(Page)로 나누는 방법입니다. 각 페이지는 동일한 크기를 갖으며, 물리 메모리 내의 프레임(Frame)에 매핑됩니다.
페이징은 다음과 같은 특징을 가지고 있습니다:
고정 크기의 페이지: 주소 공간을 고정된 크기의 페이지로 나눕니다. 일반적으로 페이지 크기는 4KB, 8KB, 16KB 등의 2의 거듭제곱으로 정의됩니다. 각 페이지는 물리 메모리 내의 프레임에 매핑되어 실행됩니다.
주소 변환: 가상 주소 공간의 페이지 번호를 물리 메모리 내의 프레임 번호로 변환하여 주소 매핑을 수행합니다. 이를 위해 페이지 테이블(Page Table)이 사용됩니다. 페이지 테이블은 가상 주소 공간의 각 페이지에 대한 매핑 정보를 저장하는 자료구조입니다.
페이지 폴트: 요청한 페이지가 현재 물리 메모리에 없는 경우 페이지 폴트(Page Fault)가 발생합니다. 페이지 폴트는 해당 페이지를 디스크에서 가져와서 물리 메모리에 적재하는 작업을 수행합니다. 이를 통해 가상 메모리 공간이 물리 메모리보다 클 경우에도 프로세스를 실행할 수 있게 됩니다.
복잡한 메모리 모델 지원: 페이징은 세그멘테이션과 결합하여 복잡한 메모리 모델을 지원할 수 있습니다. 세그멘테이션은 프로세스의 논리적 구성을 나타내고, 페이징은 물리 메모리에 페이지를 매핑함으로써 가상 메모리를 구현합니다. 이를 통해 메모리 보호와 공유 기능을 제공하며, 프로세스 간의 독립성을 유지할 수 있습니다.
페이징은 주로 가상 메모리 관리와 메모리 보호를 위해 사용되는 기법입니다. 프로세스는 페이지 단위로 메모리를 할당받고, 필요한 페이지만 물리 메모리에 적재되므로 메모리 공간의 효율성을 높일 수 있습니다. 또한, 페이징은 여러 프로세스 간에 메모리를 공유하거나, 메모리를 보호하여 잘못된 접근으로부터 보호할 수 있게 합니다.
주소 변환, 세그멘테이션, 페이징은 가상 메모리 관리와 관련된 개념입니다. 이를 공부하면서 느낀 점은 다음과 같아요.
주소 변환은 프로세스가 가상 주소를 사용하고, 이를 물리 주소로 변환하는 과정입니다. 가상 주소는 프로세스가 사용하는 주소 공간이고, 물리 주소는 실제 메모리에 있는 주소입니다. 주소 변환은 주로 페이지 테이블을 사용하여 이루어집니다.
세그멘테이션은 프로세스의 주소 공간을 세그먼트라는 논리적인 단위로 나누는 방법입니다. 각 세그먼트는 코드, 데이터, 스택 등의 역할을 담당합니다. 세그멘테이션은 프로세스의 구조를 반영하고, 메모리 보호와 공유 기능을 제공하여 유연한 메모리 관리를 가능하게 합니다.
페이징은 프로세스의 주소 공간을 작은 고정 크기의 페이지로 나누는 방법입니다. 각 페이지는 물리 메모리의 프레임에 매핑되어 실행됩니다. 페이징은 가상 메모리를 더 큰 공간으로 확장할 수 있으며, 페이지 폴트라는 개념을 통해 요청한 페이지를 디스크에서 가져와 메모리에 적재합니다.
이러한 개념들을 이해하면 가상 메모리 관리의 원리와 프로세스 간 메모리 공유, 보호 등을 이해할 수 있습니다. 가상 메모리 관리는 프로그램의 실행과 메모리 사용을 효율적으로 관리하는 핵심 개념이에요.