본문 바로가기

개발에 도움이 되는/CS

가상 메모리(Virtual Memory)

- 가상 메모리 (Virtual Memory) : 물리적 메모리 크기의 한계를 극복하기 위해 나온 기술.

프로세스를 실행할 때 실행에 필요한 일부만 메모리에 로드하고 나머지는 디스크에 두는 것이며, 프로세스 전체가 물리적 메모리에 있는 것처럼 수행되는, 즉 물리적 메모리가 훨씬 많이 있는 것처럼 보이게 된다.

 

항상 모든 프로그램에 대한 데이터가 필요한 것이 아니기 때문에 프로그램의 일부분을 필요한만큼 계속 RAM에만 올려놓도록 하고 나머지는 Backing Storage에 넣어놓는다.

 

결과적으로 메모리에 작은 양의 주소 공간만 있으면 충분히 프로세스를 수행할 수 있고, 그에 따라 더 많은 프로그램을 동시에 실행할 수 있게 된다.

 

 

 

가상 메모리를 구현하기 위해서는 메모리 관리 하드웨어인 MMU (Memory Management Unit) 가 필요하다.

- MMU : 가상 주소를 물리 주소로 변환하고, 메모리를 보호하는 기능을 수행.

CPU가 각 메모리에 접근하기 이전에 메모리 주소 변역 작업이 수행하지만 메모리를 일일이 가상 주소에서 물리적 주소로 번역하게 되면 작업 부하가 높아지므로, MMU는 페이지로 나누어 각 페이지를 하나의 독립된 항목으로 처리한다.

 

 

 

예전에는 프로세스가 실행되는 코드의 전체를 메모리에 로드해야 했고, 메모리 용량보다 더 큰 프로그램은 실행시킬 수 없었다. 하지만 실제로는 코드의 일부에서만 대부분의 시간을 사용하고, 프로세스는 특정 순간에는 항상 작은 양의 주소 공간을 사용했기 때문에 이러한 방식은 매우 비효율적이었다.

 

현재는 처음부터 모든 데이터를 메모리로 적재하지 않고 필요한 page만 메모리에 올리며, 이것을 요구 페이징 (Demand Paging)이라고 한다.

  - page : 프로세스를 고정된 크기의 작은 블록으로 나눴을 때, 그 블록들을 뜻함

 

- 요구 페이징 (Demand Paging) : 실제로 필요할 때 page를 메모리에 올리는 것

  Page Table에서 해당 page가 메모리에 있는지를 나타내는 valid-invalid bit를 사용한다.

  bit가 invalid인 경우 페이지가 물리적 메모리(RAM)에 없다는 것이다. 따라서 처음에는 모든 page entry가 invalid로 초기화 되어있고, 주소 변환 시 bit가 invalid로 되어있다면 page fault라는 오류가 발생한다.

 

 요구 페이징 순서는 다음과 같다.

 

 1. CPU가 TLB를 확인한다.

  - TLB(Translation Lookaside Buffer, 페이지 정보 캐시) : 주소 변환 캐시, 가상 메모리 주소를 물리적 주소로 변환하는 속도를 높이기 위해 사용하는 캐시로, 최근에 일어난 가상 메모리와 물리 주소의 변환 테이블을 저장해둔다. CPU가 가상 주소를 가지고 메모리에 접근하려고 할 때 우선은 TLB에 접근하여 가상 주소에 해당되는 물리 주소를 찾고, 만약 TLB에 매핑이 존재하지 않는다면 MMU가 페이지 테이블에서 해당되는 물리 주소로 변환한 후 메모리에 접근하게 된다. 

 

 2. TLB에 존재하는 경우(hit) 곧바로 주소를 변환하고, TLB에 없는 경우(miss) page table을 확인한다.

  - page table : 논리 주소의 페이지를 물리 주소의 프레임으로 매핑시켜주는 정보를 담고 있는 테이블이다.

    모든 프로세스가 페이지 테이블을 가지고 있다.

    페이지 테이블은 메인 메모리에 저장된다.

 

 3. page table의 valid-invalid bit가 valid로 되어 있다면 주소를 변환하고 TLB에 page를 올리고, invalid라면 page fault가 발생한다.

 

 4. page fault가 발생하면 MMU가 운영체제에 Trap을 걸고 커널 모드로 들어가서 page fault handler가 Invoke 된다.

 

 5. 운영체제는 page table entry의 정보 속에서 Backing Storage의 어느 위치에 page가 존재하는지 확인한다.

 

 6. 운영체제는 참조된 page를 디스크에서 메모리로 로드하고, dist I/O가 끝날 때까지 이 프로세스는 CPU를 빼앗긴다.

 

 7. dist I/O가 끝나면 page table이 업데이트되고 valid-invalid bit가 valid로 바뀐다. 그리고 ready queue에 프로세스를 넣어준다.

 

 8 . CPU가 프로세스 작업을 수행하게 되면 다시 이어서 수행한다.

 

반응형