Home Physical memory management
Post
Cancel

Physical memory management

메모리 관리의 개요


시작


  • 이전에는 하나의 프로그램만 실행시켜서 메모리 관리에 어려움이 크지 않았다.
  • 현재 시분할 시스템에서는 많은 프로세스들이 메모리에 올라와 실행된다. 이를 효휼적으로 관리할 방법이 필요하다.

MMU


  • memory manage unit
  • 하드웨어이다.
  • 간단히 정리한다.

역할

  1. 가져오기

    • 프로세스와 데이터를 메모리로 가져온다.
    • 요청이 없어도 필요할 것 같은 데이터를 미리 가져온다.
  2. 배치 작업

    • 가져온 프로세스와 데이터를 메모리에 적절히 배치한다.
  3. 재배치 작업

    • 메모리가 가득 찬 상황이면 일부 프로세스를 하드로 옮기는 작업을 한다.

정책

  1. 가져오기 정책

    • 프로세스의 필요한 데이터를 언제 가져올지 결정하는 정책
    • prefetch 를 하기도 한다.
  2. 배치 정책

    • paging : 메모리를 같은 크기로 자르는 것
    • segmentation : 프로세스 크기에 맞게 자르는 것
    • 이런 기술을 이용해 효율적인 메모리 관리 정책을 만든다.
  3. 재배치 정책

    • replacement algorithm : 무슨 프로세스를 내보낼지 정한다.

메모리 주소


32bit / 64bit cpu


  • 메모리는 1byte마다 주소를 붙여 사용한다.

  • 이때 MAR(메모리 주소 레지스터)를 이용한다.

    • 32bit는 MAR의 크기가 32비트이다.
    • 64bit는 64비트
  • 여기서 cpu가 관리할 수 있는 메모리 공간의 사이즈를 알 수 있다.

    • 32bit : 2^32 byte = 4GB 정도
    • 64bit : 2^64 byte = 겁내 많음

즉 32bit에 16GB RAM을 박는 것은 …

  • 메모리 주소는 다음과 같이 나눌 수 있다.
    • Physical address space : 하드웨어 관점
    • logical address space : 사용자 입장

절대 주소와 상대 주소


메모리 영역

  • 기본적으로 메모리는 운영체제 영역과 사용자 영역으로 나뉜다.

  • 이때 사용자 영역이 운영체제 영역을 침범하지 못하도록

    • cpu의 경계 레지스터 값을 이용해 검사하고 막는다.
  • 문제점은 운영체제의 크기가 변한다면 사용자 프로그램의 주소가 변해야 한다.

    • 즉 프로그램을 짤 때는 360번지부터 400번지를 사용해서 프로그래밍하면, 후에 os가 바뀌면 문제가 발생한다.
    • 이렇게 직접 물리주소를 이용하는 것은 문제가 많다.

절대 주소와 상대 주소

  • 메모리 관리자 입장에서는 실제 메모리의 주소를 사용한다.

    • 절대 주소는 실제 물리 주소를 가르킨다.
  • 하지만 사용자 프로세스 입장에서는 0번부터 생각한다.

    • 즉 운영체제와 mmu가 알아서 관리한다.
      • 이때 재배치 레지스터를 이용한다.
    • 이를 논리 주소 공간이라 부른다.

단일 프로그래밍과 메모리 할당


메모리 오버레이


  • 컴퓨터의 메인 메모리보다 큰 프로그램을 실행하도록 만드는 방법
  • 적당한 크기로 잘라서 메모리에 가져온다.
    • module 단위로 나눈다.
  • 프로그램의 일부만 올라와서 실행된다.

스왑


  • module 단위로 나누어졌을 때 사용하지 않는 module은 어디에 보관될까?

  • 저장장치의 swap area에 보관된다. ( 공간을 마련함 )

    • swap in : 스왑 영역에서 메모리로 데이터를 가져옴
    • swap out : 메모리에서 스왑 영역으로 데이터를 내보냄
  • 이는 메모리 관리자가 관리한다.

  • 이때 사용자는 스왑 영역과 메모리 영역의 크기를 합쳐서 인식하게 된다.

  • 사진에서 사용자는 5GB 프로그램을 돌리는 것으로 인식한다.

