캐시 메모리가 뭐인가요?
-캐시 메모리는 메인메모리에 있는 명령어와 데이터 중 일부를 가져와 임시적으로 저장하여 CPU에서 필요로 할 때 해당 정보의 신속한 제공이 가능하도록 만들어진 장치입니다.
캐시 메모리가 왜 필요해요?
-CPU와 메인메모리 사이의 데이터 처리 속도 차이가 크기 때문에 높은 성능의 CPU를 제대로 활용하지 못하고 있습니다. 따라서 캐시 메모리를 사이에 두어 CPU와 메인메모리의 데이터 처리 속도 차이를 극복할 수 있습니다.
캐시메모리는 메인메모리보다 몇 배정도 빠른가요?
-캐시메모리는 메인메모리보다 약 5~10배정도 빠릅니다.
참조의 지역성이 무엇인가요?
-일반적인 컴퓨터에서 CPU는 프로그램 실행시간의 90%는 해당 프로그램 공간의 10%에서만 실행됩니다. 따라서 이 10%에 해당 하는 데이터를 캐시메모리에 적재해두면, CPU의 데이터 처리 성능이 향상됩니다.
캐시 메모리는 무엇으로 만드나요?
-캐시 메모리는 SRAM으로 만들 수 있습니다.
캐시 메모리의 접근 시간은 어느정도 되나요?
-캐시 메모리의 접근 시간은 5~100ns 정도입니다.
캐시메모리의 적중과 실패는 무엇인가요?
-CPU가 필요한 명령어나 데이터가 캐시메모리에 존재하면 적중(hit)라고 하고, 존재하지 않으면 실패(miss)라고 합니다.
데이터 전송 단위는 무엇인가요?
-메인메모리에서 캐시메모리로 데이터를 가져올때는 블록 단위로 가져옵니다. 그리고 캐시메모리에서 CPU로 데이터를 전송할 때는 워드 단위로 전송합니다.
캐시메모리의 적중률은 어떻게 구하나요?
-적중률= (적중수/전체메모리 참조 횟수) 입니다.
메인메모리에서 캐시메모리로 데이터를 인출하는데 소요되는 평균 메모리 접근 시간은 어떻게 구하나요?
Taverage=Hhit_rate X Tcache + (1-Hhit_ratio) X Tmain
Taverage:평균 메모리 접근 시간
Tmain=메인메모리 접근 시간
Tcache=캐시메모리 접근 시간
Thit_ratio=적중률
캐시메모리의 설계요소는 무엇이 있을까요?
-캐시메모리의 크기, 인출 방식, 사상 함수, 교체 알고리즘, 쓰기 정책, 블록 크기, 캐시메모리의 수 입니다.
캐시 메모리의 크기는 어떻게 설계해야 할까요?
-캐시메모리를 크게 만들면, 메인메모리에서 가져올 수 있는 블록이 많기 때문에 적중률이 높아집니다. 하지만 용량이 크면 주소를 계산하는데 많은 시간이 소요됩니다. 즉 용량이 크다고 해서 비례적으로 속도가 높아지진 않습니다. 또한 캐시메모리의 용량이 클수록 비용이 높아집니다. 결과적으로 캐시메모리의 적중률을 높이면서 접근시간이 낮아지는 것을 막하야합니다. 연구 결과에 의하면 1K~128k 워드가 적절하다고 합니다.
인출 방식은 어떻게 설계해야 할까요?
-요구 인출방식과 선인출 방식이 있습니다.
요구 인출 방식은 CPU가 필요한 명령어나 데이터가 있을 때마다 메인메모리에서 가져오는 방식입니다.
선인출방식은 CPU가 현재 필요한 정보뿐만 아니라 앞으로 필요해질 수 있을 것 같은 정보까지 한꺼번에 가져와서 캐시메모리에 저장해두는 방식입니다. 일반적으로 프로그램은 참조의 지역성으로 인해 현재 참조하는 데이터와 인접한 데이터를 참조할 가능성이 높기 때문에 이 경우 효과적입니다메인메모리에서 가져오는 블록의 크기가 크면 한번에 많은 데이터를 가져올 수 있지만 인출 시간이 길어지고, 캐시 메모리 크기에 비해 블록이 더 커졌기 때문에 블록이 빈번하게 교체됩니다. 블록이 커질수록 멀리 떨어진 워드들도 함께 가져오기 때문에 가까운 미래에 사용될 가능성이 낮아집니다. 일반적으로 블록의 크기는 4~8워드가 적절합니다.
사상함수는 어떻게 설계해야 할까요?
-캐시메모리에서 슬롯은 한 블록이 저장되는 장소입니다. 그리고 태그는 슬롯에 적재된 블록을 구분해주는 정보입니다. 메인메모리에서 캐시메모리로 정보를 옮기는 것을 사상이라고 합니다.
사상의 방법은 세가지가 있습니다. 직접사상, 연관사상, 집합연관사상이 있습니다.
직접사상은 메인메모리의 임의의 블록에서 첫번째 워드는 캐시메모리의 첫번째 슬롯에, 또 다른 블록에서 두번째 워드는 캐시메모리의 두번째 슬롯에만 넣을 수 있는 사상방식입니다. 따라서 서로 다른 블록의 첫번째 워드는 동시에 캐시메모리에 존재할 수 없습니다. 이 방식은 CPU에서 캐시메모리를 조사할 때 해당 라인만 검사하면 되기때문에 간단하지만, 일반적으로 적중률이 낮습니다.
연관사상은 직접사상의 단점을 보완한 방식입니다. 서로 다른 두 블록의 첫번째 워드가 동시에 캐시메모리에 있도록 하기 위해 메인메모리의 블록번호를 캐시메모리에 저장합니다. 이 방식은 CPU가 캐시메모리를 조사할때, 긴 주소길이로 인해 검사시간이 길어집니다.
집합 연관사상은 직접사상과 연관사상 방식의 장점을 취합한 방식입니다.
집합과 태그가 있는데, 집합 번호는 같고, 태그 번호가 다른 단어들을 저장할 수 있습니다. 즉 직접사상에서의 저장공간이 여러개 있다고 생각하면 됩니다. 이로 인해 적중률이 직접사상보다는 높고 연관사상보다는 낮습니다. 또한 검사시간은 연관사상보다는 빠르지만 직접사상보다는 느립니다.
교체 알고리즘은 무엇이 있을까요?
-CPU가 현재 필요한 정보를 캐시메모리에서 찾을 때, 해당 정보가 있으면 적중이라고 하고, 없으면 실패라고 합니다. 실패했을 경우, 메인메모리에서 해당 정보를 가져와야 하는데, 이때 캐시메모리에서도 공간마련을 위해 데이터를 제거해야 합니다.이때 어떤 데이터를 제거할지 결정하는 알고리즘이 교체 알고리즘입니다.LRU(Least Recently Used)알고리즘은 캐시메모리에서 CPU로 인출된적이 없는 블록 중에서 가장 오래된 블록을 제거하고 새로운 블록을 저장하는 방식입니다.
LFU(Least Frequently Used) 알고리즘은 캐시메모리에 적재된 블록 중에서 가장 적게 사용된 블록을 교체하는 방식입니다.
FIFO(First In First Out)알고리즘은 가장 먼저 들어온 블록을 내보내는 방식입니다.
이외에도 랜덤 알고리즘이 있습니다.
쓰기 정책은 무엇이 있을까요?
-CPU가 연산 결과를 캐시메모리에 저장해두는 경우가 있습니다. 이 때 캐시메모리와 메인메모리의 데이터 값이 다르게 됩니다. 이를 위해 데이터를 갱신하는 과정이 필요한데, 즉시 쓰기(wirhte-though) 방식과 나중쓰기(write-back)방식이 존재합니다.
즉시 쓰기 방식은 CPU에서 연산결과를 캐시메모리에 저장할 경우 바로 메인메모리에도 값을 저장하는 방식입니다. 이 방식은 메인메모리와 캐시메모리의 값이 항상 동일하다는 장점이 있습니다. 하지만 쓰기 동작이 발생할 때마다 캐시메모리와 메인메모리에 쓰기 동작이 발생하기 때문에 시간이 길어집니다.
나중쓰기 방식은 CPU의 연산결과를 캐시메모리에 저장해두고 메인메모리에는 저장하지 않습니다. 변경된 캐시메모리의 블록에 1비트의 태그로 표시를 해두고 , 해당 블록이 삭제되기 전에 메인메모리에 저장하는 방식입니다. 이 방식은 메인메모리와 캐시메모리 간의 데이터가 불일치 할 수 있습니다.
슈퍼세트관계:최근의 고성능 컴퓨터는 캐시메모리가 두개 있습니다. 하나는 CPU내에 들어있는 캐시메모리로 아주 작지만 아주 빠르고, 다른 하나는 CPU외에 있는 캐시메모리로, 상대적으로 느리지만 용량은 더 큽니다.
L1은 CPU내에 있는 캐시메모리를 말하고, L2는 CPU 외에 있는 캐시메모리를 말합니다. L1은 L2보다 속도는 빠르지만 적중률이 낮습니다.
캐시메모리의 일관성을 유지하는 방법은 무엇인가요?
-첫째로, 공유 캐시메모리를 사용하는 방법입니다. 시스템에 있는 여러개의 프로세서가 하나의 공유 캐시메모리를 사용하면 데이터를 일관성있게 유지할 수 있습니다. 하지만 동시에 캐시메모리에 접근하면 충돌이 발생할 수 있습니다.
두번째로, 공유변수를 캐시메모리에 저장하지 않는 방법입니다. 이는 수정 가능한 데이터를 캐시메모리 저장하지 않는 방법입니다. 이 방법은 메인메모리에서 데이터를 읽어와 수정할 경우, 캐시메모리에 저장하지 않고 바로 메인메모리에
저장하는 방법입니다.
세번째로, 버스 감시 시스템을 이용하는 방법입니다. 데이터의 일관성 유지를 위해 감시 기능을 가진 장비를 시스템 버스에 추가설치하는 방법입니다.
이 방법은 버스의 통신량이 증가하게 됩니다.
'컴퓨터 공학' 카테고리의 다른 글
[펌] 언리얼 스크립트 함수문법과 유용한 함수편 (0) | 2015.11.27 |
---|---|
[UDK] Visual Studio 2010에서 UDK 실행하기 -2 (0) | 2015.11.27 |
[펌]UDK > Unreal Frontend > Launch 실패 (Built with UDK) (0) | 2015.11.27 |
[공유] [세미나 공지] 소셜 게임 개발자가 알야야할 MongoDB 활용 기술 세미나 (0) | 2015.11.27 |
리눅스 점유율 상위 20개국 (0) | 2015.11.26 |