본문 바로가기

virtual memory8

rmap (v2.5.27): pte chaining & page frame reclamation Introduction What is Reverse Mapping? 가상 메모리는 페이지 테이블을 사용해서 가상 주소를 물리 주소로 변환한다. 페이지 테이블은 프로세스별로 존재하며, 각각의 프로세스는 독립적인 가상 주소공간을 갖는다. MMU는 가상 주소를 물리 주소로(forward mapping) 변환하지만, 운영체제는 반대로 어떤 페이지 프레임이 어떤 프로세스의 가상 주소 공간에 매핑되어있는지(reverse mapping)를 알아야 하는 경우가 있다. 구체적으로 어떤 경우에 reverse mapping이 필요한가 하면 swapout/pageout, migration, compaction을 할때 해당 페이지프레임을 사용하고 있는 프로세스의 pte를 빠르게 찾거나 수정하기 위해 필요하다. 예전 (Linux.. 2022. 12. 26.
Page Frame Reclamation and Swapout (v2.4.22) Introduction 언젠가 swap, PFRA, rmap에 대해서도 글을 써야겠다고 생각하고 있었는데, 모두 복잡하다보니 어디서부터 시작할지가 항상 고민이었다. 결국 가장 문서화가 잘 되어있는 Understanding the Linux Virtual Memory Manager 에서 시작을 해보기로 했다. 따라서 이 글은 책에서 다루는 v2.4.22에 기반한다. References: Understanding the Linux Virtual Memory Manager 이 글은 Mel Gorman의 책과 많이 겹친다. 이 글과 같이 읽으면 좋을 것 같다. 이 글에서는 swap 자체의 동작 방식에 관한 내용은 다루지 않는다. Page Frame Reclamation Ch 10. Page Frame Recla.. 2022. 12. 24.
Process Address Space 이 글에서는 리눅스에서의 프로세스 주소 공간을 관리하는 자료구조를 알아볼 것이다. 이 글에서는 page table isolation / address space isolation은 고려하지 않는다. outdated된 내용이 조금 있을 수 있지만 우선은 프로세스 주소 공간에 대한 큰 그림을 그려보자. Address Space 주소 공간은 주소의 범위를 의미한다. 주소 공간의 크기는 32비트에서 4G, 64비트에서 16EB이다. 그리고 이 주소 공간을 어떻게 잘 나눠서 사용할지는 아키텍처에서 정한다. 예시) x86_64, aarch64 주소 공간은 크게 user (process) address space와 kernel address space로 나뉜다. kernel과 user의 address space를 어.. 2022. 11. 5.
Page Cache: write 글을 좀 오랜만에 쓴다. 이것저것 하느라 글을 그동안 못썼다. 흠, 다음 글은 뭐쓰지? 이전 글 VFS: read_iter() & write_iter() 원래는 페이지 캐시를 정리하려고 했는데 정리하다보니 read/write 매커니즘을 정리할 수밖에 없었다. 이 글에선 read_iter()가 어떻게 동작한는지 간단하게 알아본다. 관련 글 이 글은 가상 파일시스 hyeyoo.com Page Cache: filemap_read 이전 글 이전 글에서는 read() 시스템 호출에서 어떤 일이 일어나는지 알아봤다. read() 시스템 호출은 모드와 권한이 적절한지 확인한 후, 1) Direct IO를 수행하거나 2) filemap_read()로 페이지 캐시에서 hyeyoo.com 앞선 글에서 read()를 할 때.. 2022. 3. 9.
Page Cache: filemap_read 이전 글 이전 글에서는 read() 시스템 호출에서 어떤 일이 일어나는지 알아봤다. read() 시스템 호출은 모드와 권한이 적절한지 확인한 후, 1) Direct IO를 수행하거나 2) filemap_read()로 페이지 캐시에서 데이터를 읽어온다는 것을 알아봤다. VFS: read_iter() & write_iter() 원래는 페이지 캐시를 정리하려고 했는데 정리하다보니 read/write 매커니즘을 정리할 수밖에 없었다. 이 글에선 read_iter()가 어떻게 동작한는지 간단하게 알아본다. 관련 글 이 글은 가상 파일시스 hyeyoo.com 페이지 캐시란 디스크의 속도는 어마무시하게 느리다. HDD에서 지연시간이 밀리초 단위로 발생함을 생각했을 때, 중간에 캐시가 없다면 프로세서가 파일의 내용을 .. 2022. 2. 9.
Virtual Memory: Zone의 종류 노드(Node)는 용도에 따라서 메모리 영역을 한 개 이상의 영역으로 분리해서 관리한다. 이 때 각 영역을 존(Zone)이라고 한다. 이 글에선 존의 종류에 어떤 것이 있는지 알아본다. 존과 노드, NUMA에 대한 내용은 존, 노드를 정리한 글과 NUMA를 정리한 글에 정리해두었다. Zone의 종류 리눅스에 어떤 존들이 있는지 살펴보자. 참고로 아래 서술한 존이 항상 모두 존재하는 건 아니다. 노드마다 존이 1개 이상 존재하는 건 맞지만 그렇다고 항상 모든 종류의 존이 존재하지는 않는다. 예를 들어서 어떤 시스템은 모든 메모리 영역이 ZONE_NORMAL일 수도 있다. ZONE_DMA DMA는 DMA 글에 정리해두었다. ZONE_DMA는 x86에서 하위 16MB의 메모리를 DMA용으로 예약된 존이다. I.. 2022. 1. 3.