Fragmentation (단편화)
단편화란 기억장치의 빈 공간 또는 자료가 여러 개의 조각으로 나뉘는 현상을 말한다.
External fragmentation (외부 단편화)
- 할당된 메모리 간의 프로그램이 들어갈 수 없을 정도의 남는 메모리 공간이 발생하는 것을 말한다.
- 이 경우, 해당 공간에 프로그램을 적재할 수 없기 때문에 메모리 낭비를 초래한다.
- 어떠한 프로그램도 적재되지 않았지만, 사용할 수 없는 공간이 발생한다.
- 해결 방법: Paging
Internal fragmentation (내부 단편화)
- 할당된 메모리보다 적재되는 프로그램의 크기가 작아 메모리 공간이 남는 것을 말한다.
- 이 경우, 남는 메모리 공간에 프로그램을 적재할 수 없기 때문에 메모리 낭비를 초래한다.
- 할당된 메모리 내부의 사용하지 못하는 공간이 발생한다.
- 해결 방법: Segmentation
Compaction (압축)
- 외부 단편화를 해결하기 위해 프로세스가 사용하는 메모리 공간을 한쪽으로 몰아, 남는 메모리 공간을 사용할 수 있도록 하는 방법론이다.
- 작업 효율이 좋지 않다는 단점이 있다.
Swapping
- 내부적인 우선순위에 따라 다른 프로세스를 사용하기 위해 메모리 상의 프로세스의 주소 공간 전체를 디스크로 내리는 방법이다. 이때 디스크 상의 스왑 공간을 활용한다.
- 프로세스의 종료에 의해 디스크로 내려가는 것이 아니라, 특정한 이유로 실행중인 프로세스를 내리는 것이다.
- 스왑 인: 디스크 -> 메모리
- 스왑 아웃: 메모리 -> 디스크
OS의 메모리 관리
프로그램을 메모리에 할당하는 것은 OS가 내부적으로 처리하는 일이다. 이에 대한 방법으로 크게 연속 할당 방식과 불연속 할당 방식이 있다.
가상 메모리
- 실제 물리 메모리와 사용자의 논리 메모리 개념을 분리한 것이다.
- 실제 물리 메모리의 크기는 한정적이기 때문에 이보다 더 많은 공간이 필요할 경우, 스와핑과 같은 기술을 통해 해결해야한다.
- 가상 메모리는 실제 물리 메모리보다 큰 프로세스라도 가상 메모리를 통해 구동할 수 있다.
- 전체 프로그램이 물리 메모리에 올라와 있지 않아도 된다.
- 더 많은 프로그램을 동시에 실행할 수 있다.
- 다중 프로그래밍을 실현하기 위해 물리 메모리의 제약을 완화하고, 프로세스 전체를 메모리에 올리지 않고도 실행 가능하도록 한다.
연속 할당 방식
- 각각의 프로세스를 메모리의 연속적인 공간에 적재하는 방식이다.
- 고정 분할 방식
- 물리적 메모리를 주어진 개수만큼의 영구적인 조각으로 미리 분할하고, 각 조각에 하나의 프로세스를 적재하여 실행하는 방식이다. (고정적인 크기로 분할)
- 내부 단편화 문제를 초래한다.
- 가변 분할 방식
- 메모리에 적제되는 프로세스의 크기에 따라 조각의 크기, 개수가 동적으로 변하도록 분할하는 방식이다. (가변적인 크기로 분할)
- 외부 단편화 문제를 초래한다.
불연속 할당 방식
페이징
세크멘테이션
- 하나의 프로세스를 물리적 메모리의 여러 영역에 분산하여 적재하는 방식이다. 이는 가상메모리 방식을 적용하기 때문에 가능하다.
- Paging (페이징)
- 프로세스를 동일한 크기의 Page로 나눈다.
- Page: 고정 사이즈의 가상 메모리 내 프로세스 조각
- Frame: 페이지 크기와 같은 물리 메모리의 조각
- 외부 단편화 문제를 해결할 수 있다. (동일한 크기의 Page를 사용하여 물리 메모리의 남는 Frame에 적절히 적재되기 때문에 Frame 간의 잉여 공간이 발생하지 않는다.)
- 내부 단편화 문제를 초래한다.
- Segmentation (세그멘테이션)
- 프로세스를 서로 다른 크기의 논리적 블록 단위인 Segment로 나눈다.
- Segment: 논리적인 단위로 분할된 프로세스 조각
- 내부 단편화 문제를 해결할 수 있다. (Segment를 통해 필요한 크기만큼만 할당할 수 있기 때문에 Segment 내부의 잉여 공간이 발생하지 않는다.)
- 외부 단편화 문제를 초래한다.