이전 글에서 가상 메모리의 발달로 Long-term Scheduler, Medium-term Scheduler가 더이상 쓰이지 않는다고 했었다. 가상 메모리가 무엇인지, 어떻게 구현이 되는지 한번 알아보자.
실제 컴퓨터는 한번에 여러개의 프로세스를 실행하기에, 메모리 부족 현상이 일어남 → 한 시점에서 running 상태의 process는 프로그램의 모든 instruction을 필요로 하는 것이 아니고, (가상 메모리가 없는 상태라면) memory에 저장해놓은 모든 data가 필요한 것이 아니다. 그러므로, 현 시점에서 필요한 부분만 memory에 load하여 사용하자는 개념이다.
CPU가 process의 어떠한 공간을 참조할 때, 가상 주소(Virtual Address)를 먼저 참조하고, 가상 주소에 대응되는 실제 물리 주소(Physical Addresss)를 참조하게 된다.
Main Memory의 효율적인 관리
Main Memory에는 Process 들이 사용중인 영역만 load 하고, 나머지는 HDD에 내려놓아 효율적으로 관리를 한다.
Memory 관리의 단순화
Main Memory에 얼마나 많은 용량이 남았는지를 고려하지 않고 Virtual Memory의 주소를 배정할 수 있기에, Memory 관리가 단순해진다.
메모리 용량 및 안정성 문제 해결
말 그래도 "Virtual" memory 이기 때문에, 거의 무한한 공간을 메모리로 사용할 수 있다. 또한, 각각의 process는 동일한 main memory를 사용하는 것이 아닌, 각각에 배정된 Virtual Memory를 사용하기에, 메모리 간섭을 상당한 부분 해결할 수 있다.
MMU는 Virtual Address를 Physical Address로 변환시켜서 CPU가 메모리에 접근하는 것을 관리해주는 하드웨어 부품이다. CPU가 MMU에 Virtual Address를 넘겨주면, MMU는 받은 주소의 뒤에 N bits는 그대로 두고, 앞의 K-N bits (K-bits architecture)를 그에 해당하는 실제 메모리 주소로 바꾼다. 이때, 주소 변환을 위해 TLB(Translation Lookaside Buffer) 를 참조한다. TLB에 자료가 없는 경우, Page Table Entry에서 변환 정보를 가져온다.
TLB는 virtual address를 physical address로 변환하기 위해 사용되는 캐시이다. TLB는 Page Table 또는 Segment Table의 내용 중 일부를 저장한다.