[OS기초] 메모리 관리(가상 메모리, 페이지 부재, 페이지 교채, 스레싱)

adam2·2020년 1월 10일
0

운영체제의 메모리 관리

운영체제는 자원의 효율적인 관리를 도맏아 하는 소프트웨어이다.
따라서 운영체제는 어떤 프로그램에 얼마만큼의 메모리를 할당해야 할지를 결정해야한다.

메모리 할당 방법에는

  • 균등 할당
  • 비례 할당
  • 우선순위 할당

세가지 방법이 있다.
균등할당은 프로세스마다 동일한 메모리를 할당하는 방식이고, 비례할당은 프로세스의 크기에 비례하게 메모리를 할당하는 방식, 우선순위 할당은 우선순위가 높은 프로세스에게 더 많은 메모리를 할당하는 방식이다.

또한 운영체제는 프로세스를 통째로 메모리에 올릴 수 있지만 CPU에서 당장 수행해야 할 부분만 메모리에 올리고 나머지는 디스크의 swap 영역에 두어 메모리를 효율적으로 사용한다.

가상 메모리

운영체제는 프로그램이 자기 자신만의 가상 메모리를 사용하는 것처럼 가정해 프로그램 하는 것을 지원한다. 가상 메모리 주소 공간은 논리적 주소로서 모든 프로그램마다 0부터 시작하게 된다.
즉, 가상메모리는 프로세스마다 논리적 주소공간을 가지고 이 주소공간의 일부는 물리적 메모리에 적재되고 일부는 스왑영역에 존재한다.

장점

  • 메모리 사용량 감소 (프로세스 일부만 올리니까)
  • 입출력 오버헤드 감소 ( 일부만 디스크 -> 메모리 입출력 하니까)
  • 시스템이 더 많은 프로세스를 수용할 수 있다.
  • 프로그램이 물리적 메모리의 용량 제약에서 자유롭다 (메모리보다 큰 프로그램 실행 가능)

가상메모리 기법은 프로세스의 주소공간을 적재하는 단위에 따라 요구 페이징 기법요구 세그멘테이션 기법 두개로 나눌 수 있다.

요구 페이징 기법

페이지 단위로 프로세스의 주소공간을 메모리에 적재하며 당장 사용될 페이지만을 메모리에 적재한다.

페이지 부재

CPU에서 요청한 페이지가 현재 메모리에 없어 유효-무효 비트가 무효로 세팅되어 있는 경우를 말한다.
페이지 부재 발생 시 페이지를 디스크에서 읽어와야 하는데 이 과정에서 막대한 overhead가 발생한다. 따라서 요구 페이징 기법은 페이지 부재 발생률이 성능에 큰 영향을 끼친다.

페이지 부재 시 동작 과정

  1. MMU(Memory Management Unit)가 페이지 부재 트랩을 발생시킨다. (트랩=소프트웨어 인터럽트)
  2. 인터럽트로 인해 커널모드로 전환되어 OS의 페이지 부재 처리 루틴이 호출된다.
  3. 해당 부재 페이지의 보호비트를 참조해 접근이 가능한지 체크한다.
  4. 물리메모리에 비어있는 프레임을 할당받고 그곳에 페이지를 읽어온다.
  5. 페이지를 읽어오는 동안 프로세스는 wait상태가 된다.
  6. 디스크 입출력 완료시 인터럽트를 발생시키고 해당 페이지의 유효-무효 비트를 유효로 세팅한다

페이지 교체

페이지 부재 발생시 메모리에 해당 페이지를 적재해야 하는데 이때 메모리가 꽉찼다면 어떡해야 할까??
이때는 메모리에 있는 페이지중 가장 쓸모 없어보이는 것을 골라 스왑 영역으로 쫒아내고 그 자리에 페이지 부재된 페이지를 적재해야 한다. 이 과정이 페이지 교체이다.

교체할 페이지를 선정할 때 교체 대상이 될 프레임의 범위에 따라 전역 교체지역 교체로 나눌 수 있다.
전역교체 방법은 모든 페이지 프레임이 교체 대상이 될 수 있는 방법이다. 지역 교체 방법은 현재 수행중인 프로세스에게 할당된 페이지 프레임 내에서만 페이지 교환을 하는 방법이다.

페이지 교체 알고리즘

  • 최적 교체(OPT) 알고리즘
  • FIFO
  • LRU(Least Recently Used)
  • LFU(Least Frequently Used)
  • NUR(Not Used Recently)

최적 페이지 교체 알고리즘

각 페이지의 호출 순서를 미리 알고있는 전제 하에 알고리즘을 운영
가장 먼 미래에 호출될 페이지와 교체한다.
실제로 구현할수 없다.

LRU

가장 과거에 호출되었던 페이지와 교체한다.
시간 지역성을 활용

최근에 참조된 페이지가 다시 참조될 가능성이 높다

LFU

가장 적은 횟수로 참조된 페이지와 교체한다.
Incache-LFU, Perfect-LFU

NUR(클럭 알고리즘)

LRU 근사 알고리즘이다.
LRU처럼 오랫동안 참조하지 않은 페이지중 하나를 선택하지만 가장 오래된 페이지라는 보장은 없다.
하드웨어적 지원을 통해 알고리즘을 운영해 오버헤드를 줄임
페이지 프레임의 참조 비트를 조사해서 참조비트가 0인 페이지를 찾으면 그 페이지와 교체한다

스레싱

프로세스의 처리 시간보다 페이지 교체에 드는 시간이 더 많아져 CPU이용률이 떨어지는 현상을 말한다.
다중프로그래밍정도가 높아지면 어느정도 까지는 CPU이용률이 오르지만, 한계치를 넘으면 스레싱이 발생하고 CPU이용률이 급감한다.

다중프로그래밍정도: 메모리에 동시에 올라가 있는 프로세스의 수

해결책

  • 다중프로그래밍정도를 적정 수준으로 유지한다.
  • 페이지 부재 빈도를 조절한다
  • working set을 유지한다
  • 일부 프로세스를 중단한다
profile
개발의 'ㄱ'을 알아가고 있습니다.😊🤞

0개의 댓글