Memory allocation
Continuous memory allocation (연속할당)
- Uni programming
- Multi programming
- Fixed partition multi programming (FPM)
- Variable partition multi programming (VPM)
Non continuous memory allocation -> Lecture 9 (비연속할당)
Continuous Memory Allocation
- 프로세스(Context)를 하나의 연속된 메모리 공간에 할당하는 정책 (프로그램, 데이터, 스택 등)
메모리 구성 정책
- 메모리에 동시에 올라갈 수 있는 프로세스 수 고려
- 메모리 분할 방법 고민
- 프로세스에게 할당하는 메모리 공간 크기
Uni programming (Multiprogramming degree = 1)
- 프로세스가 한번에 하나만 올라감 (하나의 프로세스만 메모리 상에 존재)
- 가장 간단한 메모리 관리 기법
문제점 1
프로그램 전체가 올라가야 하는데 프로그램의 크기 > 메모리 크기 상태라면 어떻게 해결해야 할까?
프로그램의 크기를 나눠서 메모리에 올리는 것을 생각할 수 있다.
사용자가 이 크기를 나누어 주어야 한다.
해결법
공통적으로 필요한 영역까지만 메모리 상에 올리고 나머지 필요한 부분만 바꿔서 올리면 된다.
Overlay structure
- 메모리에 현재 필요한 영역만 적재
- 사용자가 프로그램의 흐름 및 자료구조를 모두 알고 있어야 함.
- 공통부분만 올려놓고 필요하지 않은 부분을 구분하여 따로따로 번갈아 가면서 올리는 기법
문제점 2
커널을 보호해야 한다. (메모리 상에 프로그램이 올라갈 때 커널영역을 건드리지 못하게 한다.)
해결방법
경계 레지스터(Boundary Register)사용 하여 커널 영역을 보호한다.
그런데 경계 레지스터를 사용하면 User Program가 올라가는 메모리 공간을 차지하게 되어 메모리 공간을
효율적으로 사용하지 못한다.
즉, Low system resource utilization, Low system performance 문제점이 생기며
이를 해결하기 위해 Multi-Programming을 사용하면 된다.
Multi-programming
Fixed Partition Multiprogramming
- 메모리 공간을 고정된 크기로 분할 (미리 분할되어 있다.)
- 각 프로세스가 도착한다면 적당한 공간에 넣어주면 된다.
- 각 프로세스는 하나의 분할(Partiotion)에 적재한다
- 파티션의 수 = K (Multiprogramming degree)
- 자료구조의 예
Partiton: 이름, startaddr: 시작주소, size: 크기, 현재 프로세스id 정보들이 있으면 Fixed partition 멀티프로그래밍을 할 수 있다.
- 커널 및 사용자 영역 보호
각 파티션의 경계마다 Boundary register를 두면 이런 문제를 해결 할 수 있다.
Fragmentation (단편화)
- 40MB를 요구하는 프로세스가 진입했다고 가정한다.
- 마지막 파티션에 할당을 한다.
- 21MB를 요구하는 프로세스가 진입하면
- 4번째 파티션에 할당을 한다.
- 프로세스 1, 프로세스2가 진입한 공간에는 10MB, 9MB의 남은 공간이 발생하였다.
- 다른 프로세스는 이 공간을 사용하지 못한다. (메모리가 낭비됨)
이 경우를 Internal fragmentation(내부단편화) 이라고 한다. (Partition 크기 > Process 크기)
- 남은 공간의 크기는 44MB가 남았다.
- 프로세스 30MB가 진입하였는데 할당해 줄 수 있는 공간이 없다.
- 메모리는 44MB가 남아있는데 사용하지 못한다.
메모리 공간은 충분하지만 연속된 파티션이 존재하지않아(프로세스가 진입할 수 있는 충분한 크기의 파티션이 없어서)
프로세스는 진입하지 못하고 메모리가 낭비된다. 이러한 현상을 External Fragmentation(외부단편화) 이다.
요약
- 고정된 크기로 메모리 미리 분할
- 메모리 관리가 간편함 (Low overhead)
- 시스템 자원이 낭비 될 수 있음
- Internal/external fragmentation 이 발생
본 포스트는 KOREATECH의 HPC LAB. Duksu Kim 교수님 OS강의를 기반으로 정리한 내용입니다.
상업적 의도가 아닌 공부한 것을 정리해 놓은 목적으로 게시한 포스트입니다.
아래의 출처에서 자세한 내용을 수강하실 수 있습니다.
https://www.youtube.com/playlist?list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN
'CS > OS' 카테고리의 다른 글
[OS] 9. Virtual Memory - Non-continuous allocation (0) | 2022.04.15 |
---|---|
[OS] 8. 메모리 관리 - Variable Partition Multi-programming (0) | 2022.04.13 |
[OS] 8. 메모리 관리 - Backgrounds, address binding (0) | 2022.04.10 |
[OS] 7. Deadlock - Detection and Recovery (0) | 2022.04.07 |
[OS] 7. Deadlock - Deadlock Avoidance (0) | 2022.04.05 |