메모리 관리

1. 메모리 관리의 개념

메인메모리는 운영체제를 위한 영역과 실행중인 프로그램 영역으로 구분됨

  • 다중프로그래밍 시스템에서 운영체제에 의해 동적으로 메모리의 사용자 영역을 여러 프로세스가 상주할 수 있도록 세분화 하는 과정

반입정책

  • 메인 메모리에 적재할 다음 프로세스의 반입시기를 결정하는 방법

  1. 요구 반입 기법
    • 운영체제나 시스템 프로그램, 사용자 프로그램 등의 참조요구에 따라 메인메모리에 적재하는 방법으로 오랫동안 사용됨
  2. 예상 반입 기법
    • 시스템의 요구를 예측하여 메모리에 미리 적재하는 방법으로 최근 사용되기 시작함
    • 요구되는 페이지 외의 다른 페이지도 함께 불러들이며, 탐색시간과 회전지연시간을 갖는 보조기억장치의 특성을 참조한 정책

배치정책

  • 디스크에서 반입한 프로세스를 메인메모리에 어느 위치에 저장할 것인가를 결정하는 방법

대치정책

  • 재배치 기법으로 메인메모리에 있는 어떤 프로세스를 제거할 것인가를 결정하는 방법

2. 메모리 해석에 대한 두 가지 관점

절대 주소와 상대 주소

1) 절대 주소(물리적 주소)

  • 실제 물리 주소를 가리키는 주소

  • 실제 데이터나 프로그램이 저장되는 공간(RAM, 레지스터 등)

2) 상대 주소(논리적 주소)

  • 사용자 영역이 시작되는 번지를 0번지로 변경하여 사용하는 주소
  • 사용자 프로세스 입장에서 바라본 주소
  • 절대 주소와 관계없이 항상 0번지 부터 시작

메모리 매핑(주소 바인딩)

  • 프로세스의 상대 주소를 메모리의 절대 주소로 변환하는 과정

  • 메모리관리자(MMU)인 하드웨어에서 실행

MMU(Memory Management Unit)

  • 상대 주소를 절대 주소로 매핑해주는 하드웨어 장치

  • 재배치 레지스터(Relocation Register)한계 레지스터(Limit Register)를 사용하여 매핑한다

    • 재배치 레지스터: 주소변환의 기본이 되는 주소값을 가진 레지스터로, 메모리에서 사용자 영역의 시작 주소값이 저장.
    • 한계 레지스터: 해당 프로세스의 크기를 저장, 만약 요청한 상대 주소가 이 값을 벗어나는지 확인할 수 있음.

3. 메모리 낭비 방지 방법

동적 적재(Dynamic Loding)

  • 프로세스가 시작될 때 프로세스 전체를 메모리에 적재시키는 것이 아니라 메모리를 좀더 효율적으로 사용하기 위해 필요한 루틴이 호출될 때 해당 루틴을 메모리에 적재하는 방식
  • 프로그램 실행에 반드시 필요한 루틴/데이터만을 적재하는 것

장점/특징

  • 사용하지 않는 루틴을 적재하지 않음
  • 코드 양이 많이 필요한 경우 유용함
  • 프로그램 전체 양은 많으나 실제로 사용된 구역은 작으며, 운영체제로부터 특별한 지원을 필요치 않음(동적 연결적재기는 제공되어야 함)
  • 이용하기 위해서는 사용자 자신이 프로그램 설계를 책임져야 함.

동적 연결(Dynamic Linking)

  • 프로그램을 메모리에 적재할 때, 프로세스에서 공통으로 사용되는 라이브러리 루틴을 메모리에 중복으로 올리는 것은 낭비로 Linking(Object File과 Library File을 묶어 실행 파일 생성)을 실행 시점에서 하는 방식

  • 여러 프로그램에 공통 사용되는 라이브러리를 관리하는 방법

  • 라이브러리 루틴 연결을 실행 시까지 미루고 오직 하나의 라이브러리 루틴만 메모리에 적재해서 이 루틴과 연결을 하도록 하는 방법

중첩(Overlay)

  • 프로그램의 크기 > 실제 메모리의 크키인 경우에 전체 프로그램을 메모리에 가져오는 대신 적당한 크기로 잘라서 가져오는 방식

장점/특징

  • 한정된 메모리에서 메모리보다 큰 프로그램 실행 가능
  • 프로그램 전체가 아니라 일부만 메모리에 올라와도 실행 가능
  • 프로그램이 실행되면 필요한 모듈만 메모리에 올라와 실행됨

프로세스 교체(Swaping)

  • 주기억장치에 적재한 하나의 프로세스와 보조기억장치에 적재한 다른 프로세스의 메모리를 교체
  • 현재 사용되지 않고 있는 프로세스를 관리
  • 다중프로그래밍 환경에서 프로그램 수를 조절하여 성능 이슈를 해결하기 위함

  • swap in: 메인 메모리로 데이터를 가져오는 작업, 새로 시갖하는 프로세스를 메모리에 적재
  • swap out: 메인 메모리에서 데이터를 내보내는 작업, 수행이 완료 된 프로세스를 보조기억장치로 보냄

4. 메모리 관리 방식

연속 메모리 할당 방식

  • 프로그램(프로세스)를 적재하는 과정에서 연속적인 공간에 적재되도록 하는 방식
    1. 고정 분할 방식
    2. 가변 분할 방식
    3. 버디 시스템

