메모리 Buffer / Cache 이해하기

YOBY·2024년 1월 12일
0
  • free 명령어

리눅스 시스템에서 전체적인 메모리에 대한 현황을 보여주는 명령어입니다.


컴퓨터 시스템에서 어플리케이션이 데이터를 디스크에서 읽거나 쓸 때, 커널은 디스크에게 어떤 블록에 데이터가 있는지 알려주고, 디스크는 해당 블록에서 데이터를 찾아 커널에게 전달합니다.
그러나 디스크 작업은 상대적으로 느리기 때문에, 리눅스에서는 한 번 읽은 데이터를 메모리의 캐싱 영역에 저장하여 빠르게 읽고 쓸 수 있도록 합니다.

만약 프로세스가 파일의 실제 데이터를 읽어야 한다면, 커널은 블록 I/O 작업을 위한 데이터 구조체인 "bio"를 만들고, 여기에 할당된 메모리 영역을 연결합니다.
이후, bio 구조체는 디스크 드라이버와 통신하여 데이터를 읽어와서 메모리의 캐시 영역에 저장합니다.

반면에 파일의 메타데이터(파일의 이름, 크기, 타입 등)를 읽어야 할 경우, 커널은 "super block"이나 "inode block"과 같은 내부 함수를 사용하여 저장 장치와 직접 통신합니다.
이때 얻은 특정 정보는 "buffer cache"에 저장됩니다.
즉, 파일의 실제 데이터를 다룰 때는 캐시를 이용한 빠른 I/O 작업이 이뤄지고, 파일의 정보를 다룰 때는 특정 내용을 메모리에 저장하는 방식을 사용합니다.


  • Buffer Cache
    Buffer 는 Buffer Cache 로 블록 디바이스에 대한 메타데이터를 메모리에 저장합니다.
    예를 들어, 파일의 이름, 크기, 마지막 수정 날짜 및 시간 등이라고 생각하면 됩니다.

  • Cache
  1. Page Cache 는 저장 장치를 통해 한 번 읽어온 파일의 내용을 메모리에 저장합니다.
    Buffer 와 다른 점은 메타데이터를 저장하는 것이 아닌 파일의 내용을 저장한다는 점입니다.

  2. slab
    slab 는 커널 내부에서 사용하는 메모리, 캐시라고 생각하면 됩니다.



  • 정리

메모리의 캐싱 영역을 사용하는 이유는?
디스크를 통해 파일을 읽고 쓸 때 속도가 느리기 때문에 메모리 캐싱 영역을 통해 보다 빠르게 파일을 읽고 쓸 수 있습니다.
시스템의 부하가 줄어들고 데이터 입출력 속도가 빠르기 때문입니다.

메모리 캐싱 영역에서 버퍼와 캐시의 차이는?
Buffer 는 메타데이터를 저장하고 Cache 는 파일의 내용을 메모리에 저장합니다.

0개의 댓글