코드네임 :

⚙️ 운영체제 - 메모리 할당 (기법,,, 세그멘테이션&페이징) ⚙️ 본문

컴퓨터와 함께해요/운영체제

⚙️ 운영체제 - 메모리 할당 (기법,,, 세그멘테이션&페이징) ⚙️

비엔 Vien 2024. 11. 6. 18:09

메모리 할당 : 운영체제가 새 프로세스를 실행시키거나, 실행중인 프로세스가 메모리를 필요로 할 때, 물리 메모리 할당

 

[ 메모리 할당 기법 ]

1. 연속 메모리 할당 : 프로세스 별로 연속된 한 덩어리의 메모리 할당

- 고정 크기 할당 

- 가변 크기 할당

2. 분할 메모리 할당 : 프로세스에게 여러 덩어리의 메모리 할당

 - 고정 크기 할당 : 페이징

 - 가변 크기 할당 : 세그멘테이션

 

 

[ 연속 메모리 할당 구현 시 ]

1. 하드웨어 지원

 - CPU의 레지스터 필요

   ㄴ base 레지스터 : 현재 CPU가 실행중인 프로세스에게 할당된 물리 메모리의 시작 주소 저장

   ㄴ limit 레지스터 : 현재 CPU가 실행중인 프로세스에게 할당된 메모리 크기 저장

 - MMU 필요 (가상주소를 물리주소로 변환 역할)

2. 운영체제 지원

(1) 프로세스 별 메모리 관리

  • 운영체제는 **PCB(Process Control Block)**라는 데이터 구조에 각 프로세스의 정보를 저장합니다.
    이때, 물리 메모리의 시작 주소와 크기 정보도 포함됩니다.
    → 이는 프로세스의 메모리를 추적하고 관리하기 위한 필수 정보

(2) 빈 메모리 영역 관리

  • 연속 메모리 할당 방식에서는 연속된 메모리 블록이 필요하므로,
    운영체제가 메모리의 **사용 가능한 빈 영역(free space)**을 추적하고 효율적으로 할당

(3) Base/Limit 레지스터 적재

  • 운영체제는 프로세스를 스케줄링할 때마다 해당 프로세스의 **물리 메모리 정보(시작 주소와 크기)**를
    Base/Limit 레지스터에 로드하여 CPU가 올바른 메모리 영역을 참조하도록 합니다.

 

 

 - 프로세스 별로 할당된 '물리메모리의 시작 주소와 크기 정보 저장' 관리 -> PCB : 메모리 관리 정보 제어 역할도 함

 - 비어있는 메모리 영역 관리

 - 프로세스를 스케줄링하여 실행시킬때마다 '물리메모리의 시작주소와 크기정보'를 base/limit 레지스터에 적재

 

 

⬇️ 해결

 

 

 

[ 단편화 ]

: 프로세스에게 할당할 수 없는 조각메모리 (홀hole)들이 생기는 현상

- 내부 단편화 : 할당된 메모리 내부에 사용할 수 없는 홀이 생기는 현상 (파티션보다 작은 프로세스를 할당하는 경우) 

ㄴ 고정크기 연속 메모리 할당에서 발생하겠네

- 외부 단편화 : 할당된 메모리들 사이에 사용할 수 없는 홀이 생기는 현상 (가변 크기의 파티션이 생기고 반환되는 여러번의 과정에서 여러 홀 생성, 홀이 프로세스의 크기보다 작으면 할당 불가 )

ㄴ 가변크기 연속 메모리 할당에서 발생하겟네

 

⬇️

공간 비니까 "밀자!!"

⬇️

 

[ 메모리 압축 ]