1. Page Cache와 Buffer Cache
컴퓨터 시스템에서 데이터의 빠른 접근과 관리를 위해 Cache라는 개념을 사용합니다. 가상 메모리 시스템과 파일 시스템에서 데이터를 캐싱하는 방법에는 각각 Page Cache와 Buffer Cache라는 캐싱 매커니즘이 사용됩니다.
(1) Page Cache (페이지 캐시)
가상 메모리 시스템에서는 Page Cache가 사용됩니다. Page Cache는 물리적 메모리의 페이지 프레임을 관리하며, 주로 가상 메모리의 페이지 프레임을 캐싱합니다. 이 페이지 프레임은 Swap 영역보다 빠른 메모리에 위치하여 데이터의 빠른 접근을 가능하게 합니다.
Page Cache는 운영체제가 페이지 캐시에서 데이터를 찾을 때 하드웨어 주소 변환만 수행하므로 접근 시간에 대한 정보를 알 수 없습니다.
그래서 Page Cache는 주로 간단한 대체 알고리즘인 Clock 알고리즘과 같은 방식으로 관리됩니다. 관련 포스팅 바로가기
(2) Buffer Cache (버퍼 캐시)
반면에 파일 시스템에서는 Buffer Cache를 사용합니다. Buffer Cache는 디스크에서 읽은 파일 데이터를 운영체제의 메모리 영역에 임시로 저장합니다. 이후 동일한 데이터 요청이 발생하면 디스크로부터 읽어오는 대신 캐시된 데이터를 바로 전달합니다. 이런 방법으로 파일에 대한 요청 시 빠른 응답을 가능하게 합니다.
Buffer Cache는 파일에 대한 요청이 언제 발생했는지 추적할 수 있습니다. CPU 제어권이 운영체제에게 있기 때문에 파일 데이터에 대한 정보를 알 수 있습니다. 그래서 LRU(Least Recently Used)나 LFU(Least Frequently Used) 등의 더 복잡한 대체 알고리즘을 사용할 수 있습니다.
2. Read/Write System Call vs. Memory-Mapped I/O
파일의 데이터를 읽고 쓰는 방법은 두 가지가 있습니다. Read/Write System Call과 Memory-mapped I/O입니다.
(1) Read/Write System Call
Read/Write System Call을 사용하는 경우엔, 파일을 열고 Read / Write System Call을 호출하여 운영체제가 해당 파일의 내용을 확인합니다.
운영체제는 먼저 Buffer Cache에 해당 데이터가 존재하는지 확인하고, 존재한다면 해당 데이터를 바로 전달합니다. 만약에 Buffer Cache에 없다면, 디스크 파일 시스템에서 데이터를 Buffer Cache로 읽어온 후 전달합니다.
이후 사용자 프로그램은 받은 데이터를 자신의 주소 영역에 있는 페이지에 복사하여 사용합니다.
(2) Memory-Mapped I/O
파일의 일부를 프로세스의 가상 주소 공간에 매핑하여 사용하는 방식입니다. 이를 통해 프로세스는 직접 메모리에 접근하여 파일을 읽고 쓸 수 있습니다.
Memory-mapped I/O를 사용하는 경우에도 처음엔 System Call을 요청하여 파일을 메모리에 매핑합니다. 이후에는 운영체제의 개입 없이 사용자 프로그램의 주소 공간에 페이지 캐시가 매핑하기 때문에 파일 입출력을 직접 할 수 있습니다.
만약 매핑된 데이터가 메모리에 없는 경우에는 Page Fault가 발생하고, Page Fault Handler가 호출되어 데이터를 읽고 사용자 프로그램의 주소 공간에 복사합니다.
두 방법의 차이점은 Read/Write System Call을 사용할 때에는 운영체제에게 요청을 하여 데이터를 받아와야 하지만, Memory-mapped I/O를 사용할 때는 운영체제의 개입 없이 직접 파일 데이터에 접근할 수 있다는 것입니다.
3. Unified Buffer Cache (통합 버퍼 캐시)
최근의 OS에서는 기존의 buffer cache가 page cache에 통합되어 캐쉬 관리가 간소화 된 Unified Buffer Cache를 사용합니다.
기존 Buffer Cache 환경에서는 위 그림처럼 파일 입출력이 모두 Buffer Cache를 통과해야 했습니다.
하지만 Unified Buffer Cache를 사용하면 위 그림 처럼 Page Cache와 Buffer Cache가 공유되어 단순한 경로로 통하게 됩니다.
메모리 활용면에서도 페이지 캐시와 버퍼 캐시가 공유되므로 메모리 사용에 효율적입니다.
참고자료
[KOCW 이화여대 반효경 교수님 - File Systems Implementation 2]
https://core.ewha.ac.kr/publicview/C0101020140523142954456205?vmode=f
[ Operating System Concepts - Abraham Silberschatz ]