개발자 끄적끄적
메모리 관리 본문
<배경>
- 주기억장치(Main memory)
- 저장 공간(words or bytes)들의 배열로 구성 -> RAM
- CPU 이용률(utilization)을 높이기 위해서는 multi-tasking 필요
- 주기억장치에서 다수의 프로그램을 탑재하고 각각을 번갈아 가며 수행
- 주기억장치를 관리하는 여러 기법 소개
- Paging, Segmentation, ... -> 대부분 하드웨어 지원이 필요
- CPU 메모리 접근 시간을 줄이기 위해
- '가격대비 성능'을 위해 계층적으로 구성
<지역성의 원리(Principle of locality)>
- 정의
- 프로그램이 실행되는 동안 CPU가 액세스 하는 기억장치는 몇몇 특정 영역에 '집중되는' 경향이 있다
- =참조의 지역성(Locality of Reference)
- 근거
- 반복루프와 서브루틴
- 표나 데이터 배열에 대한 연산은 집단을 이루고 있는 데이터를 집중적으로 액세스
<OS의 메모리 관리 이유>
- 메모리는 여러 프로세스에 의해 사용되는 공유 자원이므로
- 각 프로세스에게 적절히 할당/해제
- 메모리를 보호하기 위해
- 각 프로세스의 독립된 공간 보장
- 사용자 코드로부터 커널 공간에 보호
- 메모리의 용량 한계를 극복하기 위해
- 가상 메모리
- 메모리 사용 효율성을 높이기 위해
- 다중 프로그래밍 정도(degree of multiprogramming) 향상
<메모리 관리와 연관된 OS의 역할>
- 메모리 어디가/누구에 의해 사용되고 있는 지 추적해야 한다
- 메모리 공간이 사용가능하게 될 때 어떤 프로세스를 어디에 적재할 것인지 결정해야 한다
- 필요에 따라 메모리를 할당하거나, 할당된 메모리를 회수해야한다
- 접근이 허가되지 않은 영역에 침범하지 못하도록 보호
<메모리 주소의 종류(1/2)>
- 물리 주소(physical addrerss)
- 하드웨어에 의해 고정된 메모리 주소
- 물리 메모리에서 매겨진 주소
- 0에서 시작하여 연속되는 주소 체계
- ex) 100번지 -> 0x00000064(32비트 주소)
- 프로그램 혹은 데이터가 점유하고 있는 메모리 공간의 실제 주소
- 메모리가 취급하는 주소
- 메모리는 시스템 주소 버스를 통해 물리 주소를 받음
<메모리 주소의 종류(2/2)>
- 논리 주소(logical address/virtual address)
- 프로그램 수행을 위해 CPU가 취급하는 주소
- 개발자나 프로세스가, 프로세스 내개에서 사용하는 주소
- 0에서 시작하여 연속되는 주소 체계
- 코드나 변수 등에 대한 주소
- 컴파일러와 링커에 의해 매겨진 주고
- CPU가 프로세스를 실행하는 동안 다루는 주소
- 실행 파일/프로세스 내에 표현되는 주소들
- 프로그램에서 변수 n의 주소가 100번지라는 것은 논리 주소가 100이란 뜻
- 사용자나 프로세스는 결코 물리 주소를 알 수 없다
<MMU(Memory Management Unit)>
- 논리주소를 물리 주소로 '매핑'하는 HW 장치
- CPU가 발생시킨 논리 주소는 MMU에 의해 물리 주소로 바뀌에 메모리에 도달
- 메모리 관리 방식에 따라 다르게 구현됨
- 맵 테이블 이용
- 오늘날 MMU는 CPU 패키지 안에 내장
- 인텔이나 AMD의 x86 CPU는 80286부터 MMU 내장
- MMU 덕분으로 여러 프로스스가 하나의 메모리에서 실행되도록 됨
<메모리 할당(Memory allocation)>
- OS가 새 프로세스를 실행시키거나 실행 중인 프로세스가 메모리를 필요로 할 때
- 프로세스의 실행은 할당된 물리 메모리 상에서 이뤄짐
<메모리 할당 기법>
- 연속 할당(Contiguous allocation)
- 프로세스 별로 연속된 한 덩어리의 메모리에 할당
- 비연속 할당(Non-contiguous allocation)
- 각 프로세스마다 여러 덩어리로 나뉜 메모리를 할당
<연속 메모리 할당>
- 각 프로세스의 영역(코드와 데이터)을 연속된 메모리 공간에 배치
- 메모리를 한 개 이상의 파티션으로 분할하고 프로세스당 하나의 파티션을 할당하는 방법
- 할당 가능한 메모리 부족시 프로세스는 큐에서 대기
- 연속 메모리 할당은 초기 운영체제에서 사용
- MS-DOS와 같은 과거 운영체제
- 단일 사용자 단일 프로세스 시스템
- 한 프로세스가 전체 메모리 독점
- 가상 메모리 지원하지 않음
<연속 메모리 할당 기법>
- 고정 크기(fixed size partition) 할당
- 전체 메모리를 고정된 크기의 n개의 파티션으로 분할, 각 프로세스마다 하나씩 할당
- 수용가능 프로세스의 수 n 고정
- 작은 프로세스의 경우 메모리 낭비 발생 가능, 큰 프로세스의 경우 실행 불가
- 가변 크기(variable size partition) 할당
- 각 프로세스마다 가변 크기(그 프로세스와 같은 크기)의 연속된 메모리를 할당
- 수용가능 프로세스 수 가변
<단편화(fragmentation) - 연속 메모리 할당 중 가장 큰 문제점>
- 요청을 만족하는 메모리 양이 존재하지만 프로세스에게 할당할 수 없는 '메모리 조각(hole)'이 생기는 현상
- hole == 낭비되는 메모리
- 홀이 생기는 위치에 따른 종류
- 내부 단편화
- 외부 단편화
<내부 단편화(internal fragmentation)>
- 할당된 메모리가 요구된 메모보다 더 큰 경우
- 프로세스에 할당된 메모리 내부에 '사용할 수 없는 '홀이 생기는 현상
- 파티션의 크기를 줄임으로 완화될 수 있으나 메모리 관리의 효율성은 떨어짐
<외부 단편화(external fragementation)>
- 요청을 만족하는 메모리 양이 존재하지만, '연속적'이지 않은 경우
- 각 프로세스에 할당된 메모리들 사이에 사용할 수 없는 홀이 생기는 현상
- 가변 크기의 파티션이 생기고 반환되면서 여러 개의 작은 홀 생성
- 메모리 압축 기법 적용 가능
<압축(Compaction)>
- 불연속적인 hole들을 이동하여 외부 단편화 문제를 해결가능
- 한계
- 주소 relocation이 동적인 경우만 가능
- 압축 시간으로 시스템 성능 저하될수도
<연속 메모리 할당의 구현>
- 하드웨어의 지원
- CPU의 레지스터 필요
- base 레지스터 : 할당된 물리 메모리의 시작 주소
- limit 레지스터 : 현 프로세스에게 할당된 메모리 크기
- 주소 레지스터 : 현재의 엑세스하는 메모리의 논리 주소
- 주소 변환 하드웨어(MMU) 필요
- 운영체제의 지원
- 각 프로세스별로 할당된 물리메모리의 시작 주소와 크기 정보 관리
- 새 프로세스를 실행시킬 때마다 물리 메모리의 시작 주소와 크기 정보를 base 레지스터와 limit 레지스터에 적재
- 비어있는 메모리 영역 관리
<연속 메모리 할당의 특징>
- 장점
- 논리 주소를 물리 주소로 바꾸는 과정이 단순
- CPU의 메모리 액세스 속도 빠름
- 운영체제게 관리할 정보량이 적어서 부담이 덜함
- 단점
- 메모리 할당의 유연성이 떨어짐
- 외부 단편화 발생
<홀 선택 알고리즘(동적 메모리 할당)>
- OS는 메모리가 요구될 때 적당한 홀을 선택해서 할당
- 고정 크기 할당시
- 가용 파티션에 대한 리스트를 관리하고 이중에서 할당
- 가변 크기 할당시
- 가용 메모리 리스트(홀 리스트)를 통해 각 홀 마다 시작 주소와 크기 정보 유지
- 이 홀 리스트에서 적절한 홀을 선택해 할당
- 어떤 홀을 선택하느냐에 따라 성능이 달라짐
<홀 선택 알고리즘>
- Firs-fit(최초 적합)
- 가능한 크기를 가진 첫 번째 hole에 할당
- 가정 : 홀 리스트 주소에 대해 오름차순 정렬
- Best-fit(최적 적합)
- 가능한 가장 작은 크기의 hole에 할당
- 가정 : 홀 리스트는 홀 크기에 대해 오름차순 정렬
- 할당 후 남은 공간을 최소화할 수 있음
- 메모리 사용 효율이 높으나, 할당 때마다 홀 리스트 정렬 필요
- Worst-fit(최악 적합)
- 가능한 가장 큰 크기의 hole에 할당
- 가정 : 홀 리스트는 홀 크기에 대해 내림차순 정렬
- 할당 후 남은 공간에 다른 프로세스의 할당 확률 높음
<일반적인 효율성 비교>
- Storage utilization
- Best-fit >= First-fit > Worst-fit
- Speed
- First-fit > Best-fit > Worst-fit
'운영체제' 카테고리의 다른 글
비연속 메모리 할당 (0) | 2024.05.17 |
---|---|
식사하는 철학자 문제 (1) | 2024.05.01 |
교착상태 탐지 및 복구 (1) | 2024.05.01 |