AVM: Application-Level Virtual Memory | |
---|---|
Author | Dawson R. Engler, Sandeep K. Gupta, M. Frans Kasshoek |
Conference | ACM HotOS |
Year | 1995 |
개요
Virtual memory management를 User-level에 구현하였다.
Motvation & Importance
과거와는 다르게 점점 다양해지는 (ㅋㅋ) Application trend에 맞추어서, Static한 VM은 Application의 Cutomization에 문제가 되고 있다. 예를 들어서 다음과 같은 예시에서 AVM을 활용할 수 있다.
- Fine-grained monitoring
- Accurate "in core" information
- Page replacement policy
- Specific page allocation
- Control of page-size (huge page)
- DMA
- Fine-grained control over virtual memory attributes
- Fast exception propagation
- Better static fualt-isolation techniques
- More efficient dynamic fault-isolation
Main Idea
VM관리를 User-level library로 옮긴다. 커널에는 최소한의 기능만 남겨둔채, 유저레벨에 거의 모든 커널 기능을 옮긴 Exokernel아키텍쳐를 사용하여서 구현하였다.
Design
AVM을 디자인 하기 위해선 다음의 요소를 고려해야 한다.
- Allocation of physical memory
- Bootstraping of virtual memory machinery (TLB miss code나 page-table 처리)
- Efficient exception propagation
- Secure modification of the mapping hardware (e.g., TLB)
- Revocation of physical memory
AVM은 위의 요소를 다음과 같이 처리하였다.
- Allocation: Kernel은 현재 사용 가능한 physical frame에 대한 가용 정보를 bitmap 형태로 user-level과 공유한다. 할당된 frame은 해당 process에 종속되며, 그 process는 해당 capability를 update하거나 free할 권한을 가진다.
- Page fault 처리: Page fault 처리는 userfaultfd와 유사한 방식으로 동작한다. 즉, fault가 발생하면 user-level로 제어가 위임되어, application이 적절한 frame을 매핑하도록 한다.
- Revocation: Revocation은 swaptions(사용자 수준 스왑 제어)을 위한 로직을 따르며, kernel은 user-level로 revocation fault를 전송한다. 이때, application이 특정 frame들을 반환하면 해당 페이지들은 free되는 방식으로 처리된다.