1.4 메모리 관리 전략
다수의 프로세스를 실행하려면 한정된 메모리 공간에 많은 프로세스를 로드할 수 있어야 한다.
메모리 공간을 더 효율적으로 활용하기 위한 여러 방안이 있다.
1.4.1 논리 메모리와 물리 메모리
CPU가 프로세스를 처리할 때 보는 주소 값과 실제 메모리의 주소 값은 다르다.
- 프로세스가 보는 메모리 영역을 논리 메모리 영역, 가상 메모리 영역이라고 한다.
- 실제로 사용되는 메모리 영역(RAM)을 물리 메모리 영역이라고 한다.
- CPU가 프로세스를 실행하며 보는 주소 값을 논리 주소, 가상 주소라고 한다.
- 실제 메모리에서 사용하는 주소는 물리 주소라고 한다.
💡 메모리 관리 장치(MMU)
- CPU가 프로세스를 실행할 때 사용하는 주소 값과 실제 주소 값이 다르므로 논리 주소를 물리 주소로 변환해주는 하드웨어 장치
- MMU는 CPU에 위치해 CPU에서 메모리에 접근하기 전에 MMU를 거쳐 물리 주소를 얻는다.
- MMU는 보호해야 하는 메모리 영역에 접근을 제한해 메모리를 보호한다.
1.4.2 연속 메모리 할당
연속 메모리 할당은 멀티 프로세스 환경에서 여러 프로세스를 메모리에 연속적으로 로드하는 방법
📖 고정 분할 방식
- 메모리 영역을 분할한 뒤 각 영역에 프로세스를 할당하는 방식이다.
- 분할된 영역의 크기는 서로 다를 수 있으며, 분할된 크기는 고정된다.
- 메모리에 올릴 수 있는 프로세스 수와 크기가 제한된다.
- 단편화 문제가 발생할 수 있다.
- 고정된 분할때문에 분할된 크기보다 큰 프로세스가 들어오면 외부단편화가 발생한다.
- 8MB로 분할되었을 경우 6MB의 프로세스가 들어가게되면 2MB가 남는 내부 단편화가 발생한다.
☝🏻 외부 단편화 문제를 해결하는 방법 - 메모리 압축
프로세스가 사용중인 메모리 공간을 재배치해서 흩어져있는 가용 메모리 공간을 하나로 합친다.
📖 가변 분할 방식
- 할당할 프로세스의 크기에 따라 메모리 공간을 분할한다.
💡 가변 분할 방식 메모리 할당 알고리즘
- 최초 적합(first-fit)
가용 메모리 공간에서 프로세스 크기만큼 비어있는 메모리 공간을 찾아 차례대로 프로세스를 로드한다.
- 최적 적합(best-fit)
가용 메모리 공간에서 가장 작은 공간에 프로세스를 할당, 가용 메모리 공간을 모두 탐색해야 한다.
- 최악 적합(worst-fit)
가용 메모리 공간에서 가장 큰 공간에 프로세스를 할당, 가용 메모리 공간을 모두 탐색해야 한다.
1.4.3 비연속 메모리 할당
비연속 메모리 할당이란 프로세스와 메모리 영역을 나눠서 메모리 공간에 저장하는 방법이다.
즉, 프로세스를 잘게 나눠서 메모리의 비어있는 공간 어디에든 저장하는 방식 프로세스 전체를 연속된 메모리 공간에 저장할 필요가 없다.
페이징
프로세스의 논리 메모리 영역과 물리 메모리 영역을 각각 일정한 크기의 페이지와 프레임으로 나눈다.
페이지와 프레임의 크기는 동일하고, 각각 번호를 할당해 프로세스의 페이지와 메모리의 프레임을 매핑한다.
페이지와 프레임을 매핑하는 데 페이지 테이블을 사용한다.
📖 페이지 테이블
프로세스의 페이지 정보와 페이지에 매핑하는 프레임 주소 값을 저장한다.
각 프로세스의 PCB에 저장된다.
☝🏻 페이징 기법을 사용하면 페이지를 물리 메모리에 연속으로 할당할 필요가 없어 외부 단편화 문제를 해결할 수 있다.
BUT,
프로세스의 크기가 페이지 수로 나누어 떨어지는지는 보장하지 않는다.
프로세스의 마지막 페이지가 페이지 크기보다 작을 때 내부 단편화 문제가 발생
-> 만약 페이지 크기가 4인데 프로세스의 크기가 4의 배수가 아닐때 마지막 페이지는 내부 단편화가 발생
페이지 테이블을 저장하기 위한 메모리 공간이 필요하다.
🔍 계층적 페이징, 해시 페이지 테이블, 역 페이지 테이블
계층적 페이징
페이지 테이블을 다시 페이지로 나눠 페이지 테이블 자체를 페이징 하는 방식
해시 페이지 테이블
해시 테이블의 각 항목에 저장된 연결 리스트에 페이지 번호를 해싱한 뒤에 첫 번째 요소와 가상 페이지 번호를 비교
역 페이지 테이블
프레임을 이용해 페이지를 찾는 방식.
세그먼테이션
프로세스의 메모리 영역을 논리적 단위인 세그먼트로 분할해 메모리를 할당한다.
📖 세그먼테이션 테이블
세그먼트의 논리 주소를 물리 주소로 매핑한다.
세그먼트 번호를 인덱스로 사용하며 세그먼트별 시작 주소(base)와 세그먼트 길이(limit)를 저장한다.
☝🏻 세그먼테이션 기법은 프로세스의 메모리 영역을 논리적 단위로 나눠 저장하므로 단위 별로 데이터를 보호하기 쉽다.
BUT,
세그먼트 크기가 균등하지 않아 프로세스 할당/해제 반복하면서 외부 단편화가 일어날 수 있다.
메모리에 로드된 스택 세그먼트 영역에서 오버플로가 발생하면 다른 프로세스와 메모리 영역이 겹칠 수 있다.
-> 다른 프로세스의 세그먼트나 오버플로가 발생한 세그먼트를 디스크로 스왑아웃해야한다.
'[ STUDY ] > CS' 카테고리의 다른 글
[ 운영체제 ] 캐시 메모리 (0) | 2024.11.11 |
---|---|
[ 운영체제 ] 가상 메모리 - 요구 페이징, 스레싱 (0) | 2024.11.11 |
[ 운영체제 ] 스케줄링 (0) | 2024.11.11 |
[ 운영체제 ] 프로세스 2️⃣ - 프로세스 동기화, 교착 상태, IPC, 좀비고아··· (2) | 2024.11.11 |
[ 운영체제 ] 프로세스 1️⃣ - 프로세스, 스레드, 콘텍스트 스위칭, PCB ··· (0) | 2024.11.11 |