
빨간색 : DRAM cell array에서 DRAM 칩의 internal buffer로 내릴때 까지의 시간이다.(물리적 이유로 50ns이하로 내리는게 어렵다.)
파란색: internal buffer까지 내리고 Access하는 속도이다.
그래프를 보면 그 차이가 점점벌어지는 것을 볼 수있다. 이건 확실하지 않은 내용이지만 DRAM의 internal buffer는 SRAM으로 만들어졌다고 한다. 그렇기때문에 internal buffer에서 Access하는 속도가 더 빠르다고 한다.
어쨋든, 이러한 속도 차를 줄이기 위해 메모리의 계층구조를 생각해냈는데

위로 올라갈수록 속도가 더 빠르고 아래로 갈 수록 속도가 더 느리다.

이 계층구조가 적극적으로 활용하려는 성질은 시간 지역성과 공간 지역성이다.
많은 데이터가 있는 상대적으로 속도가 느리고 용량이 큰 디바이스로부터 자주, 곧 사용할 데이터들을 효율적으로 선별해서 상대적으로 속도가 빠르고 용량이 작은 디바이스로 데이터를 이동시킨다.
계층적구조를 통해서 가상의 메모리가 존재하는것처럼 illusion을 만들어 access 시간은 높은 계층, 가격과 용량은 낮은 계층의 메모리를 가지는 가상의 메모리를 만든다.

또 추가적인 이득으로 cache의 존재로인해 sysytem bus의 여유가생기기때문에 I/O에 활용 할수있고 이것은 크게보면 ISA를 바꾸지않아도 성능향상을 이끌어낸다고 볼수있다.
terminology
Block (line) : Memory device 사이에서 데이터가 이동하는 최소단위
-> 보통 메모리에 접근하여 얻을 수 있는 데이터는 1byte, 반면 Block은 보통 4bytes, 16byte
Hit : CPU가 요청한 데이터가 Cache Memory에 있을 경우
-> Hit Time : time to access the upper leve
Miss : CPU가 요청한 데이터가 Cache Memory에 없을 경우
-> Miss penalty : time to get block from lower level + time to replace in upper level
Direct-mapped Cache

1 블럭의 크기가 32bit(1 word)라고 가정하고 값을 찾는 방법을 설명하자면
1.Address로 32bit가 들어올텐데 2bit는 offset을 나타내는 주소,10비트는 메모리의 index, 20bit는 tag이다.
2.주소에있는 10bit로 나타낸 index의 tag와 주소에있는 tag를 비교해서 일치하면 hit시킨다.

읽기와 쓰기의 경우를 비교해보자
읽기의 경우

hit시키면 그대로 진행하면된다.
미스가 난경우 cpu pipline을 stall시킨다.
다음 레벨의 계층으로부터 미스된 블럭을 fetch시킨다.

write의 경우 조금 다른데, 데이터 캐시에 값을적고 그 값이 메인 메모리의 위치에 대응되는곳에 쓰이지 않는다면 주소는 같으나 서로 다른 값을 가지게 된다. 즉 inconstent를 최소화하기 위해 hit시 방법을 소개한다.
Write - thruough
캐시가 바뀌면 메인 메모리에 있는 값도 같이 update해주는 방식이다.
간단하지만 느리고 메모리 트래픽을 증가시킨다.
Write - back
write할때 cashe만 update하고 캐시에서 flush될때 dirty bit라는것을 활용해서 갱신된 값인지 확인하고 갱신된 값이면 값을 바꾼다.
빠르지만 구현의 복잡함이있고 이러한 방식으로 인해 특정 경우에는 inconstent가 깨지는 경우가 발생
반면 miss시에는

write - through 방식의 경우
Wrtie allocate : Memory에 access해서 cache로 가져오는 과정을 수행후 캐시와 메모리를 둘다 업데이트 시킨다.(근데 어차피 through방식은 hit해도 똑같이 access해서 값을 바꾼다.)
Wrtie Around : Allocation을 수행하지 않는 경우다. 캐시를 갱신하지않고 바로 메모리에 기록한다.
write - back 방식의 경우
일반적으로 wrtie alllocate방식을 수행한다.(데이터를 캐시에 기록하고 나중에 업데이트)
write back 방식은 나중에 업데이트 한다는 특성때문에 아직 업데이트가 되지않았는데 I/O가 개입해버리면 consistent가 깨져버린다.
이걸 해소하기위해서 OS가 개입하게 된다.
입력: 캐시에 있는 값을 없애고 메모리에있는 값을 가져옴 -> 한쪽은 아예 없애버려서 일관성유지
출력: 캐시에있는 값으로 메모리를 update하고 가져옴
하지만 이렇게되면 OS가 cache를 aware하기 때문에 Transparency가 깨지게된다.
'컴퓨터 구조론' 카테고리의 다른 글
| [컴퓨터 구조론]11. Virtual Memory 1,2 (0) | 2025.01.12 |
|---|---|
| [컴퓨터 구조론]10.Memory Hierarchy -2 (0) | 2025.01.11 |
| [컴퓨터 구조론]8.Pipeline DataPath (0) | 2025.01.06 |
| [컴퓨터 구조론]7.Pipelining Bascis (0) | 2025.01.06 |
| [컴퓨터 구조론]4. Calling Convention (0) | 2025.01.02 |