연속 메모리할당
연속 메모리할당이란 멀티 프로세스 환경에서 여러 프로세스 메모리에 연속적으로 로드하는 방법. 크게 고정 분할, 동적 분할 두가지 방식이 있음
고정 분할 방식
메모리 영역을 구분한뒤 각 영역에 프로세스를 할당하는 기법, 분할된 영역의 크기는 서로 다를 수 있음. 메모리에 올릴 수 있는 프로세스 수와 각 프로세스 크기가 제한된다는 단점이 있고, 단편화(Fragment) 문제가 발생할 수 있음.
Process Queue 에 들어오는 순서대로 메인메모리에 프로세스를 할당함 멀티프로그래밍 정도는 메모리에서 동시에 실행할 수 있는 프로세스의 수를 나타냄. 따라서 RAM에 형성된 블록의 수에 따라 시스템의 멀티프로그래밍 수준이 결정됩니다.
장점
- 추가로 메모리에 할당할 수 있는 프로세스의 수를 결정하는 것이 쉬움
- 순차적으로 할당하기 때문에 상대적으로 구현하기 쉬움
- 한번에 많은 프로세스를 메모리에 유지할 수 있어서 다중 프로그램이 필요한 시스템에서 사용가능
단점
- 내부 단편화, 외부 단편화 발생
- 블록의 개수보다 많은 프로세스 할당 불가능
가변 분할 방식
고정크기의 블록이 제공되지 않음, 대신 필요에 따라서 각 프로세스에 가변 크기 블록이 제공됨. 즉, 공간을 사용할 수 있는 경우 새 프로세스가 요청할때 마다 이 양의 RAM 이 할당 되는 방식임
장점
- 내부 단편화가 발생하지 않음
- 큰 프로세스에도 공간할당 가능
단점
- 프로세스 및 사용가능한 메모리 공간에 대한 기록을 유지하기 어려움
메모리 할당 알고리즘
가용 메모리 공간에서 프로세스가 로드 될수 있는 메모리 공간을 찾음
최초 적합 (First-Fit)
- 프로세스의 메모리를 가용할 수 있는 가장 첫번째 영역(hole)에 데이터를 넣는것
최적 적합 (best-Fit)
- 프로세스의 메모리를 가용할 수 있는 가장 fit 한 장소에 넣는것
최악 적합 (worst-Fit)
- 가용영역중 프로세스의 메모리 크기와 가장 차이가 많이 나는 곳에 넣는것
메모리 압축
프로세스가 사용중인 메모리 영역을 재배치하여 외부 단편화 영역중 hole 을 합쳐서 새 프로세스에게 메모리를 할당해주기 위해 사용할 수 있음
비연속 메모리 할당
프로세스의 메모리 영역을 나눠서 물리 메모리 공간에 저장하는 방식 대표적으로 페이징과 세그멘테이션이 있음
페이징
프로세스의 논리 메모리 영역과 물리 메모리 영역을 각각 일정한 크기의 페이지(page) 와 **프레임(**frame)으로 나눔. 이때 페이지와 프레임의 크기는 동일함
페이지와 프레임을 매핑하는데는 Page Table을 사용함 => 페이지 테이블은 각 프로세스의 PCB에 저장됨
- 장점
- 프로세스의 주소 공간 사용 방식과 상관없이 효율적으로 주소 공간 개념을 지원할 수 있음
- 힙과 스택이 커지는 방향, 어떻게 사용되는가에 대한 가정을 하지 않아도 됨
- 주소 공간의 각 가상 페이지에 대한 물리 메모리 위치 기록을 위하여 운영체제는 프로세스마다 페이지 테이블이라는 자료구조를 유지함
- 페이지 테이블은 프로세스마다 존재함
- 단점
- 내부 단편화 문제 발생가능 페이지 크기 나누었을때 로 메모리가 딱 떨어질 수 없는 경우도 발생할 수 있기때문에
세그멘테이션
프로세스의 메모리 영역을 논리적 단위인 세그멘트로 분할하여 메모리에 할당함. 파일 내 함수단위나 스택, 힙 영역을 의미하기도 함
세그멘테이션 테이블을 사용해 세그멘트의 논리주소를 물리주소로 매핑함
세그멘테이션 테이블의 구성
- 세그멘트 인덱스 (index)
- 세그멘트 크기 (limit)
- 시작 주소 (base)
- 단점
- 프로세스의 메모리를 할당/해제 하는 과정에서 외부 단편화 문제 발생가능
- 메모리에 로드된 스택 세그멘트에서 오버플로가 발생하면 다른 프로세스와 영역이 겹칠 수 있음
참고
https://www.javatpoint.com/contiguous-memory-allocation-in-operating-system
'운영체제' 카테고리의 다른 글
[운영체제] - 좀비와 고아 프로세스 (0) | 2024.01.16 |
---|---|
[OSTEP-28] - 락s (1) | 2024.01.12 |
[OS] - 메모리 관리 전략 (1) (1) | 2024.01.05 |
[운영체제] - 스케줄러 (0) | 2024.01.04 |
[OSTEP-20] Advanced Page Tables (0) | 2023.12.27 |