단편화 문제
내부 단편화(interal fragmentation)
- 메모리를 나눈 크기보다 프로그램이 작아서 들어가지 못하는 공간이 많이 발생하는 현상
외부 단편화(external fragmentation)
- 메모리를 나눈 크기보다 프로그램이 커서 들어가지 못하는 공간이 많이 발생하는 현상
메모리 집약/통합
- 외부 단편화를 해결하기 위한 방법으로 메모리 집약(Compaction)이 있으나 비용이 매우 많이 듦
- 이외에도 인접한 외부 단편화 두 공간을 합치는 통합(coalescing) 방법도 있음
연속 할당
프로세스를 메모리에 올릴 때 주소 공간을 메모리에 연속적으로 적재하는 방식
고정 분할 방식(fixed partition allocation)
- 메모리를 미리 나누어 각 분할에 하나의 프로세스를 적재하는 방식
- 분할의 크기는 모두 동일할 수도 있고 서로 다를 수도 있음
- 동시에 메모리에 올릴 수 있는 프로그램의 수가 고정되어 있으며 수행 가능한 프로그램의 최대 크기가 제한되어 융통성이 떨어짐
- 내부 단편화와 외부 단편화 문제가 발생할 수 있음
가변 분할 방식(variable partition allocation)
- 매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용하는 방식
- 프로그램의 크기를 고려해 메모리를 할당하고 기술적으로 관리할 수 있는 기법이 필요
- 내부 단편화는 발생하지 않고 외부 단편화는 발생할 수 있음
- 프로세스 종료 후 메모리에서 삭제되면 해당 공간이 비게 되면서, 새로운 프로그램을 적재하고자 할 때 어떤 가용공간에 올릴 것인지 결정하는 문제(동적 메모리 할당)가 생김
동적 메모리 할당 알고리즘
- 어느 메모리 공간에 프로세스를 올려야 하는지 결정하는 알고리즘
- Best Fit이 이론적으로는 ‘메모리’를 가장 효율적으로 활용할 수 있는 방법이지만, 그게 최선의 방법이라는 의미는 아님
- First Fit이 가장 좋은 성능을 보임
알고리즘 | 동작 방식 |
First Fit | 리스트를 순서대로 스캔하며 크기에 맞는 빈 공간을 찾음 |
Next Fit | 빈 공간들을 기억해 두었다가 차례대로 검색을 시작 |
Best Fit | 모든 엔트리를 탐색하여 가장 근접한 크기를 찾음 |
Worst fit | 항상 가장 큰 빈 공간을 할당 |
Quick fit | 자주 요청되는 공통 크기의 메모리 공간들을 서로 다른 리스트로 관리 |
불연속 할당
- 메모리를 동일한 크기의 페이지(보통 4KB)로 나누고 프로그램마다 페이지 테이블을 두어 이를 통해 메모리에 프로그램을 할당하는 것
- 자세한 주소 매핑 방법은 이쪽 포스팅을 참고
프레임과 페이지
- 프레임: 주기억장치를 고정된 크기로 나누어 만든 파티션(물리적 개념)
- 페이지: 프로세스를 고정된 크기로 나누어 만든 조각(논리적 개념)
페이징(Paging)
- 메모리와 프로세스를 동일한 크기의 페이지 단위로 나누어 할당하는 것
- 동적 메모리 할당 문제가 없어지지만 주소 변환이 복잡해짐
- 코드, 데이터, 스택 등이 서로 다른 프레임에 쪼개질 수 있기 때문에 권한 작업이 어려워짐
- 그림에서 p는 page number, d는 page offeset을 나타냄
세그멘테이션(segmentation)
- 의미 단위인 세그먼트로 나누는 방식으로, 크기가 동일하지 않음
- 코드, 데이터, 스택, 힙 등은 물론, main과 같은 함수도 의미 단위로 사용할 수 있음
- 페이징과 비슷하게 세그먼트 정보를 저장하는 세그먼트 테이블이 프로그램별로 존재하게 됨
- 공유와 보안 측면에서 좋으며 홀 크기가 균일하지 않은 문제가 발생
페이지드 세그멘테이션(paged segmentation)
- 페이지와 세그먼트 방식을 혼합한 것으로, 한 세그먼트가 여러 개의 페이지로 구성됨
- 홀이 생기는 문제가 없고, 메모리에 페이지 단위로 올라가기 때문에 allocation 문제가 발생하지 않음
References
'Computer Science > 운영체제' 카테고리의 다른 글
[운영체제] 페이지 테이블(TLB, 계층/해시/역페이지 테이블) (0) | 2023.03.20 |
---|---|
[운영체제] 가상 메모리, 스와핑, 페이지 폴트 (0) | 2023.03.13 |
[운영체제] 메모리 계층(캐시히트, 지역성, 캐시 매핑) (0) | 2023.03.13 |
[운영체제] 컴퓨터 하드웨어의 구성 요소(CPU, 메모리, 시스템 버스) (0) | 2023.03.12 |
[운영체제] 운영체제란?(운영체제의 구조, 시스템콜) (0) | 2023.03.11 |