오늘은 page table에서 주소를 읽어오는데 걸리는 시간을 줄이기 위한 수단인 TLB를 알아보겠습니다.
Translation Lookaside Buffer
Logical Address를 읽고 실제 해당 주소로 접근하기 위해서는 2~3회의 메모리 접근이 필요합니다. 단지 하나의 instruction을 수행하기 위해서 이러한 많은 연산이 필요하고, instruction은 굉장히 빠른 속도로 진행되므로 불필요한 접근들 또는 이러한 접근을 효율적으로 진행해볼 방식을 고안하고자 하였습니다.
그렇게 해서 하드웨어의 자원인 레지스터를 이용하여 해당 방법의 시소요 시간을 줄여보기로 하였습니다. 그렇게 해서 나온 것이 TLB 즉, Translation Lookaside Buffer입니다.
TLB는 Logical Addressdptj offset을 제외한 부분에 해당하는 frame number를 저장합니다. 모든 경우를 다 계산하지는 않고, 사용될 때 계산하여 저장하는 방식입니다.
기존 page table은 인덱스가 page number였습니다. 그 인덱스에 있는 값이 frame number였죠. 하지만 TLB는 한정된 공간 안에서 모든 page table에 해당하는 frame 값을 저장할 수 없습니다. 레지스터는 매우 작은 공간이기 때문이죠. 따라서, 가장 최근에 사용된 page table에 해당하는 frame number만 저장하게 됩니다. 따라서 TLB에서 인덱스는 큰 의미를 갖지 않습니다.
TLB는 한정된 table number만을 저장할 수 있습니다. 만약 우리가 TLB에 해당되는 값을 계속해서 참조하지 않으면 사실상 저장공간만 낭비하고, TLB를 확인하는 과정을 거치는 것이 더 비효율적이라고 생각이 들 수도 있습니다. 하지만 우리는 지난 글에서 다룬 Locality 특성을 이해해야합니다.
우리가 작성한 코드는 특정 구역을 지속해서 반복하는 경향이 있습니다. 따라서 TLB를 이용하면 생각보다 시간들을 단축시킬 수 있게되는 것입니다.
그러면 TLB를 이용하였을 때, Logical Address를 통해서 물리적 메모리 주소에 접근하는 과정을 확인해봅시다.
1. Virtual Address(Logical Address)에 존재하는 P 비트나 TLB에 존재하는 P 비트를 통해서 해당 페이지가 메모리에 로드됐는 지를 확인하고, 만약 메모리에 로드된 상태가 아니라면 I/O를 통해서 해당 주소의 페이지를 로드하라고 명령합니다.(Page fault)
2. offset을 제외한 부분을 통해서 TLB에 해당 Page number에 해당하는 frame값이 있는 지를 확인합니다. 만약 TLB에 존재한다면 TLB hit입니다. 3번 과정을 생략하고 4번으로 넘어갑니다.
3. 만약 TLB에 값이 없다면, TLB miss입니다. 그러면 page number에 해당하는 frame number를 얻어오는 과정을 거칩니다.
4. 얻어낸 frame number와 Virtual Address에 있는 offset을 통해서 Physical Address를 얻습니다.
Effective Access Time
이제 TLB를 이용하게 되면 메모리에서 값을 읽어오는데 평균적인 시간을 구해봅시다.
아래의 3가지 조건을 갖고 우리는 식을 도출할 수 있습니다.
- 메모리 사이클 즉, 1clock이 1 microsecond입니다.
- e은 Lookup table을 확인하는데 걸리는 시간을 의미합니다.
- a는 TLB hit일 확률입니다.
- sigle-level page table이고, page fault는 없다고 가정합니다.
위 조건 하에 아래와 같은 식을 얻게 됩니다.
엡실론 e는 레지스털르 이용하므로 microsecond의 0.001배보다 더 작습니다. 즉, 거의 시간을 소모하지 않는다고도 볼 수 있죠. 또한 TLB Hit는 Locality 특성 때문에 1에 근접합니다.(Hit ratio는 확률) 따라서 EAT는 1에 근접하게 됩니다. 하지만 TLB를 이용하지 않으면 같은 조건 하에 EAT는 2가 됩니다.
즉, 거의 2배가 차이나므로 TLB의 성능이 우수함을 확인하였습니다.
지금까지 TLB에 대해서 알아보았고, 이를 통해서 우리가 얻게되는 이득이 무엇인지를 확인하였습니다. 감사합니다.
'CS > OS' 카테고리의 다른 글
[운영체제] Trashing (0) | 2023.12.09 |
---|---|
[운영체제] 페이지 교체 (0) | 2023.12.09 |
[운영체제] 다계층 페이지 테이블 (0) | 2023.12.09 |
[운영체제] Demand Paging (2) | 2023.12.08 |
[운영체제] Virtual Memory (1) | 2023.12.08 |