분산 메모리(비연속 메모리) 할당 방식

  • 하나의 프로세스가 메모리의 여러 영역에 분산되어 적재되는 방식
    1. 페이징
    2. 세그먼테이션

1) 고정 분할 방식

  • 고정된 경계를 갖는 메모리 영역으로 구분하여 영구적인 파티션 으로 미리 나누어 각 분할에 하나의 프로세스를 적재하여 실행하도록 하는 방식

  1. 균등 분할
    • 사용 가능한 파티션이 있기만 하면 적재
    • 빈 공간이 없으면 준비상태가 아닌 기존 프로세스 스왑 아웃
  2. 비균등 분할
    • 최적 파티션에 할당(내부 단편화 최소화)
    • 할당 방법으로 단일큐 방식과 파티션당 독립된 프로세스 큐 할당 방식이 있음.

장점

  • 구현이 간단하며 운영체제의 오버헤드가 거의 없다

약점

  • 최대 활성 프로세스의 수 고정: 시스템 생성시간에 미리 정해진 파티션의 수에 의해 시스템 내에서 활성화된 프로세스의 수가 제한을 받는다.

  • 내부 단편화 발생: 시스템 생성시간에 파티션의 크기가 미리 정해지기 때문에, 크기작 작은 작업의 경우 파티션의 공간을 효율적으로 사용할 수 없다.

 

내부 단편화

  • 빈 파티션이지만 프로세스보다 크기가 작아 이용될 수 없음
  • 내부 공간의 낭비 발생

2) 가변 분할 방식

  • 프로그램의 크기를 고려하여 파티션의 크기 및 개수를 동적으로 바꾸는 방식
  • 어떤 프로그램이 종료되었을 때, 그 빈 파티션에서 외부 단편화가 발생할 수 있음

장점

  • 내부단편화가 없고 주기억장치를 보다 효율적으로 사용할 수있다.

약점

  • 외부단편화를 해결하기 위한 메모리집약이 요구된다.
    • 이로 인한 CPU의 효율이 나빠짐

 

외부 단편화

  • 메모리가 할당되고 해제되는 작업 이 반복되며 중간중간에 생긴 사용하지 않은 메모리가 많이 존재하여 총 메모리 공간은 충분하지만 할당 할 수 없는 상황

배치 알고리즘

메모리 집약은 많은 시간이 소모되는 작업이기 때문에 운영체제는 프로세스를 할당할때 어떤 위치에 할당할것인지를 결정해야 한다.

1. 최적 적합(Best Fit)
  • 메모리의 빈 공간을 모두 확인 한 후 요청된 크기와 가장 근접한 크기의 메모리를 선택
2. 최초 적합(First Fit)
  • 메모리의 처음부터 검사해서 크기가 충분한 첫번째 사용 가능한 메모리 블록을 선택
3. 순환 적합(Next Fit)
  • 가장 최근에 배치되었던 메모리의 위치에서부터 검사를 시작해 크기가 충분한 다음 위치의 사용가능한 메모리 블록을 선택
4. 최악 적합(Worst Fit)
  • 메모리의 빈 공간을 모두 확인 한 후 크기가 가장 큰 파티션에 적재

3) 버디 시스템

  • 고정 분할과 가변 분할 결점을 보안한 절충안
  • 큰 버퍼들을 반복적으로 이등분하여 작은 버퍼들을 만들며, 가능할 때마다 인접한 빈 버퍼들을 합치는 과정 반복, 버퍼를 나눌 때 각각을 서로의 버디라고 함

특징

  • 가변 분할 방식처럼 메모리가 프로세스 크기대로 나뉨
  • 고정 분할 방식처럼 하나의 구역에 다른 프로세스가 들어갈 수 없고, 메모리 한 구역 내부에 조각이 생겨 내부 단편화 발생
  • 비슷한 크기의 조각이 서로 모여 조각을 통합하여 큰 조각(메모리집약)을 만들기 쉬움

4) 페이징

  • 작업의 크기가 동일한 페이지로 나눠 처리하는 방법

페이지(page)

  • 작은 고정 사이즈의 프로세스 이미지 조각

프레임(frame)

  • 페이지와 크기가 같은 주기억장치 메모리 조각

페이지 테이블

  • 프로세스의 각 페이지에 해당하는 프레임 위치 관리

특징
  • 빈 프레임에 어떤 페이지든 적재할 수 있어 메모리를 효율적으로 사용
    • 프레임 간 외부 단편화가 발생하지 않음
  • 한 프로세스의 페이지를 메인 메모리의 여러 위치에 분산 적재됨
    • 운영체제의 페이지 관리 부담이 큼
  • 프레임 단위로 할당되므로 내부 단편화는 발생
    • 어떤 프로세스의 메모리 요구가 페이지 범위 내에 맞지 않으면, 할당된 마지막 프레임은 완전히 가득 차지 않을

5) 세그먼테이션

COMMING SOON

Reference

IT CookBook, 운영체제』, 구현회 집필, 한빛아카데미

IT CookBook, 쉽게 배우는 운영체제』, 조성호 집필, 한빛아카데미

『운영체제 : 내부구조 및 설계원리 (6판)』, WILLIAM STALLINGS 저, PEARSON HALL

'OS' 카테고리의 다른 글

08. CPU 스케줄링 알고리즘  (0) 2019.12.23
07. CPU 스케줄링 개요  (0) 2019.12.22
06. 교착상태  (0) 2019.12.16
05. 상호배제와 동기화 [2/2]  (0) 2019.12.15
05. 상호배제와 동기화 [1/2]  (0) 2019.12.15