운영체제는 메모리 관리 기능을 담당하기도 한다. 성능을 극대화하기 위해 꼭 필요한 기능으로 실행되고 있는 작업들에 메모리를 적절히 분배하고 작업이 끝나면 할당했던 메모리를 회수한다.
- 메모리 관리 기법
메모리 관리 기법은 다중 프로그래밍 시스템에서 다수의 프로세스를 수용하기 위해 주 기억장치를 동저긍로 분할하는 작업이다. 메모리 관리 기법에는 연속 메모리 관리와 불연속(분할) 메모리 관리가 있다.
1. 연속 메모리 관리
연속 메모리 관리는 프로그램 전체가 하나의 커다란 공간에 연속적으로 할당되어야만 한다. 연속 메모리 관리 기법에는 고정 분할 기법, 동적 분할 기법, 버디 시스템이 있다.
고정 분할 기법은 시스템 생성 시 주기억장치가 고정된 파티션들로 분할되는 기법이다. 프로세스는 같은 사이즈의 파티션 또는 그보다 큰 파티션으로 적재되며 구현이 간당하고 운영체제에 오버헤드가 거의 없다. 하지만 내부 단편화로 인해 최대 활성 프로세스의 수가 고정된다는 단점이 있다.
동적 분할 기법은 파티션들이 동적으로 생성되며 각 프로세스는 자신의 크기와 같은 크기의 파티션에 적재되는 기법이다. 내부단편화가 거의 없으며 주기억장치들 보다 효율적으로 사용가능하다. 하지만 외부 단편화를 해결하기 위해 메모리 집약이 요구되므로 처리나 효율이 좋지 않다는 단점이 있다.
-> 버디 시스템(Buddy System)
자원 할당 과정에서 발생하는 단편화 문제를 해결하기 위한 제안으로 고정 분할과 동적 분할의 결점을 보안한 절충안이다.
큰 버퍼를 반복적으로 이등분해 작은 버퍼를 생성하고 버퍼가 나눠질 때 각각 서로 버디라고 부른다. 요청된 메모리의 크기가 작아 전체를 할당하지 않을 경우 블록은 2U-1의 크기를 갖는 2개의 버디로 나뉜다.
2. 불연속 메모리 관리
불연속 메모리 관리는 프로그램의 일부가 연속이 아닌 서로 다른 주소 공간에 할당될 수 있는 기법이다. 불연속 메모리 관리 기법에는 페이징과 세그멘테이션이 있다.
단순 페이징은 프로세스를 고정된 크기의 작은 프레임(페이지)으로 미리 나누는 기법이다. 프로세스의 모든 페이지가 적재되어야 하며 이 페이지를 저장하는 프레임들이 연속적일 필요는 없다. 단순 페이징은 외부 단편화가 없다는 장점이 있지만 적은 양의 내부 단편화가 생긴다.
단순 세그멘테이션은 페이징 기법과 달리 논리 메모리와 물리 메모리를 서로 다른 크기의 논리적 단위인 세그먼트로 분할하는 기법이다. 프로세스의 모든 세그먼트가 적재되어야 하며 이 세그먼트를 저장하는 동적 파티션들이 연속적이지 않아도 된다. 단순 세그멘테이션은 내부 단편화가 없고 메모리 사용 효율이 개선되어 동적분할에 비해 오버헤드가 적지만 외부 단편화가 생긴다는 단점이 있다.
- 가상 메모리
실제 메모리 크기와 상관 없이 메모리를 사용할 수 있도록 가상 메모리 주소를 사용하는 것으로 프로세스의 일부분만 메모리에 로드하고 나머지는 가상 메모리 공간인 보조 기억 장치에 둔다.
가상 메모리를 사용하면 실제 메모리보다 큰 공간을 사용할 수 있으며 가상의 주소를 사용해서 논리적인 연속성을 제공할 수 있다. 또, 물리 메모리의 주소 공간을 몰라도 된다는 장점이 있다.
가상 메모리 관리 기법에는 가상 메모리 페이징과 가상 메모리 세그멘테이션이 있다.
가상 메모리 페이징은 단순 페이징과 비교해 프로세스의 페이지 전부를 로드시킬 필요가 없으며 필요한 페이지가 있다면 그때 그때 불러 들이는 기법이다. 외부 단편화가 없으며 다중 프로그래밍 정도가 높고 가상 주소 공간이 크다. 하지만 복잡한 메모리 관리로 인해 오버헤드가 발생한다.
가상 메모리 세그멘테이션은 단순 세그멘테이션과 비교해서 불필요한 세그먼트들을 로드하지 않고 필요한 세그먼트가 있으면 그때 그때 불러 들인다. 내부 단편화가 없으며 높은 수준의 다중 프로그래밍, 큰 가상 주소 공간, 보호와 공유를 지원한다. 하지만 가상 메모리 세그멘테이션 역시 복잡한 메모리 관리로 인해 오버헤드가 발생한다.
- 메모리 단편화(Memory Fragmentation)
프로그램을 실행할 때 메모리의 공간을 연속적은 형태로 할당하여 사용하고 해제하고 다시 새로운 프로그램이 할당, 해제되는 것을 반복하면서 메모리 공간이 잘게 나뉘게 된다. 이때 실제 사용가능한 메모리가 존재하지만 할당이 불가능한 존재가 발생하며 이를 메모리 단편화라고 한다.
메모리 단편화는 내부 단편화와 외부 단편화가 있다.
내부 단편화는 메모리 할당 시 프로세스가 필요한 것보다 더 큰 메모리가 할당되어 프로세스에서 사용하는 메모리 공간을 낭비하는 것을 말한다.
외부 단편화는 메모리가 할다오디고 해제되는 작업이 반복될 때 할당된 메모리와 메모리 사이에 사용하지 않는 작은 메모리가 생겨 총 메모리 공간이 충분하더라도 실제로는 할당할 수 없는 것을 말한다.
메모리 단편화를 해결하는 방법에는 페이징과 세그멘테이션이 있으며 페이징은 고정 크기를 가지고 세그멘테이션은 가변 크기를 가진다는 차이점이 있다. (상세 설명은 위에!)
레퍼런스 :
http://mm.sookmyung.ac.kr/~bigrain/class/2011/mmso/StallingsOS6e-Chap07.pdf