메모리 접근 시 miss가 발생하는 type = TLB miss, cache miss, page fault (가상 메모리 miss) ☞3개임
메모리 계층구조에서 miss의 경우의 수 = 8가지(2의 3승)
경우의 수 정리
cache | TLB | virtual mem | 가능 ? 불가능 ? + 상황 |
hit | hit | hit | 가장 좋은 케이스. (1)TLB가 hit이므로, page table을 확인할 필요가 없음(= 메인 메모리 접근 필요 없음) (2)cache가 hit이므로, 변환한 물리적 주소로 캐시에 접근하면 데이터를 가져올 수 있다. |
miss | hit | hit | 가능. (1)TLB가 hit이므로, page table 확인 없이 가상주소를 물리적 주소로 변환 (2) 변환한 물리적 주소로 cache를 접근했는데 miss 임 -> cache에 data를 불러오기 위해 한번 메모리 접근을 해야한다.(3) 메모리에서 cache로 가져온 데이터를 CPU에 전달 |
hit | miss | hit | 가능. (1)TLB가 miss이므로 , page table에 접근한다.(2)가상 메모리가 hit이므로, 가상주소를 물리적 주소로 변환한다. (3)변환한 물리적주소로 캐시에 접근했는데 캐시가 hit이므로 캐시에 있는 데이터를 CPU에 전달 |
miss | miss | hit | 가능.(1)TLB가 miss이므로, page table에 접근한다. (2)가상 메모리가 hit이므로, page fault없이 가상주소를 물리적 주소로 변환한다.(3)변환한 물리적 주소로 캐시에 접근했는데 캐시 miss가 났다.(4)메인 메모리에서 해당 데이터를 캐시로 가지고 온다. (5)메모리에서 cache로 가져온 데이터를 CPU에 전달 |
miss | miss | miss | 최악이지만 가능. (1)TLB가 miss이므로, page table에 접근한다. (2)page fault(=가상메모리 Miss)이므로, 하드디스크에서 데이터를 가져온다.(시간이 엄청 걸림) (3)page table을 업데이트하고 다시 TLB가 page table에 접근하면 가상주소를 물리적 주소로 변환할 수 있다. (4) 변환한 물리적 주소로 캐시에 접근한다. (5)캐시가 Miss이기 때문에, 메인 메모리에서 해당 데이터를 가지고 온다. (6) 메모리에서 cache로 가져온 데이터를 CPU에 전달 |
miss | hit | miss | 불가능. page fault(page가 메모리에 없는 상황)가 있는데 TLB가 hit일 수 없다. (메모리 계층구조 위반) |
hit | hit | miss | 불가능. page fault(page가 메모리에 없는 상황)가 있는데 TLB가 hit일 수 없다.(메모리 계층 구조 위반) |
hit | miss | miss | 불가능. page fault(page가 메모리에 없는 상황)가 있는데 cache에 데이터가 있을 수 없다.(메모리 계층구조 위반) |
TLB miss 인 경우
1. page table에는 정보가 있지만, TLB에 그 정보가 안들어 있을 때
해결책 : page table에서 page데이터를 가져와서 TLB에 넣는다.
2. TLB에도 그 정보가 없고, page table에도 그 정보가 없을 때 (=page fault)
해결책 : control을 OS에 넘기고 하드디스크의 page data를 page table에 가져온다. 가져온 데이터를 TLB에 넣는다.
TLB miss는 하드웨어가 빠르게 해결한다.
Page fault handling
- page fault exception handling(예외처리)을 해야한다.
- page fault는 메모리 접근을 해야하는 WB단계에서 일어난다. (controller 로 CPU 정지시켜서 명령어 실행정지를 하고, page fault해결을 위한 page데이터를 하드디스크에서 가져와서 넣고, 재실행한다.)
OS가 page fault해결하는 과정
1. page table entry로 하드디스크에 접근할 page정보가 어디있는지 찾아낸다.
2.page table에서 page를 가져다 놓을 자리를 찾는다. 그리고 그 자리에 있는 데이터가 dirty 인지 확인한다. (dirty=1이라면, Write Back할 때 하드디스크에 복사해 놓아야 한다.)
3.하드디스크로부터 지정한 page table 위치에 page 데이터를 읽어들인다.
4.다 읽었으면, OS는 page fault로 인해 실행 하지 못했던 명령어를 다시 차례로 재실행 한다.
TLB miss를 실제로 해결하는 방법
1. Hardware로 해결하는 방법
- MMU(Memory management Unit)이 page table에서 page 정보를 찾아 TLB를 업데이트 한다.
- page table entry의 valid = 1, 하드웨어가 TLB에 정보 업데이트 (CPU는 모름)
- page table entry의 valid = 0, page fault 이다. CPU에 알리고, OS로 page fault를 해결한다.
2.Software로 해결하는 방법
-처음부터 OS가 TLB fault를 받는다. ( 시간이 오래 걸림 ), 처음부터 CPU가 fault를 안다.
- page table entry의 valid = 1, OS가 TLB 정보를 업데이트
- page table entry의 valid = 0, page fault 이다. OS가 page fault handler를 부른다.
3. 현재의 TLB miss는 거의 하드웨어로 처리한다.
- MMU 처리가 일상적이다.
- TLB miss는 자주 발생하기 때문에 소프트웨어로 처리하면 시간이 오래걸린다.
Context switch
컴퓨터는 주로 multi-process 환경이다. 이에 따라 process가 p1 -> p2로 바뀌는 경우가 굉장히 많다. 이 때, 매번 TLB를 바꿔주지 않으면 protection에 문제가 생긴다. p1의 가상주소로 매핑하는 물리적 주소와 p2의 가상주소로 매핑하는 물리적 주소가 다르기 때문이다.
-> TLB entry는 더이상 유효하지 않다.
해결법
1. 모든 TLB entry를 무효화 시킨다 : 간단하지만 expensive하다는 단점이 있다. context switch가 자주 일어나면 계속 TLB를 무효화 시켜야 한다는 단점이 있다.
2.TLB에 ProcessID를 추가한다. : TLB hit/miss를 구분하는 processID를 둔다.
- ProcessID와 Virtual Address page number가 일치할 때, TLB가 hit인 것임
- PrecessID를 추가하기 위해 하드웨어 구조를 변경해야 한다.
가상 메모리의 보호
- 모든 주소가 page를 읽기/쓰기 할 권한이 없다.
예) process A는 특정 page의 읽기 권한만 , B는 특정 페이지의 읽기/쓰기 권한이 있을 수 있음 ☞이는 access bit에 무엇을 가지고 있느냐에 따라 달라짐
- 이렇게 protection이 이뤄지는 상태에서 page공유를 할 수 있음 (multiple process 중)
- 각 process는 각자의 가상 주소 공간이 있고, page table이 있다. 이 page table은 바꿀 수 없고 다른 걸 쓰고 싶다면 공유해서 쓰는 수 밖에 없다. 이 때 protection이 지켜지는 상태에서 공유해야한다. (전부 OS의 일)
주소 공간이 너무 커질 때
주소가 위의 사진 처럼 있을 때 index bit가 20이라 총 page entry는 100만개(2의 20승) 가량 된다. 거기에 주소의 크기가 20bit(page number)라고 치면 20 X 100만의 크기가 된다.
거기에다가 process의 개수만큼을 곱하면 너무크다. 이 일을 메모리를 2단으로 두어 해결한다.
-가상주소 invalid는 2단 정보 필요없다. (1단만 있어도됨)
-가상주소가 invalid일 때, 다음 단으로 넘어가지 않는다. -> 메모리 절약
캐시 접근 시간 더 줄이는 법(VIPT)
원래 데이터 찾는 순서 : TLB lookup → cache lookup → hit/miss 구분
VIPT 데이터 찾는 순서 : TLB 와 cache lookup 동시에 함 → cache lookup이 더 오래걸리는 경우가 많기에, cache lookup 끝날 쯤에 Hit/miss 판단 (cache lookup 이 캐시 access time 결정)
<주의> 이 방법을 사용하려면 physical address의 index부분이 P page no 범위에 해당하면 안된다. index 부분이 P page no 범위와 같거나 작을 때 이 방법을 사용할 수 있음
TLB lookup 과 cache lookup을 동시에 할 때
- TLB hit & cache hit & [cache TAG = PA] 일 때, data를 CPU로 보낸다.
- TLB hit & cache miss 일 때, PA를 이용해 main memory에서 cache로 데이터를 보낸다.
- 나머지 경우, 이 방법 쓸 수 없고 전처럼 순서대로 한다.
'ੈ✩‧₊˚Computer Science > 컴퓨터구조' 카테고리의 다른 글
[컴퓨터 구조] 버스(BUS) (0) | 2020.12.08 |
---|---|
[컴퓨터구조] 입출력 기기( I/O device) (0) | 2020.12.08 |
[컴퓨터구조]가상 메모리(Virtual memory) (0) | 2020.12.01 |
[컴퓨터구조]캐시 메모리 성능 향상 (improving cache memory performance) / three placement policy (1) | 2020.11.26 |
[컴퓨터구조] 부동 소수점 연산(Floating point number arithmetic) (0) | 2020.11.22 |