Virtual Memory

k_bell·2024년 6월 15일
0

운영체제

목록 보기
8/15
post-thumbnail

디스크에 저장되어 있는 프로그램의 코드는 프로그램이 실행될 때, 메모리로 로딩되어야 한다. 그 이유는 CPU와 디스크 사이의 거리는 너무나도 멀기 때문이다. 따라서 CPU는 비교적 가까운 메모리에 프로세스를 할당하고 참조한다. 하지만 메모리는 디스크보다 속도는 빠르지만 저장공간이 부족하다. 우리가 실행해야 될 프로세스는 수도 없이 많은데 말이다.

따라서 메모리에는 현재 실행 중인 프로세스, 그 중에서도 page 만을 로딩해서 사용하기로 했다. 이것이 swapping 이었다.

Virtual Memory

virtual memory(가상 메모리)는 user logical memory와 physical memory를 분리하여, 프로그램 실행 시 일부만 메모리에 적재함으로써 메모리 사용을 최적화하고 시스템 효율성을 높인다.

따라서 가상 메모리를 활용해 우리는 실제 메모리보다 더 큰 용량의 프로그램을 실행할 수 있는 것이다. 프로세스 내에서 사용되지 않는 page는 backing store에 저장해 놓고 그때 그때 필요한 부분만 메모리에 로딩하는 것이다. 또한 많은 프로그램이 concurrent하게 실행될 수 있는 이유도 가상 메모리를 활용하기 때문이다.

Demand Paging

Demand paging 은 위에서 말한 것처럼, 필요할 때 필요한 page만 메모리에 로딩한다는 것이다. 따라서 paging 과 swapping 을 결합하여 사용하며, lazy swapper를 통해 page가 필요한 경우에만 메모리에 적재하도록 한다.

with Valid - Invalid Bit

  • v bit
    : in - memory

  • i bit
    : not - in - memory

valid - invalid bit를 통해 해당 page가 메모리에 로딩되어 있는지를 파악할 수 있다. 따라서 page table을 참조했는데 invalid bit를 만나면 page fault 가 발생하게 된다.

page fault : 참조하려는 page가 메모리에 없는 경우.

Handling Paging Fault

1. page fault 발생

: 프로세스가 참조하려는 page가 없는 경우, page fault가 발생한다. 이 경우 CPU는 제어권을 OS에게 넘기고, page fault handling 이 이루어진다.

2. OS의 page table 조회

: OS는 페이지 테이블을 참조하여 valid / invalid bit를 확인해 페이지의 상태를 확인한다. 페이지가 해당 페이지 테이블에 존재하지 않거나, 프로세스가 해당 테이블에 접근할 권한이 없는 경우 abort를 발생시킨다. 페이지가 유효하지만 메모리에 없는 경우 , OS는 페이지를 메모리로 로드하는 과정을 시작한다.

3. free frame 찾기

: OS는 메모리에서 free frame을 찾는다. 만약 free frame이 없는 경우, 사용하지 않는 페이지를 디스크로 swap out 한다.

4. page swap

: 디스크에서 페이지를 읽어와 free frame에 할당한다.

5. page tabel update

: 페이지가 메모리에 로드되면, page table을 업데이트하여 해당 페이지가 메모리에 존재함을 표시한다. (invalid -> valid)

6. Restart the instruction that caused the page fault

Performance of Demand Paging

Page Fault Rate 0 <= p <= 1

if p = 0, no page fault

if p = 1, every reference is a fault

Effective Access Time(EAT)
EAT
= ( 1 - P ) x memory access // ( 1 - p ) = not page fault
++ p ( page fault overhead ++ swap page out ++ swap page in )

Copy - on - Write (COW)

parent process가 fork()를 통해 child process를 만든 경우, 처음에는 두 프로세스가 같은 페이지를 공유한다. ( overhead를 절감하기 위해 )

이때, 한 프로세스가 shared page에 수정 작업을 할 경우 page copy가 발생한다. 두 프로세스가 독립적인 작업을 수행할 필요성이 있기 때문이다.

Zero - Fill - on - Demand

child process가 page 수정을 원해서 COW가 발생할 경우, child process를 위한 page는 0으로 초기화 된 후 생성된다. parent process의 페이지를 그대로 카피하지 않는 이유는 보안성을 높이기 위해서이다. 다른 프로세스 어떤 작업을 수행했는지 알 수 없도록 해서 페이지를 복사하는 것을 zero-fill- on-demand 라고 한다.

0개의 댓글

관련 채용 정보