놀고있는메모리 2023. 11. 15. 23:16

 들어가기 앞서 해당 글은 '혼자 공부하는 컴퓨터구조 + 운영체제'를 참고로 작성되었습니다. 

 

 

 cpu는 아주 빠른 속도로 작업을 하며 작업에 필요한 내용들을 여러 장치에 요청하기도 한다. 하지만 cpu외 보조기억장치나 입출력장치들은 cpu보다 엄청 느리기도 하고 물리적거리도 멀기 때문에 cpu가 요청을 하여 읽어 오는데 긴 시간이 걸린다.

 이런 연산속도의 간극을 메우기 위한 것이 바로 버퍼와 캐시라는 개념이다.

 

 

 버퍼(Buffer)

 쉽게말해 입출력장치와 cpu의 속도 간극을 메우기위해 '임시로 저장하는 메모리영역'이다. 

 가뜩이나 속도가 느린 입출력장치에 cpu가 매우 빠른속도로 계속 요청을 하면 입출력장치는 해당 요청을 수행하기가 어렵다. 때문에 버퍼라는 영역을 만들어 해당 요청들을 큐(Queue) 형태로 저장하고 해당 데이터가 필요할 때 마다 꺼내 쓰게 된다.  

 즉, cpu가 입출력장치에 필요한 작업이 있으면 해당 작업을 버퍼라는 메모리에 저장을 한 뒤 기다릴 필요없이 할일을 계속 하고 입출력장치 또한 전달할 데이터가 있다면 버퍼를 통해 cpu에게 전달하게 된다. 이렇게 중간 단계가 있으면 각 장치의 속도대로 작업을 할 수 있게 된다는 것이다.  

 

 

 cpu가 속도가 빠른 만큼 많은 데이터를 저장한 후 입출력장치에서 필요할 때 꺼내 쓰며, 반대로 입출력장치가 느린만큼 데이터를 모아 cpu에 한번에 전달하는 식이다.

 

 캐시 메모리(Cash Memory)

저장 장치 계층 구조

 

 캐시메모리는 cpu(레지스터)와 메모리사이에 있는 저장장치다. cpu가 메모리에 접근하는 것 또한 느리기 때문에 필요할 때마다 메모리에 계속 접근하는 것은 좋지 않다. 때문에 캐쉬 메모리를 만들어 중간 단계를 만들었다.  

 

 저장장치들은 cpu와 가까울수록 속도가 빠르고 용량이 작응며, 비용(cpu 접근 효율) 또한 작다.   

 

 캐시 메모리는 하나만 있는 것이 아니라 여러 개의 메모리가 있는데, 이 또한 cpu의 코어와 가까울수록 빠르며 거리에 따라 각각 L1, L2, L3라고 부른다. 일반적으로 L1과 L2는 cpu 코어 내부에 있으며 L3는 밖에 위치해 있다.

 

 

 버퍼 vs 캐시 메모리

 처음에 언뜻 봤을 땐 버퍼와 캐시가 비슷해 무슨 차이인가 싶었다. 그리고 하나의 의문점이 생겼는데

 

 '왜 cpu와 입출력장치 사이에는 똑같이 캐시 메모리같은 중간 저장장치를 넣지 않았을까?' 이다.

 

 이 의문은 캐시 메모리만의 특징으로 설명 가능하다.

 캐시 메모리는 용량이 적기 때문에 저장할 데이터가 한정 돼 있는데, 그 한정된 데이터란 'cpu가 자주 사용될 것으로 예측한 데이터'이다. 하지만 입출력장치는 유저가 조작하는 것이기 때문에 예측하기 어렵기도 하고, 메모리가 cpu보다 느리기 때문에 캐시 메모리를 넣었다곤 하지만 입출력장치 사이 또한 캐시 메모리를 넣기에는 위의 그림과 같이 어마어마한 속도 차이가 나기 때문에 그다지 효율적인 방법이 아니다라는 것이다. 

 만약 굳이 캐시 메모리를 넣는다면 많은 캐시 메모리가 필요할 것이다. 당장 cpu와 메모리 사이의 캐시 메모리만 봐도 3개나 되는데 이는 상당히 비효율적일 것이다. 

 

 그렇다면 캐시 메모리는 어떻게 자주 쓸 데이터를 예측할까?

 바로 '참조 지역성의 원리' 라는 원칙으로 예측을 하는데, 이는 다시 시간 지역성공간 지역성으로 나뉜다.

  

 시간 지역성이란, 최근에 접근했던 메모리 공간에 다시 접근하려는 경향을 말한다. 예를 들면 밑과 같이 for문을 돌릴 때 result 변수와 for문 조건의 i변수에 자주 접근하게 된다. 

시간 지역성의 예

 

 공간 지역성이란, 접근한 메모리 공간 근처를 접근하려는 경향을 말한다. 보통 프로그램의 데이터들을 관련있는 데이터들 끼리 모여서 저장된다. 가령 게임, 웹, 동영상들을 실행 시켰다면 각각의 프로세스의 데이터들은 모여서 저장된다(cpu가 동작하는 원리를 생각한다면 당연하다). 또한 해당 프로세스안의 기능들도 관련데이터들 끼리 모여서 저장되는데, 예를 들면 게임의 채팅이나 검색을 위한 입력 기능에 관련된 기능은 모여서 저장된다.

 그러면 굳이 중구난방으로 데이터를 찾을 필요 없이 해당 데이터 주소의 근처만 접근하면 효율적으로 데이터를 찾을 수 있게된다.

 

 이와 같은 원칙으로 캐시 메모리는 자주 쓰일 것 같은 데이터를 예측하여 일부만 저장하여 cpu가 빠르게 데이터를 읽어 동작하게 만들어 준다.