컴퓨터작살내기(http://cafe.daum.net/combreak/)
게 시 판 : PC 강좌!
번 호 : 97
제 목 : [강좌] 캐쉬, 버퍼, 버퍼캐쉬의 용도
글 쓴 이 : 주인장*^^*
조 회 수 : 104
날 짜 : 2002/09/12 10:06:40
내 용 :
캐시/버퍼/버퍼캐쉬 용도
캐시(cache)
캐시란 간단히 말해 속도가 다른 두 장치 사이에서 속도차이를 메워주는 장치이다.
메모리가 데이타를 읽어드리는 속도에 비해 하드디스크의 데이타 읽는 속도는 매우
느리다.
가령 예를 들어, 메모리의 속도가 100이고, 하드디스크의 속도를 1이라고 가정 하자.
이 때 외부의 입력으로 어떤 데이터(용량이 50)를 메모리가 하드 디스크에서 읽어 오
려한다고 생각했을경우 속도가 1인 하드디스크가 50인 용량을 읽기 위해서는 시간이
50걸리지만, 50인 용량을 메모리가 받을때는 0.5라는 시간이 걸린다.
결국 메모리는 하드디스크가 정보를 다 읽을때까지 모두 49.5라는 시간을 아무 일도
못하고 놀게 된다. 이처럼 메모리의 비사용시간을 막기위해서 캐시라는 장치가 생겼
다.
만약 메모리의 특정영역을 캐시로 정하고 위의 경우에서 읽어올 데이터 50 중에 30을
미리 읽어 왔다면, 30은 미리 메모리에 있으니, 20만 더 읽어 오면 된다. 따라서 하
드디스크는 20의 시간이 걸리고, 메모리는 19.5라는 시간만을 소비하게 된다. 결국
하드디스크가 2.5배나 빨라진 셈이 되는 것이다.
보통 윈도우95/98에서는 하드디스크 캐시를 사용하면, 하드디스크 속도가 10배 정도
빨라지는 효과를 얻을 수 있다. 그것은 윈도우95/98이 캐시메모리를 훌륭하게 관리해
서 90%이상의 데이터를 미리 읽어오기 때문이다.
캐시 메모리는 하드디스크와 메모리 사이에만 있는 것이 아니고, CPU와 메모리 사이
에도 있고, 하드디스크와 케이블 사이에도 있으며, CD-ROM과 메모리 사이에도 있다.
속도 차이가 나는 모든 장치에 있다고 생각하면 된다.
인터넷을 쓸때도, 모뎀의 속도가 느리기 때문에 자주 접속하는 홈페이지의 그림을 하
드디스크에 저장해 뒀다가 사용하는데, 이것을 인터넷 캐시라고 하며, 모뎀보다 하드
디스크가 빠르니 하드디스크를 캐시로 사용하는 것이다. 그래서 인터넷을 쓰기 위해
서는 하드디스크를 50MB 이상 비워두는 것이 좋다.
캐시메모리는 많으면 많을수록 좋지만, 꼭 비례해서 좋아지지는 않는다. 미리 읽어
올 데이터가 30인데, 캐시 메모리가 10이면 속도가 나질 않을것이며, 캐시를 30으로
늘리면 속도가 많이 늘어난다. 하지만, 캐시를 60으로 늘리면, 미리 읽어와야 할 데
이터가 30이상일 때는 속도는 늘어나겠지만, 30이하일 때는 늘지는 않을 것이다. 게
다가 메모리는 비싸기 때문에 무조건 캐시로 사용할 수는 없을 것이다.
버퍼(Buffer)
버퍼는 어찌 보면 캐시와 뜻이 비슷한것 같아 헷갈려하는 사람들이 많은데, 그 둘의
차이는 분명히 있다.
캐시와 버퍼는 속도가 차이가 나는 장치를 상호보완해주는 장치이지만, 캐시는 두 장
치의 속도가 차이가 날때 느린 쪽의 속도를 늘리기 위해서 데이터를 미리 받아 두는
것을 말하며, 버퍼는 또한 두 장치 속도가 차이가 날때 사용하지만, 이것은 속도 향
상을 위한것이 아니라, 빠른쪽에서 데이터가 느린쪽으로 보내질때 데이터의 손실을
막기 위해서 쓰인다.
예를 들자면 키보드를 들수 있다. 터미널 상태의 통신을 하고 있다고 가정하고 게시
판에서 키보드로 '엔터'키를 눌러 다음 페이지로 넘기면, 바로 다음 페이지로 넘어가
지 못하고 1,2초 늦게 화면이 넘어간다. 만약 계속 엔터키를 누르고 있다가 손을 떼
면, 손을 놨는데도 엔터키가 눌러지면서 한참을 페이지가 넘어가게 된다.
이것은 모뎀과 서비스 업체의 화면 처리 속도가 키보드 보다 느리기 때문에 키보드
버퍼가 작동한 것이다. 만약 화면이 처리된 후에만 키보드 데이터를 받아 들이면, 키
보드 타이핑 도중에 글자를 잃어버릴 위험이 많아지게 된다. "1234567890"을 빨리 치
면 처리를 못해 "12367890"이 쳐질 수도 있다는 것이다.
이런 데이타 손실을 막기 위해서 키보드는 사용자가 치는 키를 차례차례 받아 두었다
가 처리가 되는 데로 계속 내보내는 것이다. 이 기능을 버퍼라고 하며, 사실 캐시도
넓은 의미로는 버퍼에 포함되는 개념이기 때문에 같은 뜻으로 쓰이기도 합니다.
버퍼캐쉬(Buffer Cache)
디스크를 읽는 일은 (진짜) 메모리를 읽는 것보다 아주 느리다. 더구나, 디스크의 동
일한 영역을 짧은 시간 동안 반복해서 계속 읽는 일은 아주 빈번하다.
예를 들어, 누군가 e-mail 메시지를 읽고, 답장을 하기 위해 편집기로 불러들이고,
그걸 보내기 위해 메일프로그램에게 다시 읽게 하는 과정을 생각해 보자. 디스크로부
터 한번 읽어들인 정보를 메모리에 상당시간 보관한다면, 첫번째로 읽을 때만 시간이
좀 걸릴 뿐 속도가 전반적으로 빨라질 것이다.
바로 이런 것을 가리켜 디스크 버퍼링(disk buffering)이라고 하며, 이런 목적으로
쓰이는 메모리를 버퍼 캐쉬(buffer cache)라고 부른다.
그러나 메모리는 아쉽게도 한정되어 있어 아주 귀중한 자원이기 때문에, 버퍼 캐쉬는
보통 큰 크기를 가질 수 없다(즉, 우리에게 필요한 모든 데이터를 담아둘 수 있을 정
도로 크지는 않다). 따라서, 캐쉬가 다 차게 되면 오랫동안 쓰이지 않은 데이터는 버
려지며 그 빈 공간을 새로운 데이터가 메우게 된다.
이런 디스크 버퍼링은 쓰기에도 똑같이 적용된다. 보통, 데이터들은 쓰여지자 마자
또 곧바로 다시 읽어들여지므로(예를 들어, 소스 코드 파일은 일단 파일로 저장된
후, 컴파일러에 의해 다시 읽어들여진다), 이런 데이터들을 캐쉬에 넣어둔다면 확실
히 효율적일 것이다. 또한, 쓰기 작업을 디스크에 즉시 하지 않고 캐쉬에 넣어두면,
프로그램들이 그만큼 출력을 빨리 끝낼 수 있기 때문에 전반적인 시스템 성능향상에
도 도움이 된다.
대부분의 운영체제들이 버퍼 캐쉬를 갖고 있긴 하지만(좀 다른 이름으로 불릴 수도
있다), 모두가 위와 같은 원리로 동작하는 것은 아니다.
한가지 방법은 write-through라는 것인데, 이 방법은 쓰기를 할 때면 언제나 디스크
에도 즉시 기록하는 것이다(물론 캐쉬에도 남겨둔다).
또 다른 방법은 write-back이라 불리는 것으로, 쓰기를 일단 캐쉬에 해 두었다가 나
중에 한꺼번에 디스크에 기록하는 방식이다. 효율적이기는 write-back 방식이 뛰어나
지만, 대신 약간의 에러가 발생할 소지가 있다.
즉, 시스템이 갑자기 멈춰버린다거나, 전원이 갑자기 나가버린다면, 또는 캐쉬 내용
을 미처 써 넣기 전에 플로피를 빼 버린다면, 캐쉬에 담겨 있던 내용들은 고스란히
날아가 버리고 만다. 특히, 손실된 정보가 파일시스템 유지에 필요한 중요 데이터였
다면, 자칫 전체 파일시스템을 망가뜨리고 마는 결과를 초래할 수도 있다.