Countinous Memoty Allocation
> 프로세스(context)를 하나의 연속된 메모리 공간에 할당하는 정책이다.
ex) 프로그램, 데이터, 스택 등
이렇게 메모리를 할당하기 위해서는 다음 사항을 고려해야 한다.
1. 메모리에 동시에 올라갈 수 있는 프로세스의 수(Multiprogramming degree)
2. 각 프로세스에게 할당되는 메모리의 공간 크기
3. 메모리 분할 방법
Uni-programming
멀티프로그래밍 디그리 = 1 인 프로그래밍
프로세스가 한 번에 하나만 시스템에 올라가는 프로그래밍으로 간단하다
유니프로 그램의 문제점
1. 만약 프로그램의 크기가 메모리의 크기보다 크다면? 어떻게 될까?
Countinous Memoty Allocation에서는 프로그래밍 전체가 한 번에 올라가야 한다. 그렇다면 프로그램을 잘라서 올려야 한다.
이 과정을 OS가 해주지 않기에 프로그래머가 해주어야 한다.
프로그래머가 해당 프로그램에 대해 어떤 부분은 공통이고 어떤 부분은 분할 가능한지 명확하게 알고 있어야 한다.
이러한 방법으로 해결하는 것을 Overlay structure 라 한다.
2. 프로그램을 올릴 때 커널 영역을 침범한다면?
문제가 생길 것이다 따라서 메모리를 할당할 때 커널 영역은 넘어가지 못하도록 울타리를 쳐주는데
이 울타리를 boundary register (경계 레지스터)라고 부른다.
3. 낭비되는 공간이 많을 것 같은데?
혼자만 올라가기 메모리에 올라가기 때문에 메모리가 낭비되는 곳이 많을 것이고 이는 시스템의 자원 활용도가 낮다는 의미로 시스템 퍼포먼스가 낮아지는 것으로 이어진다.
이를 해결하기 위해 시스템에 여러 개의 프로그램을 올리는 것 Multi-programming으로 해결한다.
Multi-programming
1. Fixed partition Multi-programming (FPM)
메모리 공간을 고정된 크기로 미리 분할해 두어 각 프로세스를 하나의 파티션에 적재하는 것
하나의 파티션에 하나의 프로세스만 들어가는 구조
파티션의 수가 멀티프로그래밍의 디그리와 같다.
파티션이 미리 나누어져 있기 때문에 이들 사이에 서로 침 번하지 않도록 방어하는 바운더리 레지스터를 두어 사용자 영역과 커널 영역을 보호할 수 있다.
Fragmentation(단편화)->메모리 낭비
Internal fragmentation(내부 단편화)
> 파티션의 크기가 프로세스의 크기보다 커서 메모리가 낭비되는 현상
External fragmentation(외부 단편화)
> 남은 메모리 공간들의 크기는 프로세스의 크기보다 크지만 연속된 공간이 아니라 메모리를 할당 못해 메모리가 낭비되는 현상.
장점
고정된 크기로 메모리를 미리 분할하여 메모리 관리가 간편하다
단점
fragmentation문제로 시스템 자원이 낭비될 수 있다.
2. Variable partition Multi-programming (VPM)
픽드 파티션 멀티프로그래밍과 다르게 초기에는 전체가 하나의 영역이었다가 프로세스를 처리하는 과정에서 메모리 공간을 동적으로 분할하여 할당하는 프로그래밍이다.
따라서 딱 필요한 만큼 메모리를 할당하기 때문에 내부 단편화 현상이 발생하지 않는다.
하지만 나누어주고 나서 더 이상 사용하지 않아 메모리를 비울 때는 한번 나뉜 파티션이기 때문에 보다 효율적으로 메모리 공간을 사용하기 위해 아래와 같이 어디에 배치를 해야 할지 고민이 된다.
배치 전략(어디에 배치할까?)
First_fit(최초 적합)
> 앞에서 부터 탐색하여 충분한 크기를 가진 첫 번째 파티션을 선택해 넣는다.
간단하게 구현 가능하지만 공간 활용도가 떨어질 수 있다.
Best_fit(최적 적합)
> 프로세스가 들어갈 수 있는 파티션을 모두 둘러보아 그중에서 차이가 가장 작은 곳에 배치하는 전략이다.
크기가 큰 공간을 유지할 수 있다는 장점이 있지만 모든 파티션을 살펴봐야 하기 때문에 오버헤드가 크고 차이가 작은 파이션에 넣다 보니 활용하기 힘든 크기의 작은 파티션이 많이 발생한다.
Worst_fit(최악 적합)
> 프로세스가 들어갈 수 있는 파티션 중에서 가장 큰 곳을 선택하는 방법으로 작은 크기의 파티션이 발생하는 현상은 줄일 수 있지만 베스트 핏과 마찬가지로 모든 파티션을 살펴봐야 하기에 오버헤드가 크고 큰 크기의 파티션 확보가 어렵다.
Next_fit(순차 최적 적합)
> 최적 적합 전략과 유사하나 State Table에서 마지막으로 탐색한 위치에서부터 탐색하는 방식으로 메모리 영역의 사용빈도가 균등화 된다는 장점이 있다, 또한 오버헤드가 적다.
그럼 메모리 자투리들의 합이 충분함에도 연속되지 않아 프로세스에게 할당 못했던 외부 단편화 문제를 해결하기 위해서는 어떻게 해야 할까?
외부 단편화 문제를 해결 방법
Coaescing holes(공간통합)
위와 같은 문제를 해결하기 위한 첫 번째 방법으로 인접한 빈 영역을 하나의 파티션으로 통합하는 코어링 홀스 방법이 있다.
Storage Compaction (메모리 압축)
두 번째 방법으로는 메모리 압축방법이 있다.
모든 빈 공간을 하나로 통합하는 방법이며 프로세스 처리에 필요한 적재 공간의 확보가 필요할 때 수행된다.
하지만 이 과정을 위해 관련된 프로세스를 중지해야 하고 모든 프로세스를 재배치해주어야 하기 때문에 ㅁ낳은 시스템 자원을 소비한다.
따라서 자주 해주는 것보다 일정 시간 또는 요청이 발생했을 때 사용한다.
'OS > os 공부' 카테고리의 다른 글
9-2. Virtual Memory (Segmentation System) (0) | 2022.01.06 |
---|---|
9-1. Virtual Memory (Non-continous allocation)_Paging system (0) | 2022.01.06 |
8.Main memory management(1)_용어와 개념리마인드 (0) | 2021.12.30 |
7.Deadlock Resolution (0) | 2021.12.30 |
6.Process Synchronization & Mutual Exclusion (0) | 2021.12.27 |