단편화 (Fragmentation)란?
: 메모리의 공간이 작은 조각으로 나뉘어 사용 가능한 메모리가 충분히 존재하지만 할당(사용)이 불가능한 상태
내부 단편화(Internal Fragmentation)
: 할당된 공간보다 프로세스가 더 작아서 생기는 남는 부분.
외부 단편화(External Fragmentation)
: 프로세스들이 메모리에 할당되고 해제되는 과정이 반복되면서, 연속적이지 않은 공간들이 생기는 것.
메모리 관리 방법
: 단편화 현상을 줄이고, 적절한 swapping을 통해 효율적으로 메모리를 관리하기 위한 방법
1. 압축 : 외부 단편화 해결
:외부 단편화를 해소하기 위해 프로세스가 사용하는 공간들을 한쪽으로 몰아, 자유공간을 확보하는 방법론
- 메모리에 적재된 프로세스를 정지시키고 한쪽으로 이동시키는 작업이 필요해 비효율적.
- 어느 빈 공간을 기준으로 모을지에 대한 알고리즘도 모호함.
2. 페이징(Paging) : 외부 단편화 해결, 내부 단편화 존재
: 하나의 프로세스가 사용하는 메모리 공간이 연속적이어야 한다는 제약을 없애는 메모리 관리 기법으로, 프로세스를 고정된 크기로 쪼개어 빈자리에 할당하는 것.
- 물리 메모리는 Frame 이라는 고정 크기로 분리, 논리 메모리(프로세스가 점유하는)는 페이지라 불리는 고정 크기의 블록으로 분리
- 논리 메모리는 물리 메모리에 저장될 때, 연속되어 저장될 필요가 없고 물리 메모리의 남는 프레임에 적절히 배치됨
- 개별 페이지의 순서와는 관계없이 페이지번호와 프레임번호를 매핑시켜주는 page table이 있다.
단점 : 쪼개서 저장하더라도 마지막 조각은 남을 수도 있다. 예를 들어 950을 200씩 나누면 마지막 조각은 150이 되므로 할당된 200보다 50이 비게되는 내부 단편화 문제가 여전히 발생한다.
3. 세그먼테이션(Segmentation) : 내부 단편화 해결, 외부 단편화 존재
: 페이징에서처럼 논리 메모리와 물리 메모리를 같은 크기의 블록이 아닌, 서로 다른 크기의 논리적 단위인 세그먼트(Segment)로 분할
- 세그먼트 기법의 할당 방식은 페이징 방법과 유사하지만 페이지테이블이아닌 세그먼트 테이블이 존재한다.
- 세그먼트 테이블에는 세그먼드번호, 세그먼트의 시작주소(base), 프로세스의 크기(limit)가 저장되어있다.
단점 : 논리적 단위에 맞추어 메모리를 할당하기 때문에 할당된 공간보다 프로세스가 더 작아서 생기는 내부단편화 문제는 발생하지 않는다. 그러나 서로 다른 크기의 세그먼트들이 메모리에 적재되고 제거되는 일이 반복되면, 자유 공간들이 많은 수의 작은 조각들로 나누어져서 프로세스 할당이 어려운 외부단편화 문제가 발생한다.
Reference
- https://velog.io/@codemcd/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9COS-13.-%ED%8E%98%EC%9D%B4%EC%A7%95
- https://velog.io/@codemcd/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9COS-14.-%EC%84%B8%EA%B7%B8%EB%A9%98%ED%85%8C%EC%9D%B4%EC%85%98
- https://code-lab1.tistory.com/54
댓글