개념

10. 가상 메모리 관리

GenieLove! 2022. 10. 22. 23:27
728x90
반응형

가상 메모리 관리

* 프레임 : 물리 메모리를 일정한 크기로 나눈 블록

* 페이지 : 가상 메모리를 일정한 크기로 나눈 블록

요구 페이징

- 메모리를 효율적으로 사용하는 방법 중 하나로, 필요한 페이지만 적재하는 방법

- 가상 메모리 시스템을 사용하여 필요한 프로그램의 일부만 적재함으로써 메모리를 더 효율적으로 사용할 수 있도록 한다.

- 미리 가져오기는 요구 페이징과 반대로 앞으로 필요할 것이라 예상되는 페이지를 미리 가져오는 방식

   ex) 캐시

   *스와핑 : 프로세스를 구성하는 모든 페이지를 메모리에 올리는 것은 순수한 스와핑, 사용자가 요구할 때 메모리에 올리는 것은 게으른 스와퍼

페이지 테이블 엔트리 구조

  • 스왑 영역
    • 하드디스크에 존재하나 메모리 관리자가 관리하는 영역
    • 시스템에 메모리가 부족할 경우 하드디스크의 일부 공간을 활용하여 계속 작업을 도와주는 영역
    • 하드디스크의 일부를 RAM처럼 사용할 수 있게 만드는 것
    • 스왑인 : 스왑 영역에서 물리 메모리로 데이터를 가져오는 것
    • 스왑아웃 : 물리 메모리에서 스왑 영역으로 데이터를 내보내는 것

  • 사용자 프로세스가 스왑 영역에 있을 경우
    • 요구 페이징으로 인해 처음부터 물리 페이지에 올라가지 못한 경우
    • 메모리가 꽉 차서 스왑 영역으로 옮겨온 경우

  • 유효 비트 : 페이지 테이블에는 페이지가 물리 메모리에 있는지, 스왑 영역에 있는지 표시하는 방법

페이지 부재(Page Fault)

- 메모리에 적재된 페이지 중 사용 페이지가 없을 때로, 페이지 부재가 발생하면 프로세스가 해당 페이지를 사용할 수 있도록 스왑 영역에서 물리 메모리로 찾아 옮겨야 한다.

- 페이지 부재를 해결하는 방법

  • 첫번째 방법
    1. 스왑 영역에 있는 페이지를 메모리의 빈 영역에 올리고 페이지 테이블을 갱신한다.
    2. 빈 프레임이 없으면 메모리에 있는 프레임을 페이지 교체 알고리즘을 통해 대상 페이지(Victim Page, 교체될 페이지)를 선택하여 스왑 영역으로 옮긴다.
  • 워킹셋 : 프로세스가 일정 시간동안 자주 참조하는 페이지들의 집합으로, 페이지부재나 교체 현상이 줄어들어서 기억장치 사용이 안정된다.
  • 프리페이징 : 처음에 필요할 것으로 보이는 페이지를 모두 페이지 프레임에 적재하는 기법

페이지 교체 알고리즘

무작위 페이지 교체 알고리즘(Ramdom Page Replacement Algorithm)

- 스왑 영역으로 쫓아낼 대상 페이지를 특별한 로직 없이 무작위로 선정

FIFO 페이지 교체 알고리즘(First In First Out)

- 선입선출 알고리즘

- 무조건 오래된 페이지를 대상 페이지로 선정하기 때문에 성능 ⬇️ -> 개선한 것은 2차 기회 페이지 교체 알고리즘

최적 페이지 교체 알고리즘(Optimal)

- 앞으로 사용하지 않을 페이지를 선정

- 메모리가 앞으로 사용할 페이지를 미리 보고 페이지 교체 선정 시점부터 사용 시점까지 가장 멀리 있는 페이지를 선정

- 성능 ⬆️ -> But! 미래의 접근 패턴을 알기는 불가능하여 구현할 수 X

LRU 페이지 교체 알고리즘(Least Recently Used)

- 가장 오랫동안 사용되지 않은 페이지를 교체

- 각 페이지마다 시간 기억을 하는 계수기를 두고 참조한 시간이 체크되도록 하여 그 값을 보고 현재 시점에서 참조한지 가장 오래된 페이지를 대상 페이지로 선정

LFU 페이지 교체 알고리즘(Least Frequently Used)

- 참조 횟수가 가장 적은 페이지를 교체로, 현재 프레임에 있는 페이지마다 그동안 사용된 횟수를 세어 횟수가 가장 적은 페이지를 스왑 영역으로 이동

NUR 페이지 교체 알고리즘(Not Used Recently)

- LRU, LFU 페이지 교체 알고리즘과 성능이 거의 비슷하면서 불필요한 공간 낭비 문제도 해결한 알고리즘

- 최근에 사용하지 않은 페이지를 교체

- 각 페이지마다 두 개의 비트(참조비트, 변형비트)를 구성하여 두 값에 따라 대상 페이지 선정

- 적은 오버헤드로 성능 ⬆️

- LRU와 유사하면서 자주 쓰인다.

- 동일 그룹 내에선 선택은 무작위

- 클럭 알고리즘 중 하나

 

2차 기회 페이지 교체 알고리즘(Second Chance)

- FIFO 페이지 교체 기법과 참조 여부에 따른 우선순위를 고려하여 대상 페이지 선정

- 교체 대상 선정 방법

  1. 큐의 맨 위의 페이지를 확인하여 참조 비트를 검사
  2. 참조 비트가 0이면 교체 대상으로 선정
  3. 참조 비트가 1이면 0으로 변경 후 다시 큐의 맨 뒤에 저장

- FIFO보단 속도 ⬆️, LRU & LFU & NUR보단 속도 ⬇️

클럭 알고리즘(Clock)

- 2차 기회 페이지 교체 알고리즘을 원형 큐로 구현한 것

- 교체가 필요한 경우 큐에서의 삭제 및 삽입 대신 포인터로 이동을 간단하게 구현

- 클럭 알고리즘으로, 참조 비트를 순차적으로 조사

  1. 프레임에 있는 페이지가 참조되면 1로 세팅된다.
  2. 한 바퀴를 돌면서 참조되지 않은 페이지의 참조 비트 값을 0으로 바꾼다.
  3. 참조 비트가 0인 페이지를 방문 시 해당 페이지를 대상 페이지로 선정

 

 

스레싱과 프레임 할당

스레싱

- 하드디스크의 입출력이 너무 많아져서 잦은 페이지 부재로 작업이 멈춘 것 같은 상태

- 멀티프로그래밍 정도(degree of multiprogramming, 동시에 실행하는 프로그램 수)가 너무 높으면 스레싱이 발생할 수 있다.

- 스레싱 발생 지점(threshing point) : CPU가 작업하는 시간보다 스왑 영역으로 페이지를 보내고 새로운 페이지를 메모리에 가져오는 작업이 빈번해져서 CPU가 작업할 수 없는 상태가 발생한 지점

  • 프레임 할당 방식
    • 정적 할당: 프로세스 실행 초기에 프레임을 나누어준 후 크기를 고정하는 것
    • 동적 할당: 계속 변하는 요청을 수용하는 방식

 

 

참고: https://zangzangs.tistory.com/143

728x90
반응형