ecsimsw

Virtual memory / Demand paging 본문

Virtual memory / Demand paging

JinHwan Kim 2019. 10. 19. 01:08

virual memory

 

   - 메모리를 효율적으로 관리하기 위해 이전의 paging 방식과 segmentation 방식을 설명할 때는 프로세스 전체가 메모리내에 적재해야하는다는 것을 전재로 하여 공부하였다. virtual memory는 프로세스의 일부분만 올려 메모리의 물리적 한계를 극복할 수 있도록 한다.

 

   - 각 프로세스가 차지하는 공간이 줄어 더 많은 프로세스를 메모리에 올려둘 수 있다. 프로세스를 메모리에 적재하거나 swap하는데 걸리는 시간이 줄어든다. 메모리 크기 제약으로부터 자유로워진다.

 

virtual memory

 

Demanding paging

 

   - 프로세스를 메모리에 적재할 때, 전체 부분을 다 올리지 않고, 필요한 페이지만 우선 적재하고, 나머지는 backing strore에 저장해둔다. cpu가 논리 주소를 페이지 테이블에 맵핑했을 때, 기존에 필요하다고 여겨 등록되어있던 페이지에 대한 프레임 인덱스는 페이지 테이블에서 찾고, 등록되어 있지 않는다고 표시된 페이지의 프레임 인덱스는 page fault 루틴을 통해 얻어진다.

 

page fault

 

   - 페이지 테이블에 등록된 페이지와 등록되지 않은 페이지를 표시하는 가장 쉬운 방식은 무엇일까. 등록된 페이지야 다음 프레임 인덱스가 저장되어 있으므로 등록을 확인할 수 있으니 상관없다. 등록되지 않는 페이지는 -1으로 프레임 인덱스를 표시하는 것을 생각하기 쉬운데, 이진수 주소로 -1이나 기타 사용되지 않을 수를 만들어서 매번 계산하느니, 테이블에 1bit만 따로 추가하여, 등록이라면 1, 미등록이라면 0으로 표시하는 것이 나을 것이다. 따라서 페이지 테이블에는 valid라는 1bit의 value가 추가된다.

valid value

Page fault

 

   - page가 미등록 상태라 CPU가 논리 주소를 페이지 테이블에서 맵핑 실패하는 것을 page fault라고 한다. 이때는 인터럽트가 발생하여 cpu는 지금 하던 일을 중지하고 os의 page fault 관련 루틴을 실행한다. 이 루틴은 backing store에서 페이지를 메모리에 적재하고, 페이지 테이블에 해당 내용을 등록 후 valid를 1로 고치는 것을 포함한다.

 

Prepaging / Pure demand paging

 

   - 처음 프로세스가 demand page를 구성하는 두가지 방식이 존재한다. Preparing은 미리 중요하다고 생각되는 페이지를 준비, 등록해두는 것이고, Pure demand paging 은 아무것도 등록하지 않은 채로 page fault routine을 통해 페이지 테이블을 채워간다. 이렇게 메모리를 아무것도 적재하지 않은채로 시작하면 정말 꼭 필요한 페이지만 적재하기 때문에 메모리 효율성은 증가하나, page fault 과정을 반복하면서 초반 속도가 느리다는 단점이있다.

 

Comments