2023. 6. 8. 14:37ㆍ컴퓨터구조
Virtual Memory
1. 디스크를 위해 메인메모리를 캐쉬로써 사용
2. 프로그램들은 메인 메모리를 공유한다
-> 각각은 고유한 가상주소 공간을 가지고, 다른 프로그램들로부터 보호된다
3. CPU와 OS는 가상주소를 물리주소로 변환한다
- Virtual Memory에서 block은 page라고 부른다.
- 변환 miss가 되면 page fault라고 부른다.
Address Translation
페이지 크기가 4K(4KB=2^12)

Page Fault Penalty
- page fault가 일어나면 페이지를 디스크로부터 fetch해와야 한다.
-> 수백만 cycle이 걸림
-> os 코드에 의해 이루어짐
- page fault rate을 최소화하는 방법
1. fully associative 사용
2. 교체 알고리즘을 좋게
Page Tables
- 각각의 프로세스들의 위치 정보가 저장되어있다
- virtual page number 인덱싱
- CPU의 page table 레지스터가 각 프로세스의 page table을 가리키다.
- if page가 메모리에 있다면
-> 페이지 테이블 안에는 물리 페이지 넘버가 저장되어있다.
- if page가 메모리에 없다면
-> 메모리에 없고 디스크에 있는 것
-> 디스크에 데이터가 어디에 있는지 참조한다.


Replacement and Writes
- page fault rate를 줄이기 위해, LRU(Least-Recently used) replacement를 선호
- 해당 페이지를 접근했으면 레퍼런스 비트를 1로 설정
- OS에서는 주기적으로 0으로 초기화
- 레퍼런스 비트가 0이면 최근에 사용하지 않았다는 뜻
- Disk에 write 하는 건 수백만의 cycle이 걸린다
따라서,
- 블록단위로 접근
- write-back을 주로 사용
- write through하면 너무많은 시간 걸리기 때문
Fast Translation Using a TLB
- 주소 변환 하기 위해선 추가 메모리 참조가 필요하다
-> PTE(Page Table Entry) 접근하고
그러고 실제 메모리 접근한다.
- 변환 속도 개선가능
-> CPU내에서 PTE의 빠른 캐쉬 사용
-> TLB(Tlanslation Look-aside Buffer)라고 부름(일종의 캐쉬)

TLB Misses
TLB에서 miss가 났을 때
- if page가 메모리에 있다면
메모리로부터 PTE값을 로드하고 다시 접근
- if page가 메모리에 없을 때( page fault)
os가 페이지를 디스크로부터 fetch하고
페이지 테이블 업데이트
그리고 실패한 명령 재시작

The Memory Hierarchy
메모리 계층의 모든 레벨에서 공통의 원칙이 적용된다.
(캐싱 개념을 기반으로 하여)
- Block placement: 블록 단위로 보관
- associativity에 의해 결정
(Direct mapped, n-way set associative, Fully associative)
-> 높은 associativity가 miss rate를 줄여준다.
하지만 복잡성,비용,접근 시간이 증가한다. - Finding a block: 블록 찾기
- Direct mapped: 인덱스를 1번의 비교로 찾음
- n-way set associative: 인덱스에 해당하는 set 안에 모든 엔트리를 검색해야함, n번 비교
- Fully associative: 모든 엔트리 검색, 엔트리 개수만큼 비교
* 하드웨어 캐쉬입장에서는 비용을 줄이기 위해 비교횟수를 줄이는 게 좋다.
* Virtual memory 입장에서는 miss를 줄이기 위해 fully associativity를 사용하는 사용하는 게 좋다. - Replacement on a miss: miss가 날 경우 하위 계층에서 가져와서 교체
- LRU
- Random - Write policy: 캐쉬에 데이터가 업데이트 됐다면 메모리에도 업데이트 하기 위한 정책
- Write-through
- Write-back
* Virtual memory는 write-back만 사용
Sources of Misses
1. Compulsory misses(cold start misses): 처음 블록 접근할때 생기는 미스
- block size를 늘리면 miss rate를 줄일 수 있지만
블록에 내용이 많게 되어 miss penalty가 늘게 됨
2. Capacity misses: 캐쉬사이즈로 인한 용량 미스
-> 프로그램이 캐쉬사이즈보다 커서 담을 수 없을 때 발생
- 캐쉬 사이즈를 늘리면 miss rate를 줄일 수 있지만
캐쉬 접근 시간이 늘어나게 된다.
3. Conflict misses (collision misses): 엔트리들이 경쟁을 하는 과정에서 생기는 미스
-> fully associative에서는 발생하지 않는다.
- associativity를 늘리면 miss rate를 줄일 수 있지만
캐쉬 접근 시간이 늘어나게 된다.
'컴퓨터구조' 카테고리의 다른 글
| chap 5- Memory(2) (0) | 2023.06.01 |
|---|---|
| Chap 5- Memory(1) (0) | 2023.05.31 |
| Chap 4. Processor (2) | 2023.05.26 |
| chap3 - Arithmetic for Computers (0) | 2023.04.12 |
| 컴퓨터구조 전공수업 ch02 (1) | 2023.03.26 |