운영체제의 목적 중에서 효율성을 찾아볼 수 있다. 이는 즉 메모리를 낭비하지 않고 효율적으로 사용하는 것이 의미하기도 한다.
동적 적재(Dynamic Loading)는 프로그램이 실행에 있어 꼭 필요한 루틴/데이터만 적재하는 방법이다.
필요한 루틴 또는 데이터가 호출되기 전까지 메모리에 적재하지 않고 있다가 필요한 상황이 발생하면 호출을 통하여 메모리에 적재하는 방식이다.
모든 데이터와 루틴을 메모리에 적재하는 방법을 정적 적재(static loading)라 부른다.
동적 연결(Dynamic Linking)은 여러 프로그램에 공통으로 사용되는 라이브러리를 중복해서 메모리에 올리는 것이 아닌 1개만 올리는 방식이다.
간단한 예로 C언어로 만들어진 프로그램들이 printf()를 공통으로 사용할 경우, printf()를 사용하는 라이브러리를 1개만 메모리에 적재하여 메모리 공간의 효율을 높이는 방법이 동적 연결이다.
프로그램이 메모리에 적재되어 있으나 어떠한 이유로 현재는 사용되지 않고 있는 프로세스를 잠시 기억 장치에 저장해 두었다가, 사용이 시작되면 저장해 두었던 프로세스를 다시 메모리로 적재하는 방법을 스와핑(Swapping)이라 한다.
프로세스를 저장장치에 저장하는 것을 swap-out 그리고 다시 메모리로 적재하는 것을 swap-in이라 부르며, swap 한 데이터를 저장하는 공간을 backing store 또는 swap device라고 부른다.
MMU의 재배치 레지스터(Relocation register)의 기능으로 swap-in 된 프로세스는 기존 사용하던 공간이 아닌 다른 공간에 적재되어도 작업을 이어 나갈 수 있다.
연속 메모리 할당(Contiguous Memory Allocation)은 연속적으로 프로그램을 메모리에 적재하는 방식을 말한다.
메모리 고정 분할(Memory Fixed Partitions)
메모리 공간을 균일하게 나누어 프로그램을 적재하는 방법으로 메모리 관리가 단순하다.
내부 단편화(Internal Fragmentation)가 발생할 수 있으며, 나눈 공간 보다 큰 프로그램은 적재할 수 없다는 단점이 있다. (장점보다 단점이 많아 사용 X)
메모리 공간을 나누지 않고 순차적으로 프로그램을 적재하지만, 프로세스의 생성과 소멸 때문에 외부 단편화(External Fragmentation)가 발생한다.
프로세스의 소멸로 생성된 빈 공간(Hole)에는 새로 생성된 프로세스가 들어갈 수가 있으며, 빈 공간과 프로세스의 크기에 따라 3가지 방식으로 적재할 수 있다.
가변 분할 방식을 사용하더라도 단편화(External Fragmentation)가 많이/자주 발생하면 효율성이 떨어진다.
이를 해결하는 방법으로는 Compaction 이 있다. 단편화로 인한 hole 들을 하나로 합쳐 프로세스에게 할당하는 방법이다. 하지만 hole을 움직이고 하나로 합치는 과정에서 발생하는 오버헤드가 크다는 단점이 있다.