Page table : virtual page number : physical page number - virtual page number를 index로 가진다. - 대응하는 physical page number를 가지고 있다. - valid bit도 가지고 있고, 이가 1이면 main memory 에 page가 있는 것이다. virtual - physical address 변환에서 page offset은 변경되지 않는다. page table은 main memory에 유지된다. 프로세서는 page table이 main memory에서 어딨는지 위치를 알고 있다. (page table register) virtual address가 주어진 memory request이 있다. 1. 이 request은 pag..
컴퓨터구조
How to Locate a Block in the Cache? - direct mapping cache에서는 index를 찾고, index의 valid bit와 tag를 확인한다. - set associative cache에서는 set을 찾고, 해당 set 내의 모든 블록에 대해 valid bit와 tag를 확인한다. N-way associtaive cache에서는 set 내의 n개의 블록을 비교해야 한다. 예를 들어, 1024개의 1word block으로 구성된 4-way set associative cache는, 1 word block의 byte offset에 2bit, 1024/4 (256=2^8)에 8bit, tag에는 22bit를 할당한다. 만약 miss가 발생한다면, 요청한 데이터 블록이 캐..
** 가정 ** 32비트 주소 (vs 5비트 주소), 캐시의 크기가 2^10 (vs 2^3), 각 entry의 크기는 2^2 bytes Byte offset 각 캐시 블록은 22B의 데이터를 포함할 수 있다. 데이터 항목의 기본 단위는 Byte이다. 캐시 블록 내에서 데이터의 Byte를 식별해야 한다. 주소의 앞 20bit는 tag, 10bit는 index로 사용된다. 마지막 2bit는 Byte offset으로 사용된다. 데이터의 Byte가 참조되면, 참조된 데이터와 인접한 데이터를 포함한 22Byte의 데이터를 메모리에서 캐시로 가져온다. 이 동작은 캐시가 spatial locality(공간적 지역성)을 활용할 수 있도록 한다. 주소가 주어지면, 10bit의 index값으로 대상 캐시 블록에 접근한다...
캐시의 각 entry에는 index + valid bit + tag + data로 구성된다. 캐시에는 8개의 entry가 있고, 각각 3bit의 index를 기반으로 식별된다. 1bit의 V에는 entry의 정보가 valid한지 여부를 나타낸다. 데이터가 해당 엔트리에 배치되면 해당 데이터를 지칭하기 위해 2bit의 tag가 설정된다. 처음에는 캐시가 비어있기에, 처음의 모든 valid bit는 N으로 설정된다. 태그와 데이터도 비어있다. 참조된 데이터에 캐시가 있는 경우, hit가 발생하고 데이터는 캐시로부터 제공된다. 없는 경우엔 miss가 발생하고 기존 데이터는 메인메모리에서 복사된, 참조된 데이터로 대체된다. 만약 데이터 10110(2)이 요청되면 index가 110인 캐시 블록에 배치될 것이다...
모든 데이터(위 이미지에서, Instruction memory와 Data memory)가 컴퓨터의 메모리에 저장된다. load와 store 명령어는 메모리에 액세스하여 데이터를 읽거나 쓴다. 이상적으로는, 프로그래머들은 무제한이고 빠른 메모리를 바란다. 현재의 메모리들인 SRAM, DRAM, SSD, HDD를 비교하면, 가격 : SRAM > DRAM > SSD > HDD 성능 : SRAM > DRAM > SSD > HDD 용량 : HDD > SSD > DRAM > SRAM 이 된다. 크고 빠른 메모리를 동시에 제공하는 단일 메모리는 없지만, 현대 컴퓨터는 크고 빠른 메모리의 illusion을 제공한다. 메모리 시스템은 계층(hierarchy)적인 방식으로 다양한 메모리 기술을 포함한다. - 가장 낮은 레..
이전 장에서, data forwarding만으로 data hazard를 해결할 수 없음을 보았다. 따라서 pipeline을 정지시키는 stall을 사용한다. 이는 시간을 낭비하며 아무런 작업을 수행하지 않는 과정이다. ID단계에서 and 명령어와 IF단계에서 or명령어를 1CC동안 prevent하고, 파이프라인에 nop(아무 동작을 하지 않는 명령어)를 삽입해서 진행시킨다. 이렇게 1CC를 기다린 후, data forwarding을 통해 문제를 해결할 수 있다. and와 or을 1CC동안 진행하지 못하게 막는다. (prevent) IF/ID 파이프라인 레지스터 변경을 막으면 and는 다시 ID단계로 들어간다. PC의 변경을 막으면 or은 다시 IF단계로 들어간다. 즉, 레지스터에 상태를 기록하는 것을 막..
만약 아래와 같은 명령어가 실행됐다고 가정하자. sub $2, $1, $3 and $12, $2, $5 이 때, $1 - $3 값이 -20이라 할 때, and 연산에서 $2는 -20을 기대하지만 아직 sub 연산이 끝나지 않았으므로 10을 가져온다. 이 문제를 Data Hazard 라고 한다. 이를 위한 해결책으로 Data Forwarding을 사용할 수 있다. sub 명령의 EX/MEM 레지스터 값을 and 연산의 Rs 포트로 보낼 수 있다. 즉, 다른 명령의 레지스터를 ALU의 소스로 사용하는 것이다. datapath는 data hazard를 감지할 수 있어야 한다. 즉, destination register가 source register로 사용되는지 확인해야 한다. 여기서 and 연산의 경우, su..
pipelined datapath 의 두 가지 키포인트 1. 어떤 것을 한 단계에서 다른 단계로 전달하려면, 파이프라인 레지스터에 넣어야 한다. - 그렇지 않으면, 다음 명령어가 그 단계에 들어올 때 데이터나 정보가 손실된다. 2. 각 하드웨어 구성요소 - 명령어 메모리, 레지스터 읽기 포트, ALU, 데이터 메모리, 레지스터 쓰기 포트는 한 번에 한 단계에서만 사용할 수 있다. - 하드웨어는 여러 명령어에 의해 동시에 공유될 수 없다. 레지스터 파일은 읽기/쓰기를 위한 별도의 포트를 갖고 있으므로 다른 구성요소로 간주할 수 있다. 위는 pipeline datapath의 예시이다. 시간은 왼쪽에서 오른쪽으로 진행되고, 각 clock cycle(CC)마다 명령어가 진행된다. 다섯 개의 명령어가 차례로 파..