Memory Management From Stone Age to Present

초기 메모리

OS + 프로그램 하나만이 메모리에 들어가있고, 가상화 개념이 없음

OS 또한 그냥 라이브러리 수준

Multiprogramming and Time Sharing

멀티 프로그래밍 - 여러 프로세스가 실행 준비 상태 (메모리에 올라가 있는 상태) - OS는 프로세스를 전환하면서 실행한다. (I/O요청 시 프로세스 교체 등)

Time Sharing - 짧은 시간 동안만 실행 (타임 퀀텀, time slice) - 실행 중에는 메모리 접근 권한 부여 - 프로세스 상태를 디스크 등에 저장 - 레지스터 값, PC 등 → 문맥 교환(context switch) - 다른 프로세스를 선택해서 실행 - 너무 느리긴 하다.

주소 공간

그냥 주소 공간이라 함은 가상 주소 공간을 뜻한다.

모든 프로그램은 운영체제가 제공하는 가상 주소 공간을 사용한다. 이 가상 주소 공간은 OS의 메모리 가상화를 통해 프로그램이 일련의 연속된 공간이라고 인식하고 사용하는 영역이다. 그들이 실제 물리적으로 사용하는 메모리에서는 역시 연속된 공간을 사용하지는 않는다.

주소 공간은 실행 프로그램의 모든 메모리 상태를 포함한다.

  • code(text)
  • stack : 함수 호출 체인 상의 현재 위치, 지역 변수, 함수 인자와 반환 값 등 저장
  • heap : 동적 할당 메모리

메모리 관리의 목표

  • 투명성 (Transparency)

    실행 중인 프로그램이 가상 메모리의 존재를 모르게 (투명)

  • 효율성 (Efficiency) 시간과 공간적으로 효율적
    너무 느리지 않아야 하고, 메모리도 최소한으로 사용

  • 보호 (Protection) OS 커널 자체를 다른 프로세스로부터 보호
    프로세스 간 고립

메모리 관리의 이슈

  • Placement 배치
  • Protection 보호
  • Replacement 재배치
  • on-demand loading 요구 시 반입 / 요구반입 (O) ↔ 선반입

프로그램은 파일로 존재할 때는 프로그램이고,
메모리에 올라 CPU를 받으면 프로세스가 되며,
OS는 이를 문맥 단위로 관리한다.

메모리 관리 기법


물리 메모리)

- 단일 사용자 전용 시스템 ex) MS-DOS

  • 한 번에 하나의 프로그램만 실행

주어진 메모리보다 더 큰 프로세스는 실행이 불가능하다. -> 중첩 overlay 기법 존재. 프로그래머가 직접 프로그램을 여러 조각으로 나누어 필요한 부분만 메모리에 올리는 방법

메모리에 OS와 프로세스가 있고, protection register가 존재해 Kernel 영역 침범을 막았다.

- 다중 사용자 전용 시스템

고정 분할 다중 프로그래밍

  • 메인 메모리를 미리 정해진 크기의 여러 구역(partition) 으로 나눔

왼쪽 은 절대 번역으로, 프로그램이 고정된 물리 주소로 작성되어 실행될 특정 분할이 정해져있음. 이때 task4는 task1이 끝나기 전에는 절대 실행될 수 없다. 다른 분할이 비게 되더라도.

오른 쪽은 재배치 가능한 구조로, 여전히 메모리는 고정 분할되어있고, 프로그램들이 빈 곳으로 들어갈 수 있게 된다.

가변 분할 다중 프로그래밍

이제 메모리를 고정으로 분할하지 않는다. 단, 프로그램을 통째로 메모리에 올리는 지금과 같은 경우에는, task1, task3이 빠진다 해도 그 둘보다 큰 프로그램은 메모리에 빈 공간이 연속되어 있지 않으므로 적재를 못 하는 외부 단편화가 발생한다.

이렇게 공간이 남아있다면 새로운 프로그램이 들어올 때는 어떤 공간에 넣어야 할까?

그 방법들로

  • First Fit 앞에서부터 훑다가, 처음으로 들어가는 공간에 바로 배치
  • Best Fit 들어갈 수 있는 공간 중 남는 공간이 최소가 되는 곳 선택
  • Worst Fit 가장 큰 hole에 배치
  • Next Fit 이전에 배치했던 위치 다음부터 탐색 시작

이 있다.

모두 새로 배치하고 남는 공간은 새로운 hole로 인식된다.

- 가상 메모리

프로그램이 바라보는 메모리와 물리적인 메모리를 구분한다.

가상 주소, 물리 주소가 다르다.

가상 메모리가 존재하면 각 프로세스는 자기만의 연속된 큰 공간을 가지고,

실제 물리적인 메모리는 여러 프로세스가 나눠 쓸 수 있다.

이때 물리적인 메모리에서는 한 프로세스의 정보가 연속되지 않고 여기저기 흩어져 있게 된다.

페이지 시스템 : 태스크 로딩

task를 하나의 프로세스라 보면 된다. 실행 단위이다.

이 task를 로딩할 때 디스크에 있는 프로그램 파일을 한 번에 모두 메모리에 올리지 않고 필요한 페이지만 로딩한다.