[운영체제] 가상 메모리, 파일 시스템
메모리 할당
프로세스는 메모리 내 빈 공간에 적재되어야 한다. 이 때 빈 공간이 여러 구간 있다면, 그 중 하나의 공간을 선택하여 프로세스를 할당해야 한다.
이 때 할당을 위한 메모리를 선정하는 방식으로 최초 적합, 최적 적합, 최악 적합이 있다.
최초 적합
메모리를 순서대로 검색하다가 처음으로 발견한 적재 가능 공간에 프로세스를 할당하는 방식이다. 검색을 최소화하므로
가장 빠른 할당 방식임이 보장된다.
최적 적합
메모리를 전체 탐색한 후 프로세스가 할당 될 수 있는 공간 중에 가장 작은 공간에 프로세스를 할당하는 방식이다.
최악 적합
메모리를 전체 탐색한 후 프로세스가 할당 될 수 있는 공간 중에 가장 큰 공간에 프로세스를 할당하는 방식이다.
이러한 메모리 할당 과정에서 메모리 단편화라는 문제점이 발생하며, 크게 외부 단편화와 내부 단편화로 나뉘어진다.
외부 단편화
메모리에 총 남은 공간이 메모리에 들어가야할 프로세스의 크기보다 크지만, 남은 공간이 연속적이지 않아
프로세스가 제대로 할당될 수 없는 상태를 말한다.
내부 단편화
프로세스에 할당된 메모리의 크기에 비해 프로세스의 크기가 작아서 남는 공간이 생기는 상태를 말한다.
단편화된 메모리가 여러 구간 나타날 수록 사용가능한 메모리를 줄어들게 하므로, 메모리의 단편화를
해결하기 위해 몇 가지 방법들이 사용된다.
압축
메모리 내에 배치되어있는 프로세스들을 재배치시켜 연속적인 메모리 공간을 확보하는 방식이다.
외부 단편화를 해결하기 위해 사용되며 오버헤드가 많이 발생하는 방식이다.
통합
단편화로 인해 분산된 메모리 공간 중 연속적인 메모리 공간을 합치는 방식이다.
압축은 프로세스들의 재배치가 발생하지만 통합은 프로세스를 이동하지 않고 처리한다.
페이징
프로세스의 논리 주소 공간을 페이지라는 작은 일정한 단위로 자르고, 메모리 물리 주소 공간을 프레임이라는 작은 일정한 단위로 잘라
프레임에 페이지를 할당하는 방식이다. 현대 사회에서 가장 많이 사용하는 방식이다.
세그멘테이션
세그멘테이션 또한 페이징과 마찬가지로 프로세스를 나눠서 메모리 물리 공간에 저장하지만,
페이징은 프로세스를 주소 공간을 기준으로 하여 자르지만 세그멘테이션은 프로세스의 논리적인 내용을 기반으로 나눠서 저장한다.
공유와 정보 보호 측면에서는 세그멘테이션이 페이징 기법보다 우월하지만,
내부 단편화를 줄여주는 세그멘테이션의 목적과는 정반대로 서로 다른 세그멘트들의 크기로 인해
외부 단편화가 발생할 가능성이 크다는 단점이 있다.
메모리 풀
메모리를 사용하기 이전에 충분히 큰 크기로 할당을 받아두고, 사용이 완전히 끝난 뒤에 반납을 하는 방식이다.
메모리의 할당/반환이 반복될 수록 단편화된 메모리의 조각이 늘어나기 때문에,
메모리의 할당과 반환이 많이 필요한 경우 유용하게 사용가능한 방법이다.
메모리 반환의 경우 C/C++은 free()를 통해 사용자가 직접 해줘야하고, Java의 경우 GC가 알아서 해주는 역할을 한다.
미리 할당을 받아놓는 방식 특성상 메모리 누수가 발생할 수 있고 비효율적인 방식이다.