본문 바로가기

프로그래밍/이론정리

운영체제 #4 - 메모리 관리


멀티프로그래밍 환경에서 다중의 프로세스가 동시에 실행되기 위해서는 메모리관리가 필요하다.
메모리관리는 메모리를 분할하고, 프로세스를 재배치하는 과정을 거친다.
주요 이슈는 스와핑(swapping)과 페이징(paging)이다.

활성화된 프로세스를 수용할 수 잇는 메모리가 충분하지 않을 때,
초과하는 프로세스를 디스크에 임시로 저장했다가 필요할 때 메모리에 적재하는 방법이 필요하다.


스와핑(Swapping) -  프로세스 전체를 디스크와 메모리간 이동하는 방식
가상메모리(Virtual memory) - 프로그램의 일부만 메모리에 적재되어도 동작할 수 있는 방식



[스와핑]
우선은 스와핑에 대해 살펴본다.
고정분할방식과 가변분할방식이 있지만 가변분할방식에 대해서만 살펴본다.
참고로, 고정분할방식은 분할된 메모리의 크기가 고정되어 크기별로 지정된 큐를 통해 프로세스를 관리한다.
가변분할방식은 하나의 큐를 사용하여 유연성과 메모리의 활용도는 높지만 메모리 추적과 할당/해제가 복잡해 진다.

주요 이슈
  메모리 압축
   스와핑을 하다보면 여러가의 빈공간이 생기게 되는게 낮은 주소로 이동시켜 하나의 큰 공간으로 만들 수 있다.
   이것을 메모리 압축이라 부르고 자바의 가비지 콜렉션과 비슷하다.
   이 기술은 CPU시간을 소비하기 때문에 잘 사용되지는 않는다.

  메모리공간 크기
   동적메모리할당으로 인해 정확한 크기를 알 수 없기 때문에 여분의 메모리를 할당해야한다.
   동적메모리할당시마다 공간부족으로 스와핑되는 CPU시간 소모를 줄일 수 있다.
   물론, 사용되지 않은 여분의 메모리는 스와핑하지 않는다.
   공간을 모두 사용했고 확장할 충분한 공간이 없다면 충분한 확보될때까지 스와핑되거나 실행중지되어야 한다.

  메모리 관리
   비트맵
    메모리 할당단위별로 비트맵을 사용하여 관리할 수 있다. 사용중이면 1, 비사용중이면 0인 간단한 방식이다.
    메모리 할당시 프로세스의 크기에 연속된 0을 찾는 것은 시간소모가 크다는 것이 단점이다.
    또 할당단위에 따라 비트맵의 크기와 메모리의 낭비가 결정되므로 할당단위의 선택이 설계시 중요하다.
   연결리스트
    홀(Hole)과 프로세스(Process)로 구분되는 연결리스트를 사용하여 메모리를 관리할 수 있다.
    홀과 프로세스 구분비트, 시작주소, 크기, 다음연결포인터의 4개의 요소로 노드를 구성하면 된다.
    이슈는 프로세스 할당시 최적의 위치를 빠르게 찾아내는 것이다.
    최초적합(first fit), 다음적합(next fit), 최적적합(best fit), 최악적합(worst fit), 퀵적합(quick fit) 등이 있다.


[가상메모리]
프로세스가 메모리보다 크기때문에 메모리에 수용할 수 없는 문제로 만들어 졌다.
초기에는 오버레이(overlay)라는 기술로 프로그래머에 의해 분할된 프로세스를 사용했지만,
1961년 Fotheringham에 의해 분할작업을 컴퓨터가 하는 기술인 가상메모리 기술이 공개되었다.

페이징
  가상메모리를 사용하기 위해서는 페이징이라는 기술이 요구된다.
  가상메모리가 물리메모리보다 크기 때문에 CPU가 요구하는 물리 메모리번지는 가상메모리번지도 변환되어야 한다.
  요구되는 물리메모리번지를 가상메모리번지로 변환하는 역할은 MMU(Memory manage unit)이 하게 된다.
  MMU는 물리메모리와 가상메모리를 맵핑하기 위해서 페이지 테이블을 사용하게 된다.

  페이지 테이블
   페이지 테이블에는 두가지 문제가 있다.
     1. 페이지 테이블의 크기
     2. 맵핑속도
   두가지 해결방안이 있는데, 두가지 방법을 원론대로 사용하지는 않는다.
     a. 레지스터에 페이지 테이블을 적재하는 것이다.
       장점: 프로세스 실행동안 메모리 참조가 필요치 않고, 간단한 구현
       단점: 레지스터 사용으로 비용증가, 문맥전환시 페이지테이블 적재로 성능저하
     b. 메모리에 페이지 테이블을 적재하고 레지스터에는 주소만 저장
       장점: 하나의 레지스터만 사용
       단점: 명령어 실행시마다 페이지 테이블을 위한 메모리 참조
    변형된 형태로는 다단계 페이지 테이블, TLB, 역변환 페이지 테이블 등의 기술이 있다.

  페이지 교체 알고리즘
    최적 페이지 교체 기법
        구현 불가능한 기법
        가장 나중에 참조될 페이지를 제거하는 기법
    NRU(Not Recently Used) 페이지 교체 알고리즘
        사용된 페이지 중 가장 오랫동안 사용되지 않은 페이지를 제거하는 기법
        구현이 용이하며 합당한 성능과 충분한 만족을 제공하는 기법
    FIFO(First-In, First-Out) 페이지 교체 알고리즘
        가장 오래된 페이지를 제거하는 기법
        자주 참조되는 페이지를 제거할 수 있기 때문에 잘 사용되지 않는 기법
    재기회(Second Chance) 페이지 교체 알고리즘
        FIFO의 간단한 변형 기법
        폴트시 이미 사용된 페이지는 적재시간을 현재시간으로 하여 제거유예
    클럭 페이지 교체 알고리즘
        재기회부여시에 리스트에서 제거하지 않고 순환리스트를 사용하여 포인트만 이동
        재기회 기법의 다른 구현방식
    LRU(Least Recently Used) 페이지 교체 알고리즘
        가장 오랫동안 사용하지 않은 페이지를 제거하는 기법
        최적 알고리즘에 상당히 근접한 방법, 구현이 까다로움, 하드웨어적 도움으로 구현가능
   




















'프로그래밍 > 이론정리' 카테고리의 다른 글

정렬알고리즘 정리  (0) 2011.03.01
네트워크 이론정리  (0) 2011.02.07
운영체제 #3 - 교착상태  (0) 2010.11.06
운영체제 #2 - 스케줄링  (0) 2010.11.01
운영체제 #1  (0) 2010.10.30