메모리 접근 메커니즘

MySprtlty·2022년 7월 11일
0

Computer Architecture

목록 보기
1/6

🏷️메모리 접근 매커니즘

  • 내 프로그램에서 참조되는 주소는 모두 virtual address다.
    • 일반적인 사용자 프로그램인 경우를 말하는 것
  • instruction의 경우 Instruction Fetch과정에서 변환된다.
  • virtual address를 가지고 처음 가는 곳은 TLB다.
  • cache는 물리주소를 사용해서 Tag|Index|Offset으로 쪼갠다.
    • T|I|O
  • TLB와 Page Table은 가상 주소를 Page number|Offset으로 쪼갠다.
    • P|O
    • 🖇️cf. Multi-level Page Table인 경우는 더 많은 P로 쪼갠다.
    • p는 각 테이블 페이지의 인덱스 라는 사실이 제일 중요하다.
    • 내용은 알아서 다음 페이지 테이블의 주소를 가리키거나 프레임 번호를 가리키게 된다.
  • 🖇️cf. TLB는 논리주소를 이용하기 때문에, context switching이 발생하면 모두 flush시켜야 한다.
  • cache는 물리주소기 때문에, context switching이 발생해도 flush시키지 않는다.
    • 🖇️cf. 이는 벤치마크를 돌릴 때 영향을 주기도 한다.
  • 단순하게 cache hit ratio를 높이는 방법은 다음과 같다.
    • cache size 크게하기 (가장 효과적)
    • cache block size 크게하기
    • set-associativity 높이기
  • 이제 각각의 case를 분류해보자.

📌TLB에서 Hit가 난 경우

  • 바로 physical address를 얻는다.
  • 더 자세히 말하면, virtual address의 page number를 가지고 frame number를 얻고, 그 frame number와 virtual address의 offset을 concatenation해서 physical address를 얻는다.
  • TLB에서 Hit가 난 경우, 당연히 물리 메모리에 해당 page가 올라와있다.
  • cache에 대한 처리는 모두 하드웨어적으로 이루어진다. (OS가 개입하지 않는다는 의미)
    • L1 cahce에서 Hit
    • L1 cahce에서 miss, L2 cache에서 Hit
    • L1 cahce에서 miss, L2 cahce에서 miss, L3 cahce에서 miss
    • 모두 miss가나서 메인메모리로 접근

📌TLB에서 miss가 난 경우

1. 해당 page가 physical memory에는 있음

  • TLB에 매핑 정보만 없는 경우이다.
  • TLB miss exception 매커니즘으로 처리한다.

2. 해당 page가 physical memory에 없는 경우

  • page fault가 난 경우
  • page fault가 난 페이지를 Disk에서 memory로 가져오게 하는 I/O를 실행한다. (ms 단위의 시간 소요)
    • 🖇️cf. page fault handler
  • process는 wait상태가 된다.
  • ready process들에게 CPU를 양보한다.
  • 다른 프로세스들이 실행되다가 어느 순간 interrupt가 발생한다. (disk에서 memory로 page를 올려놨다는 인터럽트, I/O가 끝났다는 인터럽트)
  • kernel이 page table을 갱신하고, wait되었던 process를 ready process로 바꾼다.
  • 기다리다가 cpu를 받았을때, page fault가 났던 instruction을 또 실행하면, 다시 TLB miss가 난다.
    • 이유는 TLB는 context switching이 발생할 때마다 flush되기 때문이다.
    • 즉, cpu를 다시 할당받았을 때, TLB는 어차피 깨끗한 상태다.
  • 이제는 TLB miss exception이 다시 발생해도 page table에 가면 해당 page가 physical memory에는 있는 상태다.
  • mapping 정보를 TLB에 올려놓고 kernel이 TLB miss exception handler에서 return한다.
  • 또 시도를 하면, TLB Hit가 발생한다.
  • 겨우 얻은 물리 주소를 가지고, L1, L2, L3 cache에 접근하면 당연히 모두 miss가 난다.
  • I/O를 통해서 메모리로 방금 막 왔기 때문이다.
  • 그러나 cache까지로 가면 이제부터는 모두 하드웨어적으로 처리된다.

💡메모리에 접근하는 케이스 중 최악의 케이스는 TLB miss -> Page fault -> Cache miss다.

profile
2Co 4:7

0개의 댓글