다중 프로그래밍과 메모리


  • 지금까지는 한 프로세스만 실행되는 상황을 다루었다.
  • 지금부터는 여러 프로세스들이 실행될 때 메모리 관리를 살펴보겠다.

메모리 분할 방식


  • 메모리 배치 정책에 해당된다.
  • 여러 프로세스를 메모리에 어떻게 배치할 것인가?
    • variable-size partitioning : 가변 분할 방식
    • fixed-size partitioning : 고정 분할 방식

variable-size partitioning

  • 프로세스의 크기에 맞게 메모리가 분할 된다.

    • 즉 메모리의 영역 크기가 모두 다르다.
  • 한 프로세스가 연속된 공간에 배치된다.

    • contiguous memory allocation
  • 장점

    • 프로세스를 한 덩어리로 처리해서 연속적인 공간에 배치 가능
  • 단점

    • 메모리 관리가 복잡하다.

fixed-size partitioning

  • 프로세스의 크기 상관없이 메모리가 같은 크기로 분할 된다.

  • 비연속 메모리 할당이라 부른다.

    • noncontiguous memory allocation
  • 장점

    • 메모리 관리가 편하다.
  • 단점

    • 작은 프로세스가 올라오면 메모리 낭비가 발생한다.
      • 혹은 잘려서

Variable-size partitioning


외부 단편화

  • 만약 B와 D가 종료되고 E라는 프로그램이 메모리에 올라오는 상황을 생각해보자
  • 빈 공간보다 큰 공간을 필요로 하는 E는 올라가지 못한다.
    • 결국 E는 공간을 받을 수 있을 때까지 기다린다 ( 아사 )
  • 결국 작은 빈 공간이 생기게 된다.
    • 이 현상을 Fragmentation(단편화)이라 부른다.
    • 빈 공간을 external fragmentation이라 부른다.
      • hole

프로세스 밖에서 빈 공간(조각)이 발생하기 때문이다.

  • 이를 해결하기 위해
    • memory placement strategy : 메모리 배치 방식
      • 조각이 발생하지 않도록 배치
    • defragmentation : 조각 모음
      • 조각을 모아서 크게 만듬

메모리 배치 방식


  • 대표적인 방법은 다음과 같다. (버디 시스템도 있다.)
  1. 최초 배치
    • 적재 가능한 공간을 순서대로 탐색하다가 첫 번째 공간에 넣음
    • 빈 공간 전체 탐색이 필요 없다.
    • 다만 단편화가 잘 발생한다.
  2. 최적 배치
    • 빈 공간을 모두 확인하고 가장 작은 공간에 배치한다.
    • 아주 작은 조각이 남게 된다.
  3. 최악 배치
    • 빈 공간을 모두 확인하고 가장 큰 공간에 배치한다.
    • 남은 조각도 커서 재활용이 가능하다.
    • 다만 시간이 지나면 작은 조각이 남는다.

조각 모음

  • 아무리 배치를 잘해도 단편화 현상이 발생한다.

  • 사용하지 못하는 작은 조각들을 모아 쓸모 있게 만들 필요가 있다.

  • 단계

    1. 프로세스들 중단
    2. 적당한 위치로 차곡차곡 옮긴다. ( 상대 주소 값 )
    3. 프로세스 다시 시작
  • 많은 시간이 걸린다.

Fixed-size partitioning


  • 가상 메모리에서는 고정 분할 방식을 paging이라 부른다.
  • 메모리를 같은 크기로 나누어 관리는 쉽지만 프로세스가 나눠 저장된다.

내부 단편화

  • 기본적으로 가변 분할 방식보다는 고정 분할 방식을 기본으로 사용한다.

    • 이는 관리가 수월하기 때문이다.
  • 프로그램을 일정 단위로 나누기 때문에 외부 단편화는 발생하지 않는다.

    • 일정 단위를 페이지라 부른다. ( 가상 메모리 기준 )
  • 하지만 단위보다 작은 공간을 필요로 하면 내부 단편화가 발생한다.

    • internal fragmentation
  • 이를 해결하는 방법은 없다.

    • 조각 모음이나 남는 공간을 다른 프로세스에게 넘길 수 없다.
  • 유일한 해결책은 단위의 크기를 조절하는 것이다.

This post is licensed under CC BY 4.0 by the author.