이론/기초

컴퓨터 구조 기초 - 4

tsyang 2023. 7. 16. 01:04

메모리


보통 메모리라고 하면 RAM을 생각하지만 CPU의 레지스터, 캐쉬, 하드디스크, USB등도 메모리라고 할 수 있다. 

 

.

 

메모리 계층 구조

일반적으로 메모리 계층을

 

레지스터 / L1 캐시 /  L2캐시 / RAM / 기타 저장장치(HDD,SDD, 플래시 메모리)

 

위와 같이 구분할 수 있는데, 당연히 레지스터 접근이 가장 빠르다.

 

레지스터가 아닌 메모리에서 데이터를 입출력 하기 위해서는 메모리 버스를 거쳐야 한다. 그만큼 느리겠지?

 

메인메모리를 제외한 L1, L2캐쉬에 필요한 데이터가 존재할 확률은? 무려 90%이상물론 세팅마다 다르겠지만

 

 그러면 그냥 캐쉬를 1테라 쓰면 안됨? ㅇㅇ 안됨. 너무 비싸고 기술적인 문제도있음

 

 

.

 

캐시

  • 템퍼럴 로컬리티 (Temporal Locality) : 한 번 접근이 이뤄진 주소의 메모리 영역은 다시 접근할 확률이 높다.
  • 스페이셜 로컬리티 (Spatial locality) : 한 번 접근이 이뤄진 주소의 근처는 다시 접근할 확률이 높다.

L1캐쉬에 접근할 메모리 영역의 데이터가 있으면 캐쉬 , 없으면 캐쉬 미스.

캐쉬미스나면 L2캐쉬 접근, 여기에서도 미스뜨면 메모리에서 가져옴.

 

캐쉬로 데이터를 가져올 때는 하나만 가져오는게 아니라 블록 단위로 가져옴.

 

캐쉬메모리는 일단 채워두는게 좋겠지? 캐쉬 확률이 높아지니까. 그러면 새로 캐쉬에 데이터를 불러올 , 어떤 애를 지워야 할까? 이걸 정하는 캐쉬 교체 정책(Cache's replacement policy)이라 한다.

 

대충 LRU같은거 씀.

 

.

 

가상 메모리

그냥 다른 저장장치 (하드디스크같은) 메모리처럼 쓰는거임. 안될거 없자늠? 느릴 뿐이지.

문제가 두개 있는데, 하나는 메모리를 미리 얼마나 할당해 둘 것이냐 하는 문제.

다른 하나는 느리다는 것.

 

가상 메모리 구현은 흔히 페이징 기법을 사용함.

 

MMU라는 애가 있는데 Memory Management Unit의 약어임. 얘는 실제 물리적인 메인 메모리의 크기보다 더 많은 메모리를 CPU에게 제공해주는데, 하드디스크와 같은 저장장치의 공간을 이용해서 메모리 크기를 뻥튀기함. 얘를 들어 사용 가능한 메인 메모리의 주소 영역은 0~16KB인데 CPU한테는 0~64KB라고 전해주는 것임.

 

그러면 어떻게 이런 일을 수행할까? 우선 MMU는 메모리 할당을 블록 단위로 한다. 예를 들어 블록의 크기가 4KB라고 하면 1바이트의 메모리 요청이 와도 4KB짜리 블록을 할당함.

 

이렇게 블록 단위로 메모리를 할당하다 보면 실제로 제공해줄 수 있는 물리 메모리보다 더 많은 메모리 할당 요청이 CPU로부터 올 탠데, 그 때 적절한 알고리즘으로 내보낼 블록을 하나 정해서 하드디스크에 옮겨놓고, 새로 메모리를 할당해줌. 나중에 해당 메모리 주소의 요청이 들어오면 다시 하드디스크에서 불러오겠지?

 

이런 블록을 하드웨어 관점에서는 페이지 프레임이라고 부르고 소프트웨어 관점에서는 페이지라고 부름. 즉, 페이지 프레임은 실제 메인 메모리의 블록을, 페이지는 가상 메모리의 블록을 의미한다고 보면 됨