본문 바로가기

Computer Science/운영체제

[운영체제] CH9. Virtual Memory(1)

Virtual Memory

멀티 프로그래밍을 위해서는 여러 개의 프로세스들을 동시에 메모리에 올려두어야 한다. 가상 메모리 기법은 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법으로, 말 그대로 없는 것을 있는 것처럼 보이게 하는 기술이다.

하나의 프로그램은 실질적으로 사용하는 메모리가 그리 많지 않다. 따라서 프로그램을 실행할 때, 프로그램 전체를 메모리에 올리지 않고 일부분만 올림으로써 더 많은 프로그램을 메모리에 올릴 수 있는 것이다. -> 결국 이 역시도 리소스를 최대한 쥐어짜내기 위함이다.

 

물리적인 메모리의 주소 변환은 운영체제가 관여하지 않는다.

하지만 virtual memory 부분은 운영체제가 전적으로 관여한다.

 

이 챕터에서 다루는 내용은 Paging 기법을 사용한다고 가정한다.

 

실제로도 대부분의 시스템은 Paging 기법을 사용하고 있다.

 

 

Demand Paging

실제로 필요할 때 페이지를 메모리에 올리는 기법이다.

Paging 기법은 프로그램이 실행될 때 그 프로세스를 구성하는 주소 공간의 페이지를 한꺼번에 메모리에 올리는 것이 아니라, Demand Paging 기법을 사용해서 요청된 페이지만 메모리에 적재하는 것이다.

 

Damand Paging 기법을 사용함으로써,

  • I/O 양의 감소 - 프로그램에서 빈번히 사용되는 공간은 지극히 제한적이다. 좋은 SW는 특별한 예외 상황에 대한 대비를 해 놓는데, 그런 잘 사용되지 않는 부분을 올리지 않고 필요한 부분만 올림으로써 I/O 양을 줄일 수 있다.
  • Memory 사용량 감소
  • 빠른 응답 시간
  • 더 많은 사용자 수용

와 같은 이점이 있다.

 

Valid/invalid bit의 사용

Invalid - 사용되지 않는 주소 영역인 경우나 페이지가 물리적 메모리에 없는 경우를 의미한다.

처음에는 모든 page entry가 invalid로 초기화되어 있다.

주소 변환 시에 invalid bit이 set 되어 있으면 page fault 가 발생한다.

 

Page Fault

invalid page를 접근하면 MMU가 trap을 발생시키게 되고 (page fault trap), CPU가 운영체제에게로 넘어간다. (Kernel mode)

Kernel mode에서 page fault handler(프로그램)가 호출된다.

다음과 같은 순서로 page fault를 처리한다.

  1. 잘못된 요청(e.g bad address, protection violation)인 경우에는 abort 한다.
  2. 빈 페이지 프레임을 얻는다. (없으면 뺏어온다: replace)
  3. 해당 페이지를 디스크에서 메모리로 읽어온다.
    1. disk I/O가 끝나기까지 이 프로세스는 CPU를 preempt 당한다.(block 상태로)
    2. Disk read가 끝나면 page tables entry에 기록하고, valid bit를 갱신한다.
    3. ready queue에 프로세스를 넣는다.
  4. 이 프로세스가 CPU를 잡고 다시 running 상태가 된다.
  5. 중단되었던 인스트럭션을 재개한다.

 

 

Free frame이 없는 경우

빈 프레임이 없는 경우, 기존에 있는 페이지를 쫓아내야(victim) 한다. -> Page replacement

이 때는 곧바로 사용되지 않을 페이지를 쫓아내는 것이 좋다.

동일한 페이지가 여러 번 메모리에서 쫓겨났다가 다시 로드된다면 오버헤드가 클 것이다.

 

Replacement Algorithm

쫓아낼 페이지 프레임을 결정하는 알고리즘이다.

page-fault rate를 최소화하는 것이 목표이다.

 

주어진 page reference string에 대해 page fault를 얼마나 내는지를 계산해서 알고리즘의 성능을 평가한다.

 

reference string의 예

1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5

 

 

 

 

 

 

 

본 포스팅은 이화여대 반효경 교수님의 강의와 경북대 탁병철 교수님의 강의를 토대로 작성한 글입니다.