Swap 메모리를 알아보기 위해 메모리를 확인하는 과정을 진행 중,
buff/cache
를 자세히 정리해야겠다고 생각함
위 이미지에서,
used 는 사용중인 메모리의 크기를 말하는데 (전체메모리-free/buff/cache메모리)
available 은 사용가능한 메모리의 크기가 아닌 swapping 없이 새 응용 프로그램을 사용할 수 있는 메모리의 크기
디스크에서 데이터를 가져오는 것은 매우 느리기 때문에 시스템 부하를 발생 시킬 수 있습니다. 이런 과정을 빠르게 하기 위해 디스크에서 한번 가져온 내용을 메모리의 캐싱영역에 저장해 사용합니다. 한번 가져온 내용은 캐싱영역에 저장되어있기 때문에 디스크보다 더 빠르게 가져와 사용할 수 있습니다. 이때 사용되는 메모리의 캐싱영역을 Buffer/Cache 라고 부릅니다.
메모리의 캐싱영역은 Buffer와 Cache로 나뉘는데,
Example
예를 들자면 키보드를 들 수가 있습니다. 터미널 상태의 통신을 할때를 생각해 봅시다.
만약 게시판에서 키보드로 '엔터'키를 눌러 다음 페이지로 넘기면, 바로 다음 페이지로 넘어가지 못하고 1,2초 늦게 화면이 넘어갑니다.
만약 계속 엔터키를 누르고 있다가 손을 떼면, 손을 놨는데도 엔터키가 눌러지면서 한참을 페이지가 넘어갑니다.
이것은 모뎀과 서비스 업체의 화면 처리 속도가 키보드 보다 느리기 때문에 키보드 버퍼가 작동한 것입니다.
만약 화면이 처리된 후에만 키보드 데이터를 받아 들이면, 키보드 타이핑 도중에 글자를 잃어버릴 위험이 있습니다.
"1234567890"을 빨리 치면 처리를 못해서 "12367890"이 쳐질 수도 있다는 것이죠.
그런것을 막기 위해서 키보드는 사용자가 치는 키를 차례차례 받아 두었다가 처리가 되는 데로 계속 내보내는 것입니다.
Example
예를 들면, 메모리의 속도가 100이고, 하드디스크의 속도를 1이라고 가정 한다고 했을 때,
이 때 갑자기 어떤 데이터(용량이 50)를 메모리가 하드디스크에서 읽어 오려고 할 경우 속도가 1인 하드디스크가 50인 용량을 읽기 위해서는 시간이 50 걸립니다.
그런데 50인 용량을 메모리가 받을때는 0.5라는 시간이 걸립니다.
결국 메모리는 하드디스크가 정보를 다 읽을때까지 모두 49.5라는 시간을 아무일도 못하고 놀게 됩니다.
그것을 막기 위해서 캐시라는 장치가 생겼습니다.
만약 메모리의 특정영역을 캐시로 정하고 위의 경우에서 읽어올 데이터 50중에 30을 미리 읽어 왔다면, 30은 미리 메모리에 있으니, 20만 더 읽어 오면 됩니다.
그래서 하드디스크는 20의 시간이 걸리고, 메모리는 19.5라는 시간만 놀게 됩니다. 결국 하드디스크가 2.5배나 빨라진 셈입니다.
캐시는 보통 데이터를 빠르게 읽어오기 위해, 버퍼는 데이터 손실을 막기 위해 사용