이전 Cache Memory에 대해서 배울때 SRAM -> DRAM의 상하 구조를 가지는데 이것을 하드웨어적으로 처리하는 이유는
DRAM도 Access time이 50~100ns로 만만치 않게 빠르기 때문에 이걸 software적으로 OS가 관여하여 처리하는것은 불가능하다고 한다. 그렇기 때문에 Cache Memory의 구현은 전용 논리 게이트와 회로로 설계된 하드웨어에서 이루어지게 할 수밖에 없다.
이제 Virtual Memory를 살펴보자면 이것은 상위 구조로 DRAM , 하위구조로 HDD가 될것이다.
HDD의 Access time은 10ms 정도여서 OS로 처리할만 하기때문에 어느정도 OS의 역할이 생긴다.

우리가 원하는 illusion은 만약 메모리가 32bit address machine memory라고 한다면 4GB의 메모리공간을 가지는데 각각의 프로세스가 4GB를 개별적으로 가지고있는 것처럼 보이는것이 목적이다.
여기서 소개하는 기법은 Paging(페이징) 이다.

프로그램에서 나오는 주소는 모두 Virtual Address(가상 주소)인데, 이걸 Physical Address(물리적 주소) 로 변환시킨다.
이 변환은 프로세스마다 주어지는 Page Table(Look- Up- table이라고도함)을 통해서 변환한다.

페이지 테이블에는 여러 Flags 들이 존재한다. vaild/invalid bit ,dirty bit(updata 여부를 기록, Page Tabe에서 쫓겨날때 Disk를 업데이트 시켜줌)

해당 주소를 물리적주소로 변환에 실패하면 메모리에 없다는뜻이 되고 이때, 이것을 Page fault라고 부르며
발생시 Exception으로 간주하여 OS가 개입해. 디스크에서 해당 페이지를 읽어들여 물리적 주소로 로드한다.
이 책에서 소개하는 Paging방식중 한가지는 Demand Paging이 존재한다. 쉽게말하자면 프로그램에서 필요한 페이지들만 가져와 사용하는 것이다.
메모리의 물리적 용량의 제한에서 상당히 자유롭게 되며, 전에 존재하는 Contiguous allocation 방식이 더 이상 필요하지 않게 되었다. Contiguous allocation에 대해 조금 설명하면, 프로세스가 필요한 메모리의 크기만큼 연속된 메모리 공간을 할당해주는 방식이다. 연속된 메모리 공간을 할당 해줘야한다는 조건때문에 external fragmentation Problem을 야기하는 문제가 있었다.

Paging 방식도 장점만 있는것은 아닌데, Internal fragmentation 문제가 발생한다.
예시를 통해 설명하자면 시스템에서 제공하는 최소 할당단위가 128KB이지만 프로세스에서 사용하는 메모리의 크기가 100KB이면 28KB는 사용하지않지만 어쩔수없이 할당되는 물리적 메모리의 크기이다. 이때 우리는 Internal fragmentation Problem 이 발생했다고 말한다.
추가로 Demand Paging 방식의 불편한점으로는 실제 메모리 참조 한 번을 위해서
페이지에서 찾는 과정으로 참조한번 , 물리적 주소를 계산하기 위해서 한 번 총 2번의 메모리 참조를 해야한다.
이것보다 좀더 효율적인 방법을 모색하 Translation Look - aside Buffer(TLB) 라는 방식을 제안했는데
이것은 일종의 물리적 주소로 변환 Cache인 TLB를 사용하여 Cache가 Hit되면 바로 해당 물리주소를 얻고 작업을 진행한다.
ns 안에 빠르게 변환을 해주기때문에 잘 생각해보면 하드웨어로 구현하였을것이고 용량이 그렇게 크지않다는것을 알수있다.

Page Table과는 다르게 TLB 프로세스마다 존재하지 않고 context Switching 이 일어나면 TLB를 Flush를 해주고 새롭게 시작해야한다는 특징이있다.
수업중에 TLB Miss를 처리하는 2가지 방법에 대해 말해준다.
1. 하드웨어적 처리
- 빠르다. -> performance가 좋음
2. Exception발생으로 OS에 의한 처리
-cost가 낮다 : 하드웨어적으로 구현하려면 복잡성이 증가하므로 상대적으로 OS로하는게 cost가 낮다.
-flexibility이 높다. : , 페이지 폴트나 스와핑과 관련된 작업은 하드웨어만으로는 처리가 어렵기때문에 유연성이 높다.

발생가능한 Hit, Miss 상황을 정리하자면
TLB Miss(변환실패)
1.메모리에는 있는데 TLB에 변환정보가 없음
2.메모리에도 존재하지않아 HDD까지 접근해야함(최악의 경우, Page Fault라고함) -> I/O를통해 가져오고 Wait 상태에 접어듬 -> 다른 작업을 처리하다 interupt발생(해당내용을 가져오는시점)
일단 TLB Hit가 났다는거는 물리적주소로 변환했다는것이니 메모리에는 존재한다는것이다. 그렇지만 이것이 L1,L2,L3캐시에도 있는지는 별개의 문제이므로 L1, L2,L3에서 miss가 날 수있다.
1.TLB Hit , L1 Hit
2. TLB Hit , L1 miss , L2 Hit
3.TLB Hit, L1 miss, L2 miss , L3 Hit
4.TLB Hit, L1 miss, L2 miss , L3 miss , 메인메모리까지 접근
위의 4가지의 상황은 모두 하드웨어적으로 처리된다.
'컴퓨터 구조론' 카테고리의 다른 글
| [컴퓨터 구조론]13.Storage and I/O 1,2 (0) | 2025.01.16 |
|---|---|
| [컴퓨터 구조론]12.Virtual Memory 3,4 (0) | 2025.01.14 |
| [컴퓨터 구조론]10.Memory Hierarchy -2 (0) | 2025.01.11 |
| [컴퓨터 구조론]9.Memory Hierarchy -1 (0) | 2025.01.08 |
| [컴퓨터 구조론]8.Pipeline DataPath (0) | 2025.01.06 |