[공룡책] 메인메모리

CPU 스케줄링의 결과로 CPU 이용률과 사용자에게 제공하는 컴퓨터 응답속도를 향상할 수 있습니다.

하지만 이러한 성능 향상을 위해 많은 프로세스를 메모리에 유지해야합니다.

이 글에서는 메모리를 관리하는 다양한 방법에 관해 설명합니다.

주소할당

메모리 주소공간에서 명령어와 데이터 바인딩은 그 바인딩이 이루어지는 시점에 따라 다음과 같이 구분됩니다.

Compile time 바인딩

메모리 내에 들어갈 위치를 컴파일 시간에 알 수 있다면 컴파일러는 절대 코드를 생성할 수 있습니다.

Load time 바인딩

메모리 적재 위치를 컴파일 시간에 알지 못한다면 이진 코드를 재배치 가능 코드(Relocatable Code)로 만들어야 합니다.

심볼과 진짜 번지수의 바인딩은 실제 적재되는 시간에 이루어집니다.

재배치 가능 코드는 시작 주소가 변경되면 아무 때나 사용자 코드를 다시 적재하기만 하면 됩니다.

Execution time 바인딩

메모리 내 한 세그먼트로부터 다른 세그먼트로 옮겨질 수 있다면 바인딩이 실행시간까지 허용되었다고 합니다.

메모리 할당

프로세스가 시스템에 들어오면 운영체제는 각 프로세스가 메모리를 얼마나 요구하며, 또 사용가능한 메모리 공간이 어디에 얼마나 있는지를 고려하여 공간을 할당합니다.

이에따라 동적 메모리 할당 문제를 고민하게 됩니다.

  • first-fit(최초 적합): 첫 번째 가용 공간을 할당합니다.
  • best-fit(최적 적합): 가장 작은 공간을 할당합니다.

    • 탐색이 필요합니다.
  • worst-fit(최악 적합): 가장 큰 공간을 할당합니다.

    • 탐색이 필요합니다.

최초 적합이 일반적으로 속도가 빠르며 최초나 최적 적합 모두 메모리 이용 효율이 좋다는 것이 입증되었습니다.

내부 단편화

프로세스가 사용하는 메모리 공간에 남는 부분이 생기는 것을 말합니다.

외부 단편화

first-fit, best-fit 모두 외부 단편화로 인해 어려움을 겪습니다.

적재와 제거가 반복된 메모리의 가용 공간은 너무 작아지곤 합니다.

해당 문제로 인해 프로세스 사이에 못 쓰는 가용 공간이 남게 되는것이 외부 단편화입니다.

합치면 충분한 공간이 되는 조각들이 너무 분산되어 있을 때 발생합니다.

  • 압축: 외부 단편화를 해소하기 위해 프로세스가 사용하는 공간들을 한쪽으로 몰아둡니다. 작업효율이 좋지 않습니다.

Paging

메모리 관리는 프로세스의 물리 주소 공간이 연속적이어야 합니다. 하지만 해당 제약을 없앤게 페이징 기법입니다.

물리 메모리는 Frame 이라는 고정 크기로 분리되어 있고 논리 메모리는 페이지라 불리는 고정 크기의 블록으로 분리됩니다.

남는 프레임에 적절히 적재되면서 외부 단편화를 해결할 수 있는 장점이 존재합니다.

내부 단편화 문제의 비중이 늘어나게 되는 단점이 존재합니다. 페이지 프레임은 고정크기이기 때문에 1B가 모자라지만 1000B의 페이지 프레임이 필요할 수 있습니다.

Segmentation

서로 다른 크기의 논리적 단위인 Segment로 분할하는 방법입니다.

사용자는 세그먼트 번호와 변위 두가지 주소로 지정하며, 세 그먼트 테이블에는 각 세그먼트의 base주소와 length가 저장됩니다.

외부 단편화 문제가 생기는 단점이 존재합니다.

Swapping

메모리 관리를 위해 사용되는 기법을 말합니다. 표준 스와핑 방식으로는 RR과 같은 스케줄링의 다중 프로그래밍 환경에서 CPU 할당 시간이 끝난 프로세스의 메모리를 보조기억장치로 내보내고 다른 프로세스의 메모리를 불러들일 수 있습니다.

References


Written by@Cha-Ji
Android developer

InstagramGitHub