메모리 관리
메모리란 ?
- 데이터를 프로세서에서 연산하기 전에 일시적으로 저장하는 저장공간
- 일반적으로 메모리는 메인 메모리를 의미한다.
auxiliary storage = HDD
Block : 보조기억장치와 주기억장치 사이의 데이터 전송 단위 ( 1~4 KB )
Word : 주기억장치와 레지스터 사이의 데이터 전송 단위 (16 ~ 64 bits)
메모리의 프로그램 적재 방법
- 연속 메모리 적재 방법 (프로세스 전체를 연속적으로 올린다.)
- 비연속(분산) 메모리 적재 방법 (연산에 필요한 부분을 비연속적으로 올려 사용한다.)
배치 정책 : 프로세스를 메모리 어느 위치에 저장할 것인지 결정
대치 정책 : 메모리가 꽉 찼을 경우 어떤 프로세스를 제거할지
Memory Mapping
Address Binding : 프로그램의 논리 주소를 실제 메모리의 물리 주소로 매핑하는 작업
Binding 시점에 따른 구분
Compile time binding (컴파일 시)
- 프로세스가 메모리에 적재될 위치를 컴파일러가 알 수 있는 경우
- 적재될 위치가 변하지 않음
- 프로그램 전체가 메모리에 올라가야 한다.
Load time binding (프로세스를 로드할 시)
- 적재 시점(load time)에 시작 주소를 반영하여 사용자 코드 상의 주소를 재설정한다.
실제 메모리의 주소가 400번대 부터 할당해야 하니 360에 400을 더해 Branch 760이 된다.
Run time binding (프로세스를 실행할 시)
- Address binding을 수행시간까지 연기한다.
- 프로세스가 수행 도중 다른 메모리위치로 이동할 수 있다.
- H/W의 도움이 필요하다 (MMU : Memory Management Unit)
연속 메모리 할당
프로세스 (context)를 하나의 연속된 메모리 공간에 할당하는 정책이다.
구성
- 메모리에 동시에 올라갈 수 있는 프로세스 수
- 각 프로세스에게 할당되는 메모리 공간 크기
- 메모리 분할 방법
단일 프로그래밍 환경 (Uni programming)
- 하나의 프로세스만 메모리 상에 존재
- 가장 간단하지만 자원 낭비가 매우 심하다.
다중 프로그래밍 환경 (Multi-programming)
- 고정 분할 할당 : 메모리 공간을 고정된 크기로 분할해 사용한다.
- 각 프로세스는 하나의 partition(분할)에 적재한다.
- Partition 수 = K (Multiprogramming degree)
단점
Internal Fragmentation (내부 단편화)
Partition의 크기 > Process 크기 일 경우 남은 Partition이 낭비되기 때문에 메모리가 낭비된다.
External fragmentation (외부 단편화)
남은 메모리 크기 > Process 크기 이지만, 연속된 공간이 아니라 메모리가 낭비된다.)
가변 분할 방법 (Variable Partition)
- 고정된 경계를 없애고 각 프로세스가 필요한 만큼 메모리를 할당한다.
마찬가지로, 작업이 진행될 수록 내부 단편화가 발생한다.
1. 최초 적합 방법
충분한 크기를 가진 첫 번째 partition을 선택한다.
- simple and low overhead
- 공간 활용률이 떨어진다.
2. 최적 적합 방법
프로세스가 들어갈 수 있는 partition 중 가장 작은 곳을 선택한다.
- 단점 : 작은 크기의 partition이 많이 발생하고, 탐색 시간이 오래 걸린다.
- 장점 : 크기가 큰 partition은 잘 이용하지 않으므로 큰 상태로 유지할 수 있다.
-> 위의 그림에서 16KB를 사용하는 것이 아닌 14KB를 선택함
3. 최악 적합 방법
프로세스가 들어갈 수 있는 partition 중 가장 큰 곳을 선택한다.
- 단점 : 큰 크기의 partition을 확보할 수 없다, 탐색 시간이 오래 걸린다.
- 장점 : 작은 크기의 partition 발생을 줄일 수 있다.
-> 위의 그림에서 30KB를 선택
가변 분할 방법의 메모리 단편화 문제 해결 방법
1. 메모리 통합 방법
- 작업이 끝났을 경우 인접한 빈 공간과 하나로 합침
2. 메모리 압축 방법
- 메모리의 내용을 적절히 움직여 사용 가능 공간을 큰 블록 하나로 만든다.
-> 빈 공간들을 합친다.
- 단점 : 메모리를 압축하는 동안 시스템은 모든 일을 중지해야 한다. (시스템 자원의 소모가 크다)
Address Mapping이 컴파일이나 적재할 때 실행된다면 압축을 수행할 수 없다. 대체로 동적일 때만 가능하다.
Reference
운영체제:그림으로 배우는 구조와 원리 - 한빛 아카데미