주제 : 운영체제 메모리 관리: 물리메모리 할당 방식!
목차
연속 메모리 할당
비연속 메모리 할당
---continue---
하나의 프로그램이 실행되는 메모리 순서를 연속적으로 물리 메모리에 할당하는 방법
물리적 메모리를 몇 개의 영구적인 분할로 나누어 각각의 영역에 프로그램을 적재시킨다.
심각한 내부 단편화가 발생할 수 있다.
예를 들어 256MB의 메모리를 32MB씩 분할한다면, 2MB의 메모리만이 필요한 프로그램이 실행되는 경우 30MB의 내부 단편화가 발생한다.
(보통은 다양한 크기의 프로그램을 실행하기 위해 메모리를 다양한 크기로 분할한다.)
프로그램이 실행/종료되는 시점마다 프로그램 크기에 맞는 메모리를 할당/해제하는 방식.
첫 할당 이후 메모리 위치를 재정리할 수 없으므로, 다양한 크기의 프로그램에 대해 메모리 할당/해제를 반복하다 보면 아래와 같이 외부 단편화가 발생한다.
-----------------------------------------------------
| running(120MB) | empty(20MB) | running(8MB) | ...
프로그램의 메모리 할당 요청을 비연속적으로 메모리에 할당하는 방식. swap space를 사용하는 가상화 기법이 활용된다.
메모리를 나누는 단위.
세그먼트: 프로세스 크기에 따라 가변 크기를 갖는 물리 메모리 분할 단위
페이지 : 고정 크기로 가상 메모리를 분할하는 단위
프레임 : 페이지와 1:1로 매핑되는 물리 메모리 분할 단위
페이지와 프레임은 페이지 테이블을 매개로 연결된다.
따라서, 프로세스가 page(N)을 가지고있을 경우, OS는 가상주소 N에 데이터를 요청하고, 가상주소 N은 페이지 테이블의 정보를 통해 물리 주소인 frame(K)에 접근한다. 이 때, frame(k)주소가 존재하지 않을 경우, swap space(주로 보조 기억장치)에서 데이터를 가져온다. 이는 page fault라고 불리며, 이는 성능 저하를 일으키기도 하며 segmentation-paging 기법에서 Thrashing 등을 일으켜 심각한 성능 저하를 내기도 한다.
페이징 기법 : 가상 메모리를 고정 크기로 분할한 페이지를 통해 메모리를 관리하는 방식.
만약 프로세스가 페이지의 크기보다 적은 메모리를 필요로 하는 경우, **내부 단편화((페이지)내부의 메모리 일부가 사용되지 않아 낭비되는 현상)**가 발생한다.
(페이지의 크기 :프로세스의 크키가 커지면서 4KB > 4MB까지 크기가 커짐.)
LRU, FIFO, LFU, NUR등의 페이지 교체 알고리즘을 통해 물리 메모리를 관리.
페이지 테이블 : 페이지와 프레임의 매칭 정보를 담고있는 테이블.
프로세스가 가상 메모리(page)의 정보를 hit할때 실제 물리 메모리 주소(frame)로 변환하는 역할을 수행한다.
페이지의 크기가 커지면 아래와 같은 변화가 생긴다.
세그멘테이션 기법 : 하나의 프로세스가 사용하는 메모리의 크기 단위로 가상 주소를 관리하는 기법.
프로세스별로 요구하는 메모리가 다르므로, 세그먼트의 크기는 가변적이다.
세그멘테이션 테이블 :
위 두 가지를 보관하고 있는 자료구조이다.
.
프로세스 생성 시 커널 스택만들어지는 자료구조 : Status / Pointer(addr)/ Identifier / PC / Priority 등을 저장한다.
/ | 연속 메모리 할당 | 가상화(swap) | 관리 테이블 | 단편화 |
---|---|---|---|---|
고정 분할 방식 | X | X | - | 내부 단편화 |
가변 분할 방식 | X | X | - | 외부 단편화 |
페이징 기법 | O | O | 페이지테이블 | 페이지 내부 단편화 |
세그멘테이션 기법 | O | O | 세그먼테이션 테이블 | 세그멘테이션 외부 단편화 |