
목표
프로그램이 자신의 전용 메모리를 소유하고 그 안에 자신의 코드와 데이터가 있다는 환상을 만드는 것
개요
프로그램 관점에서 주소 공간은 주소 0부터 시작하여 최대 16KB까지이다. 프로그램이 생성하는 모든 메모리 참조는 이 범위 내에 있어야 한다. 메모리 가상화를 위해 운영체제는 프로세스를 물리 메모리 주소 0이 아닌 다른 곳에 위치시키고 싶다. 어떻게 하면 프로세스 모르게 메모리를 다른 위치에 재배치 하느냐가 우리가 해결해야 할 문제이다. 프로세스 주소 공간이 실제로는 다른 물리 주소에 배치되어 있을 때, 주소 0번지부터 시작하는 가상 주소 공간의 환상을 어떻게 제공할 수 있을까?
여러 기법들 - base and bound, segmentation, paging
자세한 내용은 OSTEP 책을 참조하기 바람
- base and bound
- 하드웨어의 도움을 받아 가상 주소를 물리 주소로 변환
- segmentation
- base and bound의 일반화
- 가변 크기의 조각들로 분할(코드, 스택, 힙)
- paging
- 동일 크기 조각들로 분할(페이지, 페이지 프레임)
- VPN, PFN, PTE
TLB
페이징은 성능 저하를 유발할 수 있다. 페이징은 주소 공간을 작은 크기(페이지)로 나누고 각 페이지의 실제 위치(매핑 정보)를 메모리에 저장한다. 매핑 정보를 저장하는 자료구조를 페이지 테이블이라 한다. 매핑 정보 저장을 위해 큰 메모리 공간이 요구된다. 페이지 테이블 접근을 위한 메모리 읽기 작업은 엄청난 성능 저하를 유발한다.
주소 변환 속도를 어떻게 향상할까? - TLB.
- VM의 꽃
- 주소 변환 캐시(address-translation cache)
- 칩(MMU)의 일부, 즉 하드웨어
- 가상 메모리 참조 시, 하드웨어는 먼저 TLB에 원하는 변환 정보가 있는지를 확인한다. 만약 있다면 페이지 테이블을 통하지 않고 변환을 (빠르게) 수행한다. TLB를 도입함으로써, 페이징이 "사용 가능"한 가상 메모리 기법이 된다.
'크래프톤 정글 일지' 카테고리의 다른 글
| [PintOS] project 3 - 가상 메모리 개요 virtual memory (0) | 2024.06.01 |
|---|---|
| [PintOS] Page Table 페이지 테이블 (0) | 2024.06.01 |
| AB180 회사설명회 - 코딩 잘 하는 사람이 좋아요 (0) | 2024.05.30 |
| [PintOS] project 2 - sema 트리오 - fork wait exit (0) | 2024.05.30 |
| week 0, day 3 - 첫 프로젝트를 마치며 (2) | 2024.05.30 |