Pintos에서 메모리 할당 전략은 주로 페이지 단위로 이루어지며, 물리 메모리와 가상 메모리 시스템을 효과적으로 관리하기 위한 다양한 기법을 사용합니다.
1. 커널 메모리 할당 (Kernel Memory Allocation)
Pintos의 커널은 페이지 단위로 메모리를 할당합니다. 이는 운영 체제 자체가 사용하는 메모리나 커널 내에서 필요로 하는 메모리를 할당하는 과정에서 이루어집니다.
- 페이지 할당 (Page Allocation): 커널은 palloc_get_page()와 같은 함수로 물리 메모리에서 페이지를 할당합니다. 이 함수는 물리 메모리에서 사용할 수 있는 페이지를 찾아 반환하며, 페이지는 일반적으로 4KB 크기의 고정된 메모리 블록입니다.
- 프레임 할당 (Frame Allocation): 페이지는 물리 메모리의 프레임에 매핑되며, 이를 관리하기 위한 프레임 테이블이 있습니다. 커널은 사용 가능한 프레임을 추적하며, 페이지를 실제 물리 메모리로 매핑할 때 빈 프레임을 찾아 할당합니다.
- palloc Allocator: Pintos에서는 물리 메모리 할당을 위해 palloc allocator를 사용합니다. palloc은 페이지 단위로 메모리를 할당하며, 필요에 따라 한 번에 여러 페이지를 할당할 수 있습니다. 이 할당기는 페이지를 사용하는 용도에 따라 구분된 두 개의 풀(pool)을 관리합니다:
- PAL_USER: 사용자 프로세스를 위한 메모리.
- PAL_KERNEL: 커널에서 사용하는 메모리.
2. 유저 프로그램 메모리 할당 (User Program Memory Allocation)
- malloc/free 함수: 유저 프로그램에서 메모리를 동적으로 할당하기 위해 malloc()과 free()를 사용할 수 있습니다. 이러한 동적 메모리 할당은 힙(heap) 영역에서 이루어지며, 가상 메모리 주소 공간을 기반으로 합니다.
- 페이지 폴트 처리 (Page Fault Handling): 유저 프로그램이 할당된 메모리 범위를 초과하거나 아직 할당되지 않은 메모리에 접근할 경우, 페이지 폴트가 발생합니다. 이때 운영 체제는 필요에 따라 새로운 페이지를 할당하거나, 필요한 페이지를 물리 메모리에 로드합니다.
- 스택 메모리 확장: 유저 프로세스의 스택은 동적으로 확장될 수 있습니다. 스택에 접근할 때 페이지 폴트가 발생하면, 커널은 적절한 메모리 영역을 할당하여 스택을 확장합니다.
3. 페이지 교체 전략 (Page Replacement Strategy)
Pintos는 제한된 물리 메모리를 효율적으로 관리하기 위해 페이지 교체 전략을 사용합니다. 페이지 교체는 물리 메모리가 부족할 때 덜 중요한 페이지를 디스크로 스왑하고, 새 페이지를 로드하는 과정입니다. Pintos는 기본적으로 Clock 알고리즘을 사용하여 페이지 교체를 수행합니다. 이를 Second Chance 알고리즘으로 수정했었습니다.
4. 프레임 테이블 및 페이지 테이블 관리
- 프레임 테이블: Pintos는 물리 메모리의 페이지 프레임을 추적하기 위해 프레임 테이블을 사용합니다. 프레임 테이블은 현재 사용 중인 페이지와 그 페이지가 어느 프로세스의 가상 메모리와 연결되어 있는지를 기록합니다.
- 페이지 테이블: 각 유저 프로세스는 자체 페이지 테이블을 가지고 있으며, 이는 해당 프로세스의 가상 메모리 주소를 물리 메모리 주소로 변환하는 데 사용됩니다. 페이지 테이블은 프로세스마다 독립적으로 유지됩니다.
'WIL > 스터디' 카테고리의 다른 글
Session, JWT, OAuth 개념 (1) | 2024.09.22 |
---|---|
PintOS 메모리 할당 순서 (0) | 2024.09.10 |
OS 지식 (0) | 2024.08.27 |
인터넷 지식 (1) | 2024.08.27 |
Thread & Process (0) | 2024.08.25 |