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 : 현재 시간에서 일정시간△ 이전동안 사용되었던 페이지 집합
△가 너무 작으면 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)
- 슬랩 할당기는 단편화에 의한 메모리 낭비가 없고, 메모리 요청이 빠르게 수행된다.
'운영체제(OS)' 카테고리의 다른 글
Operating Systems 6. Synchronization Tools (0) | 2021.12.04 |
---|---|
Operating Systems 4. Threads & Concurrency (0) | 2021.12.04 |
Operating Systems 10. Virtual Memory - (2) (0) | 2021.12.04 |
Operating Systems - 10. Virtual Memory (0) | 2021.10.15 |
Operating Systems 9. Main Memory - (2) (0) | 2021.10.15 |
댓글