✅ 주요 학습 내용
- Virtual memory management
- Page type
- Swap in/out
‼️ Virtual memory management
- paging : 가상 메모리를 고정된 크기의 page 단위로 나누어서(고정 분할 방식) 관리하는 기법.
- virtual page
- 가상 페이지는 모두 같은 크기를 가진다. → 페이지 크기는 하드웨어에 의해 정해지고 일반적으로 2의 제곱수를 사용한다.
- 페이지 테이블을 이용해서 가상 메모리 주소에서 물리 메모리 주소로 매핑한다.
- physical frame
- 물리 메모리 공간을 페이지와 같은 사이즈로 나눈 것을 프레임이라고 한다.
- 프레임 크기도 페이지 사이즈와 동일하게 하드웨어에 의해 정해진다.
- page table & supplementary page table
- 페이지 테이블은 가상 메모리 상의 페이지를 물리 메모리 상의 프레임으로 매핑시켜주는 정보를 담고 있는 테이블이며, 모든 프로세스는 페이지 테이블을 가진다.
- 페이지 테이블은 메인 메모리에 저장된다.
- Page Table Base Register(PTBR)가 페이지 테이블을 가리키고, Page Table Length Register(PTLR)가 페이지 테이블의 크기를 가리킨다. → 이러한 레지스터들의 내용은 PCB에 저장되어 있다.(+ Context Switching이 일어날 때 교체된다.)
- supplementary page table
- 페이지 테이블을 보완하는 역할을 수행하는 데이터 구조이다. 즉, 페이지 테이블에는 없는 추가적인 데이터를 저장한다. → 페이지 테이블의 제약사항 극복, 더 많은 정보 관리 가능
- 일반적으로 페이지 폴트 처리와 자원 해제와 같은 목적으로 사용된다.
- virtual page
- Memory Management Unit (MMU)
- 메모리 관리 장치의 약자, 가상 메모리와 물리 메모리 간의 주소 변환을 담당하는 하드웨어 장치이다. 일반적으로 페이지 테이블을 사용해서 가상 주소를 물리 주소로 매핑한다. 페이지 테이블은 가상 메모리 공간을 페이지로 분할하고, 각 페이지에 대한 매핑 정보를 저장한다. MMU는 이러한 페이지 테이블을 참조해서 가상 메모리 주소의 페이지 번호를 확인하고 해당 페이지 번호에 대한 물리 메모리의 프레임을 찾아내서 실제 메모리 위치로 변환한다.
- Translation Lookaside Buffer (TLB)
- 주소 변환 캐시라고 불리는 TLB는 MMU와 함께 동작하며, 가상 메모리 주소를 물리 메모리 주소로 변환하는 과정에서의 성능을 향상시키기 위해 사용되는 캐시이다. 페이지 테이블은 메인 메모리에 저장되어 있기 때문에 접근 시간이 상대적으로 오래 걸릴 수 있는데, 이런 경우 매번 페이지 테이블을 참조하여 가상 주소를 물리 주소로 변환하는 것은 비효율적일 수 있다. 이러한 문제를 해결하기 위해서 TLB가 사용된다. MMU가 주소를 변환할 때 먼저 TLB를 검사하여 가상 메모리 주소의 매핑 정보를 찾아보고, 정보가 존재한다면 메모리에 접근하지 않고 해당 물리 메모리 주소를 반환한다. 이로써 주소 변환에 필요한 메모리 액세스 시간을 크게 단축시킬 수 있다.
- 가장 최근에 사용된 가상 메모리 주소의 매핑 정보를 저장한다.
- TLB miss - TLB에 찾는 매핑 정보가 없을 때 발생.
- 주소 변환 캐시라고 불리는 TLB는 MMU와 함께 동작하며, 가상 메모리 주소를 물리 메모리 주소로 변환하는 과정에서의 성능을 향상시키기 위해 사용되는 캐시이다. 페이지 테이블은 메인 메모리에 저장되어 있기 때문에 접근 시간이 상대적으로 오래 걸릴 수 있는데, 이런 경우 매번 페이지 테이블을 참조하여 가상 주소를 물리 주소로 변환하는 것은 비효율적일 수 있다. 이러한 문제를 해결하기 위해서 TLB가 사용된다. MMU가 주소를 변환할 때 먼저 TLB를 검사하여 가상 메모리 주소의 매핑 정보를 찾아보고, 정보가 존재한다면 메모리에 접근하지 않고 해당 물리 메모리 주소를 반환한다. 이로써 주소 변환에 필요한 메모리 액세스 시간을 크게 단축시킬 수 있다.
‼️ Page type
- Uninitialized page
- 프로세스의 가상 메모리 공간에서 사용되는 페이지 중 초기화 되지 않은 데이터를 포함하고 있는 페이지를 말한다. 프로세스가 실행되는 동안 데이터 페이지나 스택 페이지에는 초기화된 값이 할당되어 있지만, 힙 페이지나 BSS(Bloack Started by Symbol) 영역에 해당하는 페이지는 초기화되지 않은 상태로 할당될 수 있다. 이러한 페이지에는 초기화되지 않은 데이터나 전역 변수들이 위치하게 된다. 미초기화 페이지는 해당 페이지에 접근할 때 초기화되지 않은 값이 존재할 수 있으므로 주의해야 한다. 프로세스가 미초기화 페이지를 사용할 때는 반드시 초기화 작업을 통해 적절한 값을 할당해야 정확하고 안정적인 동작을 보장할 수 있다.
- Lazy initialization
- 초기화되어야 할 값이 실제로 필요한 시점까지 지연되는 초기화 방식을 말한다. 이는 프로그램 실행 시 모든 데이터를 한 번에 초기화 하는 대신에 해당 데이터에 처음으로 접근하는 시점에서 초기화를 수행하는 것을 의미한다.
- 이는 대규모의 데이터나 복잡한 시스템에서 초기화에 많은 시간이 소요되는 경우에 유용한 기법이다. 주의해야 할 점은 초기화가 필요한 데이터에 접근하기 전에 초기화 작업이 꼭 수행되어야 하며, 그렇지 않을 시에는 잘못된 동작이 발생할 수 있다.
- Anonymous page
- 익명 페이지는 가상 메모리 시스템에서 파일이나 스왑 공간에 연결되지 않은 메모리 페이지를 말한다. 이러한 페이지는 주로 프로세스의 스택, 힙, BSS 등과 같은 프로세스 메모리 공간에 할당되며, 디스크에 저장된 파일과 직접적인 연관성을 갖지 않는다.
- 익명 페이지의 특징과 동작 방식은 다음과 같다.
- 파일과 연결되지 않음 : 익명 페이지는 디스크에 저장된 파일과 연결되지 않는다. 따라서 해당 페이지는 파일 시스템에서 읽어오는 것이 아니라, 프로세스 메모리 공간 내에서 동적으로 생성된다.
- 초기화되지 않음 : 익명 페이지는 일반적으로 파일에 저장된 데이터로 초기화 되지 않는다. 초기화 되지 않은 페이지는 0 또는 임의의 값으로 채워지며, 프로세스가 필요에 따라 해당 페이지에 데이터를 쓰는 것이 가능하다.
- 스택과 힙 할당 : 프로세스의 스택과 힙 영역은 익명 페이지를 사용하여 동적으로 메모리를 할당한다. 프로세스의 스택은 호출된 함수와 지역 변수를 저장하는데 사용되며, 힙은 동적으로 할당된 메모리를 관리하는데 사용된다.
- 페이지 교체 및 스왑 : 익명 페이지는 페이지 교체 정책에 따라 메모리가 관리된다. 메모리가 부족한 경우 페이지 교체 알고리즘에 따라 일부 익명 페이지가 메모리에서 스왑 영역으로 스왑아웃 될 수 있다. 이렇게 스왑된 페이지는 나중에 다시 필요할 때 스왑인 되어 메모리로 복구 된다.
- 메모리 보호 : 익명 페이지는 일반적으로 읽기-쓰기-실행 가능한 권한을 가지며, 프로세스가 해당 페이지에 엑세스할 수 있다. 그러나 필요에 따라 읽기 전용 권한으로 설정하여 프로세스가 페이지의 내용을 수정하지 못하도록 할 수도 있다.
- 메모리 공간 공유 : 여러 프로세스가 동일한 프로그램을 실행하는 경우, 익명 페이지를 공유하여 메모리 공간을 공유할 수 있다. 이를 통해 여러 프로세스가 동일한 페이지를 메모리에 로드하지 않고 메모리 사용량을 줄이고 성능을 향상시킬 수 있다.
- stack growth
- 프로그램이의 실행 도중 스택 영역이 확장되는 것을 의미한다. 즉, 스택의 크기를 동적으로 조정하여 프로세스가 필요로 하는 추가적인 스택 공간을 확보하는 과정이다.
- 스택 상향 : 스택이 낮은 주소에서 높은 주소로 성장하는 방식에서 스택의 크기가 상단으로 확장됨
- 스택 하향 : 스택이 높은 주소에서 낮은 주소로 성장하는 방식에서 스택의 크기가 하단으로 확장됨.
- file-backed page
- 가상 메모리에서 실제 데이터를 파일에 저장하고 필요할 때 해당 파일에서 데이터를 로드하는 페이지이다. 일반적으로 메모리 매핑을 통해 구현된다.
- 메모리 매핑은 파일의 내용을 가상 메모리 공간에 직접 매핑해서 파일의 데이터에 접근할 수 있도록 한다. 이는 파일을 메모리에 올리는 데에 필요한 디스크 I/O 작업을 줄여준다.
- mmap syscall
- 파일을 가상 메모리에 매핑하는 데 사용되는 시스템 콜. mmap을 통해 파일을 메모리에 매핑하면 해당 파일의 데이터를 현재 가상 메모리에서 직접 접근할 수 있다.
- 즉, mmap 호출을 통해서 파일을 메모리에 매핑하면 File-backed page를 생성할 수 있다.
‼️ Swap in/out
스왑 인과 스왑 아웃은 주기억장치와 보조기억장치 간의 데이터 이동을 뜻한다.
- Swap Out
- 주기억장치에 있는 페이지 중에서 더 이상 사용되지 않는 페이지를 선정하여 보조기억장치로 옮긴다. 이는 주기억장치의 여유 공간을 확보하거나 페이지 교체 정책에 따라 새로운 페이지를 올리기 위해서이다. 스왑 아웃된 페이지는 주기억장치에서 해제되고, 해당 페이지를 저장하기 위해 보조기억장치의 스왑 영역에 저장된다.
- Swap In
- 보조기억장치에서 주기억장치로 페이지(또는 프레임)를 되돌리는 작업을 뜻한다. 주기억장치에 필요한 페이지가 없는 경우에 해당 페이지를 보조기억장치의 스왑영역에서 다시 주기억장치로 가져온다.
- page replacement policy
- 페이지 교체 정책은 주기억장치에서 스왑 아웃될 페이지를 선택하는 알고리즘을 뜻한다. 이를 통해 page fault를 최소화하고 성능과 공정성을 균형 있게 유지하고자 한다.
-
- FIFO (First-In, First-Out):
- FIFO 알고리즘은 가장 오래된 페이지를 스왑 아웃하는 방식
- 주기억장치에 올라온 순서대로 페이지를 유지하고, 가장 먼저 주기억장치에 들어온 페이지를 스왑 아웃.
- LRU (Least Recently Used):
- LRU 알고리즘은 가장 오랫동안 참조되지 않은 페이지를 스왑 아웃하는 방식
- 페이지의 최근 접근 기록을 유지하고, 가장 오랫동안 참조되지 않은 페이지를 스왑 아웃
- LFU (Least Frequently Used):
- LFU 알고리즘은 가장 적게 참조된 페이지를 스왑 아웃하는 방식
- 페이지의 참조 횟수를 계산하고, 가장 적게 참조된 페이지를 스왑 아웃
- MFU (Most Frequently Used):
- MFU 알고리즘은 가장 많이 참조된 페이지를 스왑 아웃하는 방식
- 페이지의 참조 횟수를 계산하고, 가장 많이 참조된 페이지를 스왑 아웃
- Optimal:
- Optimal 알고리즘은 가장 최적의 페이지를 스왑 아웃하는 방식
- 미래의 참조 패턴을 가정하고, 가장 오랫동안 사용되지 않을 페이지를 스왑 아웃
- 이 알고리즘은 이론적으로 가장 좋은 성능을 제공하지만, 실제로는 구현이 어렵고 예측이 어려워 사용되기 힘듬
- FIFO (First-In, First-Out):
- swap disk
- 스왑 디스크(Swap Disk)는 운영체제에서 가상 메모리 관리를 위해 사용되는 보조 저장 장치입니다. 주 기억장치(RAM)의 용량이 제한적일 때, 운영체제는 주기억장치에 올라가지 않은 페이지를 스왑 디스크에 저장하여 추가 공간을 확보한다. 스왑 디스크는 주 기억장치와 비교하여 용량이 크고, 비교적 느린 접근 속도를 가지는 특징이 있다.
'Development > 운영체제' 카테고리의 다른 글
[운영체제] PintOS - Project 3. Virtual Memory (3) (0) | 2023.06.27 |
---|---|
[운영체제] PintOS - Project 3. Virtual Memory (2) (0) | 2023.06.26 |
[운영체제] PintOS - Project 2. User Program (3) (0) | 2023.06.12 |
[운영체제] PintOS - Project 2. User Program (2) (0) | 2023.06.12 |
[운영체제] PintOS - Project 2. User Program (1) (0) | 2023.06.12 |
댓글