Operating System Concepts 10장 Virtual Memory

[운영체제 정리] · 2024. 12. 17. 17:43

10.2 Demand paging

  • 필요할 때 가지고 온다. 요구가 있을 때 할당해준다. 

 

 

10.4 Page Replacement

  • 메모리에 n개의 프레임이 있다.
  • 프로세스를 생성할 때 프로세스의 크기만큼 page table을 만든다.
  • page table에 아직 main memory의 프레임이 할당이 안돼있기 때문에 invalid로 해둔다. invalid라면 page fault가 발생

 

page table에 접근해서 valid, invalid를 체크한다. invalid 하다면 page fault 예외를 발생시킨다.

 

1번 page table을 찾아갔는데 invalid

2번 page fault 발생 trap os 커널로 넘어감

3번 free frame을 가져와서 사용 가능한 프레임을 찾는다.

4번 할당된 페이지를 새롭게 할당된 frame에 집어 넣는다.

5번 스토리지 읽기가 완별할때, 

 

 

 

process 메모리의 사이즈가 4이면, page talbe의 사이즈도 4 똑같다.

 

 

 

victim을 고르는 알고리즘 

 

 

10.4.2 FIFO

  • 먼저 온 frame을 뺀다

 

10.4.3 Optimal Page Replacement

  • 최선의 정책
  • page fault 가 최소로 일어나도록

 

10.4.4 LRU Page Replacement

  • 최근에 사용안한거를 뺀다.
  • 이게 제일 Optimal에 가까움
  • 단점은 Overhead가 크다 

 

 

10.4.5.2 Second -Chance Algorithm

FIFO + LRU 개념을 합침 : 처음부터 돌면서 참조한 흔적이 있으면 넘어간다. 

그 참조한 흔적은 reference bits

  • LRU보다 구현이 간단하다.
  • LRU의 개념은 그대로 가지고 감

 

10.4.5.3 Enhanced Second - Chance Algorithm

 

R M 

(0,0) => 참조도 안됬고 modified도 안됬다 참조하기 최적의 page

 

 

메인메모리가 커지면 컴퓨터 성능이 좋아진다. 왜? => page fault가 적게 발생하니까

 

maximum threshold,minimum threshold

  • free frame의 수를 최대치와 최소치를 정해놓고 쓴다.
  • 이것을 reclaming이라고 한다.

 

Thrashing

page의 수가 많아질 수록 성능이 올라가지만 임계점을 넘으면, 즉 과부하가 걸리면 성능이 떨어진다. 이걸 Thrashing이라고 한다.

 

10.6.2 working set Model

아래 사진에서 페이지 폴트수가 낮은 부분은 루프에 들어간 것이다.

 

 

10.6.3 Page - Fault Frequency

 

working set은 이론적으로 그럴 듯 하지만 실제로 구현할때는 runtime때에 오버헤드도 크기 때문에 page-fault frequency 전략을 사용하여 frame 수가 upper bound와 lower bound 사이에 있도록 관리한다. 

 

10.7memory Compression

 

free frame list

 

modified fram list

 

일반적으로 3개의 페이지를 하나에 집어넣는 알고리즘을 사용한다.

 

 

10.8 커널 메모리 할당

 

  • 커널메모리는 일반 메모리와는 다른 방법으로 할당된다. 두가지 주요한 이유가 있다.
  • 1. 커널은 다양한 크기의 데이터 구조를 요청한다. 그 결과로 커널은 메모리는 보수적으로 메모리를 사용해야하고 fragment때문에 낭비를 최소화하도록 시도한다. 이것이 커널에서 paging system을 사용하지 않는 이유이다.
  • 2.가상 메모리 인터페이스의 이익 없이 연속할당을 한다.

 

10.8.1 Buddy System

 

  • 연속 할당에서 fragmentation을 줄이기 위해 사용

버디 시스템에서는 메모리가 2의 제곱수 크기로 나누어집니다. 각 메모리 블록은 "버디(buddy)"라는 쌍을 이루며, 두 버디는 동일한 크기를 가지고 있습니다. 메모리 블록을 분할하거나 병합할 때 항상 이 쌍으로 처리합니다.

작동 원리

  1. 메모리 분할:
  2. 메모리 병합:

버디 시스템의 장점

  • 빠른 할당과 해제
  • 단편화 감소

 

 

10.8.2 Slab Allocation

 

슬랩 할당(Slab Allocation)은 커널 메모리 할당을 효율적으로 처리하기 위한 메모리 관리 기법입니다. 주로 운영체제 커널에서 사용되며, 자주 사용되는 데이터 구조체에 대해 메모리를 미리 할당하여 관리하는 방식입니다. 이 기법은 메모리 할당과 해제의 오버헤드를 줄이고, 메모리 단편화를 방지하는 데 중점을 둡니다.

주요 개념

  1. 캐시 (Cache):
  2. 슬랩 (Slab):
  3. 슬랩 할당기 (Slab Allocator):

 

10.3 copy on Write

 

clone() : 쓰레드를 만드는 명령어, 부모와 내가 뭘 공유할 것인가를 파라미터로 보낸다.

vfork() : virtual memory fork vfork 부모 프로세스를 정지상태로 만든다.주소 공간을 자식 프로세스와 공유한다. fork 부모 프로세스의 주소 공간을 복사하여 자식 프로세스를 생성하지만 vfork 그렇지 않다. exec() 하는 순간에는 부모와 자식프로세스는 독립적인 프로세스가 된다.