Virtual Memory: Types
- segemtation :: 가변 크기
- page :: 고정 크기
Segmentation
주소 공간을 가변 크기로 할당하자
배경
동적 재배치(dynamic relocation / base-bound relocation)는 베이스 레지스터(base register)와 가상 주소(virtual address)를 더해 생성한 주소가 바운드(bound) 내에 있는지 확인하며 물리 메모리 주소를 배치하는 형태의 가상화이다. 그러나 이 방법은 연속적인 가상 주소를 그대로 물리 메모리에 연속적으로 할당하는데, 이 와중 스택과 힙 사이의 공간이 물리적으로 할당되지만 실제 사용되지는 않는 영역이 발생한다는 문제점이 있다. 즉, 내부 단편화가 발생한다. 이를 극복하기 위해 segmentation 기법이 사용된다. (base-bound relocation은 single segmentation 이라고도 볼 수 있으며, 하단의 sementaion은 multiple segmentation으로 불리기도 한다.)
설명
sementation은 프로세스의 주소 공간에서 구분되는 공간 모두에게 각각 base-bound register를 배치함으로써 물리 공간에 비연속적으로 할당하는 방법을 뜻한다. 즉, code segment에게 필요한 base/bound 레지스터 한 쌍, stack segment에게 할당되는 base/bound 한 쌍, heap segment에게 할당되는 base/bound 레지스터 한 쌍. 이 세 쌍은 각각 물리 메모리의 특정 지점(=base 레지스터 안에 담긴 주소)에서 시작하여 base+bound 만큼의 주소공간까지, 즉 bound 의 값만큼의 영역이 프로세스의 코드/스택/힙 영역에 할당된다. 따라서 동적 재배치에서 발생한 내부 단편화는 발생하지 않는다. (연속적이어서 내부에 쓰이지 않는 공간이 발생한 것이므로, 이제는 쪼개어 배치했기떄문에 쓰이지 않는 공간이 발생하지 않았다.)
한계
세그먼트의 크기가 일정하지 않아 외부 단편화를 유발한다.(이는 가변 길이 할당(segement)계열의 공통적인 문제점이다.) 또한 계속 사용되는 것이 아니지만, 가끔 사용되는 프로그램의 주소공간이 하나의 논리 세그먼트에 배정되어 물리 메모리를 할당받고 있다면, 이 프로세스의 주소공간에 접근하기 위해선 쓰이지 않을 때에도 물리 메모리에 존재해야 한다.
Paging
주소 공간을 고정된 크기로 분할해 할당하자
배경
페이지 기법은 세그먼테이션(가변 크기 분할 기법)의 태생적인 문제인 단편화 문제를 해결하기 위해 나왔다. 이 기법은 주소 공간을 '동일 크기'로 분할하여 할당한다. 가상 주소 공간에서 사용되는 고정 크기 단위는 페이지, 물리 메모리에서는 페이지 프레임이라는 고정 크기 슬롯이 담긴 배열이라고 생각할 수 있다. 프레임 각각은 하나의 가상 메모리 페이지를 저장한다.
장단점
장점은 유연하고, 빈 공간 처리에 대해 단순하게 처리할 수 있다. OS가 할 일은 빈 페이지에 대한 빈 공간 리스트만 있으면 된다. 단점은 느려질 수 있다는 점과 page를 찾아갈 page table을 따로 저장해야 하므로 메모리 낭비가 클 수 있다는 점이 있다.
Page Table
주소 공간의 각 페이지에 대한 물리 메모리의 위치를 기록하고 확인하기 위해 사용하는 자료구조
주소 변환을 위한 정보를 저장하고, 각 프로세스의 page table을 커널이 소유중인 메모리에 저장한다.
더 빠른 페이징을 위한 기법
TLB : Translation Lookaside Buffer
자주 참조되는 가상주소와 물리주소의 변환 정보를 저장하는 하드웨어의 캐시
Translation Lookaside Buffer (TLB) : 변환 색인 버퍼
더 큰 Page
페이지 크기를 n배 증가하면 페이지 테이블 크기가 1/n 배 감소한다. 그러나 이 경우 페이지 내부의 낭비 공간이 증가하는 내부 단편화 문제가 생길 수 있다. 일반적으로 4kb~8kb를 페이지 크기로 정한다.
Page & Segment의 hybrid
= multi segment
Multi Level Page Table
트리 구조로 선형 page table을 구현.
References
Segmentation and Paging Segmentation and Paging (ppt)
---
* 오늘의 핀토스 진도
anon finish
'공부기록 > OS' 카테고리의 다른 글
[TIL][Project 3] Page Type| Swap In/Out (0) | 2023.12.23 |
---|---|
[TIL][Project 3] Virtual Memory | Address Translation (Static/Dynamic) (0) | 2023.12.21 |
[TIL][OS] OS review Summary: Abstractions (0) | 2023.12.20 |
[TIL] [Project 2 보충] Filesystem, Buffer, syn-read issue (0) | 2023.12.19 |
[TIL][Setting] ubuntu Setting for PintOS (0) | 2023.12.18 |