14-01 연속 메모리 할당
스와핑
스와핑
스와핑(swapping):
- 현재 사용되지 않는 프로세스들을 보조기억장치의 일부 영역으로 쫒아내고
그렇게 해서 생긴 빈 공간에 새 프로세스를 적재한다.
스왑 영역(swap space):
- 프로세스들이 쫒겨나는 보조기억장치의 일부 영역
스왑 아웃(swap-out):
- 현재 실행되지 않는 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것
스왑 인(swap-in):
- 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것
- 스왑 아웃되었던 프로세스가 다시 스왑 인될 때는 스왑 아웃되기 전의 물리 주소와는 다른 주소에 적재될 수 있다.
- 스와핑 이점:
- 프로세스들이 요구하는 메모리 공간 크기가 실제 메모리 크기보다 큰 경우에도
프로세스들을 동시에 실행할 수 있다는 이점이 있다.
<aside>
💡 스왑 영역 확인하기
- 유닉스와 리눅스, macOS 에서는 free, top 명령어 등을 통해 스왑 영역의 크기를 확인할 수 있다.
- 스왑 영역의 크기와 사용 여부는 사용자가 임의로 설정할 수 있다.
</aside>
메모리 할당
- 프로세스는 메모리의 빈 공간에 할당되어야 하는데 빈 공간이 여러 개 있을 때
프로세스를 어디에 배치해야 할지 결정하는 방식은 크게 세 가지가 있다.
최초 적합(first fit):
- 운영체제가 메모리 내의 빈 공간을 순서대로 검색하다
적재할 수 있는 공간을 발견하면 그 공간에 프로세스를 배치하는 방식
- 이점:
- 프로세스가 적재될 수 있는 공간을 발견하는 즉시 메모리를 할당하는
방식이므로 검색을 최소화할 수 있고 결과적으로 빠른 할당이 가능하다.
최적 적합(best fit):
- 운영체제가 빈 공간을 모두 검색해본 뒤,
적재 가능한 가장 작은 공간에 할당하는 방식
최악 접합(worst fit):
- 운영체제가 빈 공간을 모두 검색해본 뒤,
적재 가능한 가장 큰 공간에 할당하는 방식
- 프로세스를 연속적으로 메모리에 할당하는 방식은
메모리를 효율적으로 사용하는 방법이 아니다.
외부 단편화
외부 단편화(external fragmentation):
- 프로세스들이 실행되고 종료되길 반복하며 메모리 사이 사이에 빈 공간이 발생,
프로세스를 할당하기 어려울 만큼 작은 메모리 공간들로 인해
메모리가 낭비되는 현상
- 외부 단편화 해결:
-
메모리 압축(memory compaction):
- 여기저기 흩어져 있는 빈 공간들을 하나로 모으는 방식이다.
- 프로세스를 적당히 재배치시켜 흩어져 있는 작은 빈 공간들을
하나의 큰 빈 공간으로 만드는 방법이다.
- 단점:
- 작은 빈 공간들을 하나로 모으는 동안 시스템은 하던 일을 중지해야 한다.
- 메모리에 있는 내용을 옮기는 작업은 많은 오버헤드를 야기한다.
- 어떤 프로세스를 어떻게 움직여야 오버헤드를 최소화하며 압축할 수 있는지에 대한 명확한 방법을 결정하기 어렵다.
-
페이징 기법:
- 위에 입력한 메모리 압축의 단점들로 인해
외부 단편화를 없앨 수 있는 또 다른 해결방안이 등장하는데
오늘날까지도 사용되는 가상 메모리 기법 중 하나이다.
14-02 페이징을 통한 가상 메모리 관리
가상 메모리(virtual memory):
- 실행하고자 하는 프로그램을 일부만 메모리에 적재하여
실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술이다.
- 가상 메모리 관리 기법에는 크게 페이징과 세그멘테이션이 있다.
페이징이란
- 외부 단편화가 발생했던 근본적인 문제는 각기 다른 크기의 프로세스가
메모리에 연속적으로 할당되었기 때문이다.
페이징(paging):
- 프로세스를 일정 크기로 자르고,
이를 메모리에 불연속적으로 할당함으로써 외부 단편화를 해결한다.
- 프로세스의 논리 주소 공간을 페이지(page)라는 일정 단위로 자르고,
- 메모리의 물리 주소 공간을 프레임(frame)이라는 페이지와 동일한 일정한 단위로 자른 뒤
- 페이지를 프레임에 할당하는 가상 메모리 관리 기법이다.