운영체제(OS)

Operating Systems 10. Virtual Memory - (3)

아뵹젼 2021. 12. 4.

Allocation of Frames

각 프로세스에게 할당되는 메모리 프레임 수를 정해야 한다.

 

- Equal allocation : 모든 프로세스에게 똑같이 할당

- Proportional allocation : 프로세스의 크기에 비례하여 할당

- Priority allocation : 프로세스 우선순위에 따라 비례할당

 

 

Global vs Local Allocation

- Global replacement : 모든 frame 집합에서 교체할 frame 을 선택한다. 즉, 다른 프로세스로부터 frame 을 가져올 수 있다.

-> 특정 프로세스가 많은 메모리를 차지할 수 있다.

 

- Local replacement : 각 프로세스는 자신에게 할당된 frame 집합에서 교체할 frame 을 선택한다.

-> 바쁜 process 는 계속해서 교체가 발생하고, 여유로운 process 는 남는 frame 이 존재할 것이다.

 

 

NUMA(Non-Uniform Memory Access)

각 프로세스별로 cpu 와 메모리에 접근하는데 걸리는 시간이 다른 시스템이므로, lgroup 이라는 개념을 도입하여 CPU 의 가까운 곳에 frame 을 할당한다.

 

 

 

Thrashing

프로세스가 충분한 page를 할당받지 못하면, page-fault rate 가 매우 높아지게 된다.

이는 <프로세스가 swap-in/out 에 시간을 소비 -> 낮은 CPU 이용률 -> 운영체제는 multiprogramming 정도를 증가시키도록 판단 -> 다른 프로세스가 시스템에 추가됨 -> 더 많은 page fault 발생 -> CPU 이용률 더 악화됨> 의 단계로 이루어지게 된다.

 

 

Demand paging and Thrashing

demand paging 은 locality model 로 설명가능하다.

locality model 이란 프로세스가 실행이 되는 동안 항상 특정한 지역에서만 메모리를 집중적으로 참조하는 것을 말한다.

-> 프로세스가 실행됨에 따라 지역성은 달라진다.

 

이때 프로세스별 locality 의 합이 전체 메모리보다 크다면 thrashing 이 발생한다.

 

 

 

Working-Set Model

프로세스는 일정 시간 동안 특정 주소를 집중적으로 참조하는 경향이 있다. (locality model)

이러한 집중 참조 페이지들의 집합을 working-set 이라고 한다.

 

working-set window △ : 고정된 횟수의 페이지 참조

working set : 현재 시간에서 일정시간△ 이전동안 사용되었던 페이지 집합

WSSi = 5 (t1)&nbsp; / WSSi = 2 (t2)

△가 너무 작으면 locality 를 충분히 수용할 수 없다.

△가 너무 크면 한번에 locality 를 너무 많이 수용하게 된다.

△가 무한대라면 -> 전체 프로그램이 working set 에 포함되는 결과를 낳게 된다.

 

D : 각 프로세스의 working set 을 다 합친 것으로, D가 메모리 크기보다 크다면 thrashing 이 발생한다.

이때는 프로세스를 swap out 하는 것이 필요하게 된다.

 

 

 

Page-fault Frequency

- working-set-model 보다 더 직접적인 방식으로 thrashing 을 조정한다.

- 수용할 수 있는 page fault 에 대해서 상한과 하한을 정해놓는 것이다.

- PFF 가 너무 낮으면, 프로세스는 frame 수를 줄인다.

- PFF 가 너무 높으면, 프로세스는 frame 수를 늘린다.

 

Working Set and Page Fault Rates

프로세스의 working-set 과 page fault 에는 연관이 있다.

프로세스가 처음 실행되면 demand paging 에 의해 page faultl 가 자주 발생할 수 밖에 없으며, 어느 수준까지 실행된 이후에는 page fault 가 줄어들게 된다. 

 

 

Allocating Kernel Memory

- 사용자 모드에서 수행중인 프로세스가 추가적인 메모리를 요구하면 커널이 관리하는 page frame 중에서 할당한다.

- 커널은 다양한 크기의 자료구조를 사용하지만, 필요한 메모리의 양이 대부분 정해져 있다.

- 사용자 모드 프로세스와 달리 메모리 pool 에서 할당하는 정책을 사용한다.

- 일반 프로세스의 페이지는 연속적일 필요가 없으나, 커널은 하드웨어와 직접 상호작용하기 때문에 물리적으로 연속적인 페이지 프레임을 할당 받는다.

 

 

Buddy System

- 2의 지수승으로 커널 프로세스에 메모리를 할당받는 방식이다.

- 예를 들어 256KB 의 메모리가 사용가능할 때, 커널이 21KB 를 할당하려 한다. 

이때 256  은 128 KB로 쪼개지고, 128KB 는 64KB로 쪼개지며, 64KB는 32KB 로 쪼개진다. 

이때 요청된 메모리 크기를 수용할 수 있는 최소 크기로 메모리를 쪼개어 할당하며 이러한 메모리 조각을 buddy 라고 한다. 

작업 종료 후 원본 buddy 와 합치기 좋다는 장점이 있지만,

buddy 로 인해 internal fragmentation 이 생길 수 있으며, buddy 생성 시 overhead 가 크다는 단점이 있다.

 

 

 

Slab Allocator

- 슬랩은 하나 이상의 연속된 페이지로 구성된 페이지 집합을 뜻한다.

- 캐쉬는 하나 혹은 그 이상의 슬랩으로 구성된 슬랩의 집합이다.

- 각 커널 구조마다 캐시가 존재한다. (File descriptor, File 객체, Semaphore 등) 

- 슬랩 할당기는 커널 객체를 저장하는 캐시를 사용한다. (슬랩 상태 = Full, Empty, Partial)

- 슬랩 할당기는 단편화에 의한 메모리 낭비가 없고, 메모리 요청이 빠르게 수행된다.

댓글