단편화 (Fragmentation)
- 주기억장치에 프로그램을 할당하고 반납하는 과정에서 발생하는 사용되지 않는 작은 조각 공간
- 주기억장치 상에서 빈번하게 기억장소가 할당되고 해제됨에 따라 기억장소들이 조각들로 나누어지는 현상
내부 단편화
프로세스에 할당된 메모리 공간이 실제로 프로세스가 필요한 공간보다 많이 할당되었을 때, 프로세스 내부에서 발생되는 단편화를 말합니다.
외부 단편화
메모리가 할당되고 해제되는 작업이 반복되면서 작은 공간의 메모리 영역이 생기게 됩니다.
이 공간의 크기가 어떤 프로세스가 필요로 하는 크기보다 작은 경우에 생기는 단편화를 말합니다.
단편화의 해결 방법
1. 통합 (Coalescing)
단편화로 인해 분산되어 있는 메모리 공간들을 인접해 있는 것끼리 통합시켜 큰 메모리 공간으로 합치는 기법입니다.
2. 압축 (Compaction)
단편화로 인해 분산되어 있는 메모리 공간들을 재배치하여 하나로 합치는 기법입니다.
비용이 많이 들어 자주 쓰지 않고 정해진 주기에 따라서 실행합니다.
가비지 컬렉션 작업이라고도 합니다.
3. 페이징 (Paging)
페이징은 프로세스의 주소 공간을 동일한 사이즈의 페이지 단위로 나누어 물리 메모리에 불연속적으로 저장하는 방식입니다.
물리 메모리는 Frame이라는 고정 크기로 분할되고, 프로세스가 점유하는 논리 메모리는 Page라 불리는 고정 크기로 분할됩니다.
메모리 상에서 여러 곳에 흩어진 프로세스를 수행하기 위해 MMU(메모리 관리 장치)를 통해 논리 주소와 물리 주소를 나누어 사용함으로써 CPU는 연속적으로 사용하고 있다는 것을 보장받으며 정상적으로 수행합니다.
CPU는 논리 주소로 프로그램이 설정한 대로 연속적인 주소 값으로 명령을 내리는데 메모리로 가기 전에 각 페이지의 실제 메모리 주소가 저장되어 있는 페이지 테이블을 통해 물리 주소로 변경됩니다.
페이징 기법을 사용함으로써 논리 메모리는 물리 메모리에 저장될 때, 연속되어 저장될 필요가 없고 물리 메모리의 남는 프레임에 적절히 배치됨으로 외부 단편화를 해결할 수 있지만 내부 단편화는 해결하지 못합니다.
4. 세그멘테이션 (Segmentation)
페이징 기법에서는 프로세스를 같은 크기의 단위로 분할하지만 세그멘테이션 기법에서는 프로세스를 세그먼트라는 서로 크기가 다른 논리적인 블록 단위로 분할해서 메모리에 배치합니다.
세그먼트를 메모리에 할당할 때는 페이징 기법과 동일하지만 세그먼트 테이블을 통해 수행합니다.
세그먼트 테이블은 세그먼트 번호와 시작 주소, 세그먼트 크기를 엔트리로 갖습니다.
세그먼트에서의 주소 변환 역시 페이징 기법과 유사하지만, 세그먼트의 크기는 일정하지 않기 때문에 테이블에 limit 정보가 주어집니다.
그리고 CPU에서 해당 세그먼트의 크기를 넘어서는 주소가 들어오면 인터럽트가 발생해서 해당 프로세스를 강제로 종료시킵니다.
세그멘테이션 기법을 사용하면 프로세스가 필요한 메모리만큼 할당해주기 때문에 내부 단편화는 해결할 수 있지만 프로세스가 메모리를 해제하면서 중간에 생기는 틈 때문에 외부 단편화는 해결하지 못합니다.
5. 메모리 풀 (Memory Pool)
필요한 메모리 공간을 필요한 크기, 갯수만큼 직접 지정하여 미리 할당받아 놓고 필요할 때마다 사용하고 반납하는 기법입니다.
할당받았던 메모리 공간을 가져다 쓰고 반납하기 때문에 메모리 할당과 해제로 인한 외부 단편화가 생기지 않습니다. 또한, 필요한 크기만큼 할당을 해놓기 때문에 내부 단편화도 생기지 않습니다
'CS 지식 > 운영체제' 카테고리의 다른 글
[CS] 페이지 교체 알고리즘 (0) | 2023.10.17 |
---|---|
[CS] 스케줄러 (0) | 2023.10.15 |
[CS] 교착 상태 (0) | 2023.08.26 |
[CS] 상호 배제 (0) | 2023.08.26 |
[CS] IPC 통신 (0) | 2023.08.24 |