개발자 도전기

[STUDY] 캐시 메모리와 버퍼 메모리 본문

개발공부/코딩용어

[STUDY] 캐시 메모리와 버퍼 메모리

jnnjnn 2024. 3. 6. 17:28

 

 

캐시 메모리란?

연산 작업을 하는 CPU는 메모리에서 데이터를 불러온다. 하지만 CPU의 처리 속도는 빠르고 메모리의 처리 속도는 느리기 때문에 빠른 CPU의 일처리 속도를 메모리가 따라가지 못해서 문제(병목 현상)이 생긴다. 이를 해결하기 위한 것이 캐시 메모리이다.

 

캐시 메모리는 CPU와 메모리 사이에 위치하고 있다고 생각하면 된다.

 

캐시 메모리는 CPU가 메모리에 접근하는 횟수를 줄여 성능을 향상시킨다. 일반적으로 CPU에 캐시 메모리는 2~3개 정도 사용된다. 각각 L1, L2, L3로 구분된다. 숫자가 많아질 수록 더 느려지고 용량이 커진다.

 

Cache Hit, Miss

캐시 메모리의 성능을 평가할 수 있는 방법 중 하나로 Cache Hit ratio가 있다.

 

CPU가 캐시 메모리에 접근했을 때, 캐시 메모리가 그 데이터를 가지고 있다면 Hit, 데이터가 있으면 Miss이다.

Cache Hit Cache Miss Cache Hit ratio
있음 없음 Hit / (Hit + Miss) * 100(%)

 

캐시 교체 알고리즘

LRU(Least Recently Used) 알고리즘을 사용한다.

LRU 알고리즘 : 메모리 상에서 가장 최근에 사용된 적이 없는 캐시의 메모리부터 대체하며 새로운 데이터로 갱신시켜준다.

 

캐시 파일이란?
웹페이지가 느려지면 종종 캐시 파일을 초기화하라는 조언을 듣곤 한다. 캐시 파일은 웹 페이지 상의 이미지 등을 하드디스크에 미리 저장해 두고, 다음번 웹 페이지 접근 시 해당 사이트 서버가 아닌 하드디스크에서 이미지를 불러들여 로딩 속도를 높이는 역할을 한다. 이 캐시 파일도 캐시 메모리와 마찬가지로, 속도 빠른 하드디스크와 상대적으로 느린 웹 페이지 가운데서 병목을 줄이는 것이다.

 

 

버퍼 메모리란?

버퍼란 컴퓨터의 주기억장치와 주변장치들 사이에서 데이터를 주고 받을 때 정보를 임시로 기억해 두고 사용할 수 있는 공간이다.

 

버퍼 메모리와 관련된 익숙한 말 중에 버퍼링이 있는데, 동영상을 시청할 때 동영상을 내려받는 속도와 동영상을 시청하는 속도의 차이 때문에 미리 동영상을 내려받아서 버퍼에 저장해놓는다. 여기서 인터넷이 느려 시청속도가 버퍼를 채우는 속도보다 빠른 경우 다시 버퍼를 채우는 과정이 흔히 말하는 '버퍼링이 걸렸다'라고 말하는 현상이다.

 

이처럼 버퍼는 속도 차이가 있는 장치 사이에서 데이터를 효율적으로 전송하는 역할도 하지만 데이터의 손실을 막는 기능도 한다.

 

예를 들어 타자 속도가 2000인 사용자가 컴퓨터에 빠른 속도로 타자를 입력한다고 가정하자. 만약 컴퓨터의 성능이나 상황에 따라 이 속도에 맞춰 데이터를 입력하지 못하는 상황에 처한다면 , 타이핑되는 데이터를 유실할 가능성이 있다. 이때에도 버퍼 메모리가 타이핑된 정보를 임시로 저장하여 유실되지 않게 한다.

 

 

캐시 메모리와 버퍼의 비교

캐시 메모리와 버퍼의 공통점은 둘 다 메모리를 소모하여 속도차이를 보상한다는 데 있다.

 

차이점은 버퍼가 캐시보다 일반적으로 용량이 크며, 버퍼는 데이터를 저장할 수 없고 한 번의 연산이 끝나면 사용된 데이터는 폐기된다. 반면 캐시는 캐시 메모리에 데이터를 저장하여 추후에도 계속 사용할 수 있다.

 

또, 이 둘의 목적도 다르다  캐시는 CPU의 작업 속도를 증진시키기 위해 만들어졌으며, CPU에서 해당 요청이 들어왔을 때 디스크가 아닌 캐시메모리에서 찾아 빠른 속도로 응답하는 것에 주된 목적이 있고, 버퍼는 속도의 증진만을 목적으로 하는 것이 아닌 개별 작업들 간의 협동을 지원하기 위해 존재한다.

 

 

레지스터란?

메모리 계층 중 가장 상위에 위치한 메모리이다. 또한 가장 작으며 빠른 타입의 메모리이다. CPU는 자체적으로 데이터를 저장하는 기능이 없기 때문에 레스터가 CPU안에 내장되어서 저장역할을 담당한다. CPU가 현재 작업 중인 데이터를 저장하고 있다는 점에서 캐시 메모리와 구별된다. 

 

이와 관련해서 프로그램을 다운 받을 때 운영체제가 32비트인지, 64비트인지 물어볼 때가 있다. 여기서 나타내는 비트 수가 명령을 한번에 처리할 수 있는 레지스터의 비트 수인 것이다.

 

xx bit CPU

정확하게는 CPU의 비트 수를 물어본다고 할 수 있다. 일반적으로 레지스터의 비트 수와 CPU의 비트 수는 같기 때문이다. xx bit CPU라고 말할 때 이 xx bit는 CPU가 한 사이클에 처리하는 데이터의 사이즈를 의미한다. 32bit CPU면 한 사이클에 32bit를, 64bit CPU면 한 사이클에 64bit 를 처리한다는 의미다.

사이클은 CPU가 하나의 기계어 명령을 수행하는 주기를 의미한다.(최근의 CPU는 한 사이클에 다수의 명령을 실행한다) 보통 1초당 수행되는 사이클의 횟수를 기준으로 CPU의 속도를 표기하며 1초에 1사이클이면 1Hz 로 표기한다. 현재 CPU는 일반적으로 1.0Ghz 이상의 속도를 가지고 있다.