-
메모리 관리(Memory Management)CS/OS(운영체제) 2022. 6. 12. 18:52728x90
정적 할당
- 프로그램 실행 전에 할당하는 것.
- 정적 , 전역 변수를 선언해야 함.
동적 할당
- 런타임 시점에 할당하는 것.
- 프로그램이 동적으로 메모리를 할당한다. (요구될 때)
동적 할당이 필요한 이유 : 나중에 얼마나 많은 메모리가 사용될 지 정확히 알 지 못하기 때문이다.
Memory Management
메인 메모리는 두 가지 부분으로 나뉜다.
1. 운영체제 부분(resident monitor, kernel)
2. 유저 부분 ( 여러 프로세스들을 수용하기 위해 더 많이 서브로 나뉨.)
요구 사항 : 이전 , 보호 , 공유 , 논리적 조직, 물리적 조직
이전(Relocation)
메인 메모리는 일반적으로 여러 프로세스들 사이에서 공유된다.
- 프로그램이 어디에 배치될 지는 미리 알 수 없음.
- 프로그래머가 메인 메모리에 상주할 다른 프로그램을 미리 아는 것은 불가능하다.
- 그러므로 프로그램이 이동될 수 있는 가능성을 고려해야 한다.
- 프로세서 utilization을 극대화하기 위해 메인 메모리에서 활성 프로세스를 교환할 수 있어야 함.
- 대신 프로세스를 다른 메모리 영역으로 재배치 해야 할 수도 있음.
보호(Protection)
각 프로세스는 다른 프로세스에 의한 원치 않는 간섭으로부터 보호되어야 한다.
- 해당 프로세스에 할당된 메모리 공간만 참조하도록 하기 위해
- 프로그램의 위치를 예측할 수 없기 때문에 컴파일 시 절대 주소를 확인할 수 없음.
- 대부분 주소의 동적 변환을 허용함.
- 따라서 프로세스의 의해 생성된 모든 메모리 참조는 실행 시 확인되어야 한다.
- 프로세서는 실행 지점에서 이러한 명령을 중단할 수 있어야 함.
공유(Sharing)
어느 보호 메커니즘이라도 프로세스들이 메인 메모리의 같은 부분에 접근하는 것을 유연하게 허용해야 한다.
- 여러 프로세스가 동일한 프로그램을 실행하는 경우, 각 프로세스가 별도의 복사본을 갖는 것 보다 동일한 복사본에 접근할 수 있도록 하는 것이 유리하다.
- 커널 코드와 데이터는 공유 주소 공간이며 모든 사용자 프로세스에 의해 공유된다.
논리적 조직(Logical Organization)
실제 물리적 메모리와 프로그램 구성이 다르다.
- 대부분의 프로그램은 모듈로 구성되며, 모듈 중 일부는 수정할 수 없고, 일부는 수정할 수 있는 데이터를 포함한다.
- Base & Bounds Problem : 주소 공간과 물리적 메모리의 연속적 매핑
- 모듈 수준에서 공유 및 보호 기능을 제공하고 효과적인 메모리 공간을 사용 할 수 있음.
물리적 조직(Physical Organization)
컴퓨터 메모리는 적어도 두 개의 레벨로 조직되어 있음. ( 메인 메모리와 세컨더리 메모리)
- 이는 두 메모리 레벨 사이에서 정보를 이동하는 작업이 시스템 책임이어야 한다는 것을 일컫는다.
주소 종류
Symbolic address(기호 주소)
- 소스 코드에 사용되는 주소. 변수 이름, 상수 및 명령 레이블은 기호 주소의 기본 요소
Logical address(논리 주소)
- 프로세스(또는 페이지 번호 및 오프셋 표현)의 위치를 지정.
- 주소 공간의 상대 주소가 0부터 시작됨.
- 컴파일러는 컴파일 시에 기호 주소를 논리 주소로 변환함(Ex. 이 모듈의 시작부터 10바이트)
Physical address(or absolute address)
- 메인 메모리의 실제 위치를 지정.
- 프로그램이 메인 메모리에 로드될 때 로더가 이러한 주소를 생성한다.
주소 공간(Address space)
메모리에서 프로세스의 관점
- 주소 공간은 프로그램 또는 프로세스에 사용할 수 있는 메모리의 유효한 주소 범위
- 주소 공간은 0에서 시작함.
동적 주소 변환
- 각 CPU 내의 하드웨어 레지스터(Ex. 기본 레지스터 및 경계 레지스터)
- 메모리 관리 장치(MMU)의 일부
기능 : 가상 주소를 물리적 주소로 변환, 물리적 메모리의 모든 위치에 주소 공간을 배치할 수 있음, 주소 변환 처리 투명
메모리 할당(Memory allocation)
연속 할당 : Fixed partitioning, Dynamic partitioning, Buddy system
비연속 할당 : Paging, Segmentation
고정 분할 방식
1. equal-size partition
- 사용 가능한 메모리를 관리하기 위한 가장 간단한 방법은 고정된 경계를 가진 영역으로 분할하는 것.
- 사용 가능한 파티션이 있는 경우 해당 파티션에 프로세스를 로드할 수 있음.
- 모든 파티션이 아직 실행할 준비가 되지 않은 프로세스로 채워진 경우, 새 프로세스를 위한 공간을 확보하기 위해 이러한 프로세스 중 하나를 교체해야 한다.
- 비교적 구현이 쉽다.
단점 : 메인 메모리 utilization이 비효율적이다.(전체 파티션을 차지하는 모든 프로그램, 내부 단편화로 인해 로드된 데이터 블록이 파티션보다 작기 때문에 공간이 낭비됨.) , 시스템에서 지정된 파티션 수가 시스템의 활성 프로세스 수를 제한함 , 프로그램이 너무 커서 파티션에 맞지 않을 수 있기 때문에 오버레이를 사용하여 프로그램을 설계해야 함.
2. unequal-size partition
프로세스를 파티션에 할당하는 두 가지 방법이 있음
각 파티션에 대한 다중 큐 : 각 프로세스를 포함할 가장 작은 파티션에 할당하는 것
모든 프로세스에 대한 단일 큐 : 프로세스를 유지할 수 있는 사용 가능한 가장 작은 파티션을 선택하는 것
강점 : 상대적으로 구현이 쉬움 , 적은 OS 오버헤드
약점 : 비효율적인 메모리 활용률(내부 조각화로 인해) , 멀티프로그래밍 차수 제한(시스템에 지정된 파티션 수가 활성 프로세스 수를 제한), 프로세스 크기 제한(프로그램이 너무 커서 파티션에 맞지 않을 수 있기 때문에)
동적 분할 방식
고정 분할 방식의 여러 문제점을 해결하기 위해 동적 분할 방식이 발전됨.
- 파티션이 동적으로 생성됨(파티션의 길이와 수가 다양함)
- 프로세스가 런타임에 메모리 할당을 요청할 때 필요한 만큼의 메모리가 정확히 할당됨.
외부 조각화 : 시간이 흐를수록, 메모리는 더욱 더 조각화됨
메모리 압축 : OS는 모든 사용 가능한 메모리가 한 블록에 함께 있도록 프로세스를 전환함.
동적 분할 방식은 메인 메모리의 사용 가능한 블락을 선택하기 위한 3가지 알고리즘이 있음.
1. First-fit : 처음부터 메모리 스캔을 시작하고 사용 가능한 첫 번째 블록을 선택한다.
2. Next-fit : 마지막 배치 위치에서 메모리 스캔을 시작한다.
3. Best-fit : 요청에 가장 가까운 크기의 블록을 선택한다. ( 베스트 핏 알고리즘은 이름과 다르게 보통 가장 성능이 떨어지는 알고리즘임)
강점 : 내부 조각화가 없음, 메모리 사용이 더 효율적임
약점 : 외부 조각화 , 외부 조각에 대응하기 위해 압축에 필요한 CPU 시간 낭비
버디 시스템(Buddy System)
버디 할당 - 메모리를 요청하면 커널이 여유 공간을 분할함.
메모리 블락은 2^K워드 크기로 사용할 수 있음.
2^(U-1) < s <= 2^U와 같은 크기의 요청이 있을 경우, 전체 블록이 할당되고 그렇지 않으면 블록이 2^(U-1)크기의 동일한 버디 두 개로 분할됨.
2^(U-2) < s <= 2^(U-1)인 경우 요청은 두 버디 중 하나에 할당됨. 그렇지 않으면 버디 중 하나가 다시 반으로 분할됨. 이 프로세스는 가장 작은 블록이 사이즈보다 더 크거나 같을 때 까지 계속됨.
요청한 블록이 반환되면 커널이 두 공간을 병합함.
Ex.) 7KB 블록 요청
버디 시스템 예시
분산 적재(Paging)
비연속 할당
프로세스는 동일한 크기의 작은 고정 크기 chunk로 나뉨.
page : 프로세스의 chunks
- 메모리를 비교적 작은 고정 동일 크기 chunk로 분할
Frame ( or page frame ) : 메모리의 chunks
Page table(or Page mapping table) : 프로세스의 각 페이지에 대한 프레임 위치를 포함. 각 프로세스에 대해 운영 체제에서 유지 및 관리
장점 : 프로세스 마지막 페이지의 일부만으로 구성된 내부 조각화 , 외부 조각화가 없음.
주소 해석(Paging)
Problem of Base & Bounds
- 주소 공간을 물리적 메모리에 연속적으로 매핑
- 새로운 주소 변환 접근 방식 필요
페이지 크기(프레임 크기)는 2의 거듭제곱이어야 한다.
- 상대 주소(프로그램의 원점을 기준으로 정의)와 논리주소(페이지 번호 및 offset으로 표시)가 동일함.
- 실행 시 동적 주소 변환을 수행하는 기능을 하드웨어에 구현하기가 비교적 쉽다.
분산 적재(Segmentation)
비연속 할당
- 주소 공간을 세그먼트로 나누고, 각 세그먼트를 물리적 메모리에 독립적으로 매핑
- 프로세스가 unequal-size 세그먼트로 나뉨. (Ex. 코드 세그먼트, 힙 세그먼트, 스택 세그먼트)
- 세그먼트 테이블 (or 세그먼트 매핑 테이블) : 각 세그먼트에 대한 제한 및 기준 포함 , 각 프로세스에 대해 운영 체제에서 유지 및 관리
장점 : 분할로 동적 파티셔닝과 같은 내부 조각 제거 , 외부 파편화 발생
728x90'CS > OS(운영체제)' 카테고리의 다른 글
가상 메모리(Virtual Memory) 2 (0) 2022.06.12 가상 메모리(Virtual Memory) (0) 2022.06.12 교착 상태(DeadLock) (0) 2022.06.12 동기화(Synchronization) 2 (0) 2022.06.12 동기화(Synchronization) (0) 2022.06.01