[컴퓨터구조] Virtual Memory
- [ CS기초 ]/컴퓨터구조
- 2021. 11. 25.
실제 메모리가 얼마나 있던지에 상관없이 프로세서에 일정한 크기의 메모리가 있는 것처럼 환상을 주자!
앞서 Processor와 Main memory의 속도적 한계를 극복하기 위하여 캐시메모리를 사용했다. 캐시메모리에 사용될 확률이 높은 데이터들을 미리 저장해두고 hit이면 빠르게 사용할 수 있게 한 것이다. 이번 Virtual Memory는 메인메모리와 Disk사이의 크기적 한계를 극복하기 위해서 메인메모리를 프로세서와 disk사이의 일종의 '캐시'로 사용하는 것이다. 실제 물리적인 메모리의 크기가 nGB라고 하면 프로그램 하나에서 메모리 전체를 사용하는 경우는 드물기에 필요한 메모리만 사용하게 하는 것이다.
VM의 특징
캐시메모리와는 다르게 VM의 경우 miss penalty가 매우 크기 때문에 page fault rate를 줄이는데 가장 많은 신경을 쓴다. 따라서 fully associative placement방식을 사용하며, os에서 복잡하고 좋은 알고리즘을 사용하여 fault rate를 줄인다.
또한 page(캐시의 block과 유사)의 크기가 크다. Disk접근에 많은 clock을 필요로 하므로 한번에 많이 가져온다고 생각하면 된다. 일반적으로 4~64KB까지 사용된다.
Address Mapping (Address Translation)
Virtual address space는 processor(user)에 의해 사용되는 메모리 주소를 말하고, Physical address는 메인메모리 접근을 위해 사용되는 주소를 말한다. 즉 다시말해, 프로세서가 알고 있는 메모리 주소와 실제 메모리 주소는 다를 수 있다는 것이다.
그런데 virtual address만을 가지고 physical address를 찾아내는 것은 쉽지는 않다. 그래서 캐시에서 했듯이 이 주소영역을 나누어서 관리하는데, virtual address를 virtual page number와 offset으로 나누고, physical address는 physical page number와 offset으로 나누어 관리한다.
mips에서 virtual address space는 32비트이다. 이때 이 virtual address의 하위 p bit를 offset이라고 하면 상위비트 전부는 page number라고 한다. 이 정보를 이용해 VPN을 PPN으로 바꿔주고 뒤에 virtual address의 offset을 physical address의 offset에 붙여줌으로서 virtual address를 physical address로 mapping시켜줄 수 있게 된다.
이렇게 가상메모리에서 virtual page number(이하 VPN)을 변경하면 mapping을 통해 physical page number(이하 PPN)을 찾아 변경이 이루어지게 된다.
이때 page table에는 2^p길이를 갖는 page가 2^(32-p)개 있으며???, page에는 각각 해당 vpn의 값에 대응하는 ppn 값이 들어가있다.
Page Table 크기 : (valid+Physical page num) * 2^(Virtual page num) = (1+18)*2^20
fully associative처럼 virtual page number 1개당 physical page number에 대한 정보를 저장한다.
내가 대표적으로 c에서 알고있던 '배열은 메모리상에서 연속적이다' 라는 특징은 사실 Virtual Memory상에서 성립하는 것이다. 다시 말해 Physical memory상에서는 배열원소의 메모리 참조가 연속적이지 않을 수 있다는 말이다. 이러한 방법으로 가상메모리와 물리적 메모리의 분리는 서로 다른 프로그램 사이에서 Protection을 가진다.
Protection뿐 아니라 서로 다른 주소를 갖는 VM이 같은 PM의 주소를 가르키게 함으로서 다른 프로그램끼리 Data를 Sharing하게 설정하는 것 또한 가능하다.
Q. offset 비트수가 page size인가?
TLB (Translation Lookaside Buffer)
Q. TLB가 fully associative라면서 index가 2개인 구조가 이해가 안감
fully associative면 index가 0비트고 그냥 가로로 쭉늘어서있는거아닌가?
page table의 캐시라고 생각하면 편하다. page table entry중에서 최근에 사용된 몇개만 가지고 있는 캐시.
page table(메인메모리에 있음)에 가지 않기 위해서 최근에 사용된 address mapping을 기록한다. 최근의 사용된 virtual page를 다시 사용할 확률이 높으니까!
크기가 아주 작으므로 fully associative mapping을 사용한다.
캐시의 tag에 해당되는 것 : page table의 address = VPN
캐시의 data부분에 해당되는 것 : PPN
(VPN과 PPN의 쌍이 들어감)
CPU가 virtual address를 찾으면 먼저 page number를 이용해서 먼저 TLB의 tag(page number)를 parallel하게 search한다. TLB에서 hit (찾는 VPN이 존재)되면 PPN과 offset을 붙여서 physical address를 만든 후 physical address를 캐시에 맞게 쪼개어 캐시메모리를 조회하게 된다. 반면에 TLB miss라면 page table을 접근하여 physical address를 찾아 조회한다.
'[ CS기초 ] > 컴퓨터구조' 카테고리의 다른 글
메모리의 구조 (0) | 2022.04.17 |
---|---|
[컴퓨터구조] Cache Memory - Set Associative Cache (0) | 2021.11.21 |
[컴퓨터구조] Cache Memory - Direct Mapped Cache (0) | 2021.11.20 |