Please enable JavaScript.
Coggle requires JavaScript to display documents.
메모리 계층구조 (캐시 (작동 구조 (집합 연관(set associative), 완전 연관(fully associative), 직접…
메모리 계층구조
캐시
용도
메인 메모리에서 자주 쓰이는 데이터를 CPU가 빠르게 읽을 수 있도록 또다른 메모리에 따로 저장하면 성능이 향상될 것이다. 이 또다른 메모리가 바로 캐시이다. 그렇다면 자주 쓰이는 데이터는 어떻게 알아낼 것인가? 즉, 어느 데이터가 자주 쓰이는지 '예측'을 할 것인가? 여기에서 우리는 간단하게 지역성의 법칙을 이용하여 이를 예측한다.
기본 작동
캐시 내의 index, tag 그리고 때에 따라 word bit를 이용하여 특정 데이터가 캐시 내에 존재하는 지를 판단한다.
만약 캐시 안에 원하는 데이터가 존재하지 않으면 이를 캐시 미스(cache miss)라고 하며, 이 때는 메인 메모리에서 꺼내온 뒤에 다시 캐시 엔트리 중 하나를 선택하여 고체 한 뒤에 똑같은 명령어를 다시 수행하여 캐시 적중(cache hit)을 시킨다.
-
-
-
가상 메모리
용도
캐시가 메인 메모리와 CPU 사이에 있다면, 가상 메모리 기법은 메인 메모리와 자기 디스크사이의 캐시라고 볼 수 있다. 가상 메모리는 쓰는 이유는 운영체제가 제한된 RAM 용량을 가지고 여러 프로세스를 동시에 돌릴 수 있도록 하게 만들어주고 그 프로세스들끼리 서로 침범하지 못하도록 막아서 메모리 보호의 기능을 하기 때문이다.
기본 작동
CPU가 접근하는 Virtual Address와 실제 Physical Address를 똑같은 크기인 Page로 나눈다. 그래서 각 Virtual Page마다 특정 Physical Page로 mapping시킨 다음 이 mapping 정보를 Page table이라고 하는 테이블에 저장하여 이 테이블을 가지고 Virtual, Physical Page간의 변환을 수행한다.
이 Page table 또한 성능 향상을 위해 또 다른 캐시를 사용할 수 있는데, 이러한 캐시를 TLB라고 한다. 그래서 TLB가 존재한다면 CPU는 우선 TLB를 참조한 뒤에 해당되는 address가 TLB에 없다면 그다음에 Page table을 조사한다.
만약 Page table에 원하는 mapping 정보가 존재하지 않으면 Page fault라고 하며, 이때는 인터럽트를 발생시켜서 OS에게 제어권을 넘겨준 뒤에 OS는 자기 디스크에서 그 주소에 대한 정보를 가져와서 다시 Page table에 있는 엔트리 중 하나를 선택하여 교체 한 뒤에 똑같은 명령어를 수행한다.
한편으로는 TLB 엔트리에 원하는 Page mapping 정보가 존재하지 않으면 이를 TLB miss라고 하며, 이 역시 다른 캐시와 마찬가지로 인터럽트를 발생시킨 뒤에 Page table을 조사하여 원하는 정보를 TLB에다가 갱신시킨다.
교체 방법
역시 캐시와 비슷하게 임의 선택이나 LRU 알고리즘을 사용한다. 하지만 LRU 알고리즘를 그대로 구현할 경우 그 오버헤드가 워낙 커서, 오늘날 OS에서는 유사 LRU 알고리즘을 사용한다.
-
-
결국 메모리 계층에서 캐시, 페이지 테이블, TLB 모두 같은 개념과 이유(지역성)을 사용한 것이라고 볼 수 있다. 그래서 다음과 같이 질문을 할수 있을 것이다.
- 데이터를 저장하는 블록을 어디에 위치시키는가?
- 저장된 블록 중 원하는 데이터를 어떻게 찾는가?
- 원하는 데이터를 못찾을 경우 어떤 알고리즘으로 교체시키는가?
-
계층구조?
경제성, 지역성 등의 이유로 메모리의 계층 구조을 만들어졌다. 이 계층으로 인해 성능이 향상되고 오늘날까지도 잘 작동되고 있는 것이다.
-
메모리 계층에서 두 계층 간 정보의 최소 단위를 블록 또는 라인이라고 부른다. 만약 프로세서가 요구한 데이터가 메모리 상위 계층의 어떤 블록에 존재한다면 이를 적중(hit)했다고 한다. 반대로 그렇지 않으면 실패(miss)라고 한다. 전체 메모리 접근에서 적중과 실패의 비율에 따라 이를 적중률(hit rate)과 실패율(miss rate)이라고 부른다.
메모리의 기본
오늘날 컴퓨터가 값을 인지하는 최소 단위를 1비트라고 한다. 한편, 이 1비트로는 광대한 양의 데이터를 저장하기에는 너무 단위가 작으므로, 암묵적으로 컴퓨터가 정보를 처리하는데 필요한 최소 단위를 정하였는데 이를 1바이트라고 하며 1바이트는 8비트이다. 이제 이 최소 단위를 가지고 아키텍쳐마다 하나의 명령으로 데이터를 처리할 수 있는 단위를 정의할 수 있는데 이를 1워드라고 한다. 즉, 1워드는 아키텍쳐의 설계에 따라 그 단위가 다르다. 예를 들어 MIPS 프로세서에서는 1워드가 1바이트 이다.
그러므로 대부분의 아키텍처에서는 1워드가 최소 1바이트가 된다. 그래서 각 아키텍처의 메모리 주소 offset은 1워드를 차지하므로 최소한 1바이트만큼의 주소 offset을 가진다. 역시, 아키텍처의 설계에 따라 이 단위는 1바이트보다 커질 수 있다.