Virtual Memory (가상 메모리) - 1

이유석·2022년 3월 14일
0

CS - Operating System

목록 보기
15/20

이전까지의 메모리 관리에서는 하나의 프로그램 전체를 실제 메모리에 올리는 방식을 사용했으나, 가상 메모리를 사용한다면 당장 실행에 필요한 부분만 실제 메모리에 올려서 실행하게 됩니다.

Virtual Memory (가상 메모리)

정의

  • 프로그램 전체가 아닌 필요한 일부분만 실제 메모리에 올리는 기법

장점

  • 프로그램은 더 이상 Physical Memory의 여유 공간이 얼마나 되는지에 대해서 시작도 하기 전에 고민할 필요가 없습니다.
  • 프로그램이 전체 다 올라가지 않기 때문에, 더 많은 프로그램들을 동시에 메모리에 올려 작업을 수행할 수 있습니다.
  • 한 번에 올리는 소스 코드의 양이 적기 때문에 Disk와 Memory간 I/O 작업 속도가 빨라집니다.

구현 방식

  • Demand Paging
  • Demand Segmentation

Demand Paging

Valid-Invalid Bit

  • Valid-Invalid Bit를 사용하기 위해, 하드웨어적인 지원을 필요로 합니다.
  • 메모리에 올리려는 것이 현재 메모리에 존재하는지, 아니면 Disk에 존재하는지를 알아야 합니다.
    (이전 Valid-Invalid Bit의 사용법에 약간의 정보가 더 추가된 것 입니다.)

Case 1) Bit = Valid

  • Bit가 Valid라는 뜻은 두 가지 의미를 내포합니다.
    • 해당 Page Table의 인덱스는 접근이 가능하다는 뜻
    • 해당 부분은 실제 메모리에 올라와 있다는 뜻

Case 2) Bit = Invalid

  • Bit가 Invalid라는 뜻은 두 가지 의미를 내포합니다.
    • 해당 Page Table의 인덱스는 접근이 불가능하다는 뜻
    • 해당 부분은 현재 Disk에 존재한다는 뜻 (실제 메모리에 올라와 있지 않다는 뜻)

Page Fault

정의

  • 지금 실행시켜야 할 Page가 실제 메모리에 올라와 있지 않는 것을 말합니다.

Page Fault Handling 과정

  1. Page Fault발생
  2. CPU는 운영체제에게 알리고, 운영체제는 잠시 동안 CPU 작업을 멈춥니다.
  3. Disk에서 해당 부분을 찾습니다.
  4. 3번에서 찾은 부분을 실제 메모리의 비어있는 Frame (free frame)에 올립니다.
  5. Page Table의 해당 부분의 Bit를 Valid로 갱신합니다.
  6. Page Fault를 일으켰던 명령어를 다시 실행하여 작업을 재개합니다.

Free Frame List

  • Page Fault 발생 시, 운영체제는 Disk로부터 필요 Page를 메모리의 Free Frame에 전달해야 합니다.
  • 운영체제는 Free Frame을 쉽게 찾기 위해서, Free Frame List를 유지합니다.

  • 운영체제는 Zero-Fill-On-Demand기술을 활용하여 Free Frame들을 할당합니다.
    • 할당되기 전에, Frame들의 content는 0으로 채워집니다.
  • System 시작 시, 모든 이용가능한 메모리들은 Free Frame List에 채워집니다.

Page Replacement

정의

  • 실제 메모리에 Free Frame이 존재하지 않을 시 해결책
  • 실제 메모리에 있는 Frame을 지금 당장 실행해야 할 Page에게 넘겨줄 Victim Frame을 찾는 과정입니다.

    Victim Frame : 자주 사용되지 않는 Frame

특징

  • Page Fault를 적게 발생할수록 좋은 알고리즘 입니다.
  • Modify (Dirty) Bit : Page Replacement 알고리즘이 Victim Frame을 찾는 것을 도와줄 수 있는 것
    • Page Table에 Dirty Bit Column이 추가된다.
    • 해당 Page의 content가 실제 메모리에 load되었고 수정 되었는지 표시한다.

Modify (Dirty) Bit 작동 원리

  • Page의 content가 수정되었다면, Disk와의 동기화를 위해 Swap-Out 될 필요가 있습니다.
  • 이러한 Swap-In / Swap-Out 은 많은 비용을 발생시킵니다.
  • Victim Frame을 찾을 때는 Modify Bit가 0인 Frame을 우선적으로 찾게 됩니다.
    • 즉, Swap-Out될 필요가 없는 (= 수정이 되지 않았던) Frame
  • Swap-Out될 필요가 없으니, 그 자리에 덮어 씌어버리면 되기 때문입니다.

Page Replacement 과정

  1. 원하는 Page를 Disk에서 찾는다.
  2. Free Frame을 찾는다.
    a) Free Frame을 찾았다면 사용하면 된다.
    b) Free Frame이 존재하지 않는다면, Page Replacement 알고리즘을 통해 Victim Frame을 찾는다.
  3. Disk에서 가져온 Page를 2번 과정에서 찾은 Frame에 넣고, Frame Table과 Page Table을 갱신합니다.
  4. 프로세스를 재실행 합니다.

다음장에서는 Page Replacement알고리즘에 관하여 다룰 예정입니다.

profile
https://github.com/yuseogi0218

0개의 댓글