메모리 관리

프로세스와 메모리

프로세스의 동작

프로그램 카운터를 참조하여 메모리로부터 수행될 명령을 읽어 CPU의 해당 명령을 수행

기억장치 계층구조

CPU(레지스터) - 캐시 - 메모리(RAM) - 보조기억장치(HDD, SSD 등)
왼쪽에서 오른쪽으로 갈 수록 접근 속도가 느려지고, 용량은 커진다.

메모리 관리에 대하여

  • 메모리 호출 (언제 새로운 프로세스를 메모리에 둘 것인가?)
  • 메모리 배치 (실행될 프로세스를 메모리 내의 어느 곳에 둘 것인가?)
  • 메모리 교체 (메모리가 꽉 차있다면, 새로운 프로세스를 사용하기 위해서 어느 프로세스를 제거해야 할까?)
  • 그 외
    • 메모리를 고정 분할할 것인가 동적 분할할 것인가?
    • 프로세스의 적재 영역이 고정적인가 유동적인가?

단일 프로그래밍 환경

초기의 시스템

  • 오직 하나의 프로세스만 메모리를 사용 (메모리가 남더라도 다른 프로세스 할당 불가)
  • 프로세스는 하나의 연속된 블록으로 메모리에 할당 (연속 메모리 할당)

연속 메모리 할당이란?

프로세스가 바뀔 때마다 메모리가 차지할 수 있는 단 하나의 블록에만 연속적으로 할당이 계속 이루어지는 것

문제점

  • 실행하려는 프로세스가 메모리 용량을 초과하면 실행 불가
  • 메모리 낭비 - 당장 사용되지 않는 영역도 계속 적재된 상태로 존재함
  • 자원의 낭비

다중 프로그래밍 환경

  • 여러 개의 프로세스가 메모리에 동시에 적재되는 것
  • CPU 연산과 입출력을 동시에 함으로써 CPU 이용도와 시스템 처리량 증가

메모리 분할

여러 프로세스를 메모리에 적재하기 위하여 고안된 방법

  • 하나의 분할에 하나의 프로세스가 적재
  • 두 가지 방식
    • 고정 분할
    • 동적 분할

고정 분할

메모리를 고정된 크기의 영역으로 분할하는 방법

  • 방법 1

    • 각 분할된 메모리마다 작업 큐를 따로 두는 방법을 사용함
    • 절대 번역(사용할 메모리의 주소값을 고정) 및 적재하는 방식
    • 즉, 해당 프로세스는 해당 큐에만 적재될 수 있음
  • 방법 2

    • 하나의 작업 큐만 두고, 큐에 들어온 프로세스는 아무 분할 영역에든 적재할 수 있음
    • 재배치 가능 번역 및 적재
    • 복잡하다는 단점이 있음

고정 분할의 문제점

  • 내부 단편화 : 프로세스의 크기가 적재된 분할 영역의 크기보다 작아서 분할 영역 내에 남게 되는 메모리는 낭비됨
    (프로세스의 크기를 미리 알고 그에 맞춰 고정 분할을 해줘야 하지만 현실적으로 불가능함)

동적 분할

메모리의 분할 경계가 고정되지 않고, 각 프로세스에게 필요한 만큼의 메모리만을 할당

동적 분할의 단점

  • 외부 단편화 : 메모리의 할당과 반환이 반복됨에 따라 작은 크기의 공백이 메모리 공간에 흩어져 생김

외부 단편화 해결 방법

  • 통합 : 인접된 공백을 더 큰 하나의 공백으로 만들어줌
  • 집약 : 메모리 내의 모든 공백을 하나로 모음 (메모리를 읽고 쓰고.. 반복해서 재배치함)

메모리 보호

여러 프로세스가 동시에 메모리에 상주하므로 프로세스가 다른 할당 영역을 침범하지 않게 하는 것.

하한, 상한 레지스터를 이용하여 프로세스가 메모리 범위를 벗어나지 못하게 함.
(단, 시스템 호출에 한해서 하한과 상한을 무시하고 운영체제의 영역으로 넘어갈 수 있음)

메모리 배치 기법

새로 반입된 프로그램이나 데이터를 메모리의 어느 위치에 배치할 것인가를 결정

최초 적합

프로세스가 적재될 수 있는 빈 공간 중에서 가장 먼저 발견되는 곳을 선택하여 할당

후속 적합

최초 적합의 변형으로 이전에 탐색이 끝난 그 다음 부분부터 시작

최적 적합

필요한 공간을 제공할 수 있는 빈 공간 중에서 가장 작은 곳을 선택하여 할당

최악 적합

필요한 공간을 제공할 수 있는 빈 공간 중에서 가장 큰 곳을 선택하여 할당

Last Updated: