본문 바로가기

CS

[CS] 페이지 교체와 프레임 할당

목차

  • 요구페이징
  • 페이지 교체
  • 페이지 교체 알고리즘
  • 스래싱
  • 프레임 할당

 

물리 메모리보다 큰 프로세스를 실행할 수 있지만,

그럼에도 불구하고 메모리의 크기는 한정되어 있다.

 

운영체제 입장에서 해결해야 할 문제

  • 기존에 적재된 불필요한 페이지를 선별해 보조기억장치로 내보내야 함(페이지 교체)
  • 프로세스들에게 적잘한 수의 프레임을 할당해야 함(프레임 할당)

 

 

요구 페이징

  • 처음부터 모든 페이지를 적재하지 않고 필요한 페이지만을 메모리에 적재하는 기법
  • 요구되는 페이지만 적재하는 기법
    • 순수 요구 페이징 방식

 

 

이러한 요구 페이징 시스템이 안정적으로 작동하려면 해결해야 할 문제?

  • 페이지 교체
  • 프레임 할당

 

페이지 교체 알고리즘

  • 요구 페이징 기법으로 페이지들을 적재하다보면 언젠간 메모리가 가득 차게 된다.
  • 당장 실행에 필요한 페이지를 적재하려면 적재된 페이지를 보조기억장치로 내보내야 한다.
  • 이 때, 어떤 페이지를 내보내야 할까?
  • 이를 결정하는 방법(알고리즘)이 페이지 교체 알고리즘

 

무엇이 좋은 페이지 교체 알고리즘일까?

  • 페이지 폴트가 적은 알고리즘
  • 페이지 폴트가 발생하면 보조기억장치에 접근해야 해서 성능 저하

 

그럼 페이지 폴트 횟수를 어떻게 알 수 있을까?

  • 페이지 참조열(page reference string)
  • CPU가 참조하는 페이지들 중 연속된 페이지를 생략한 페이지 열

 

 

FIFO 페이지 교체 알고리즘

  • 가장 단순한 방식
  • 메모리에 가장 먼저 올라온 페이지부터 내쫓는 방식
  • "오래 머물렀으면 나가라"

페이지 교체에서 발생하는 페이지 폴트만 페이지 폴트로 간주(순수 요구 페이징 X)

 

 

  • 프로그램 실행 초기에 잠깐 실행될 페이지
  • 프로그램 실행 내내 사용될 페이지 <= 먼저 적재되었다고 내쫓아선 안된다.

 

보완책

  • 2차 기회(second-chance) 페이지 교체 알고리즘
  • 참조 비트 1: CPU가 한 번 참조한 적이 있는 페이지
    • 한 번 더 기회를 주기
    • 참조 비트 0으로 초기화 후 적재 시간을 현재 시간으로 설정
  • 참조 비트 0: CPU가 참조한 적이 없는 페이지
    • 내쫓기

 

 

 

 

최적 페이지 교체 알고리즘

  • CPU에 의해 참조되는 횟수를 고려
  • 메모리에 오래 남아야 할 페이지는 자주 사용될 페이지
  • 메모리에 없어도 될 페이지는 오랫동안 사용되지 않을 페이지

앞으로의 사용 빈도가 가장 낮은 페이지를 교체하는 알고리즘

 

  • 가장 낮은 페이지 폴트율을 보장하는 페이지 교체 알고리즘
  • 하지만 실제 구현이 어렵다.
  • "앞으로 오랫동안 사용되지 않을 페이지? 어떻게 예측하지?"
  • 다른 페이지 교체 알고리즘 성능을 평가하기 위한 하한선(척도)으로 간주

 

 

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

  • 최적 페이지 교체 알고리즘: 가장 오래 사용되지 않을 페이지 교체
  • LRU 페이지 교체 알고리즘: 가장 오래 사용되지 않은 페이지 교체
  • "최근에 사용되지 않은 페이지는 앞으로도 사용 안되지 않을까?"

 

 

기타 페이지 교체 알고리즘

  • 이외에도 많은 페이지 교체 알고리즘들이 있다.
  • 페이지 교체 알고리즘이란 무엇인지
  • 페이지 교체는 왜 해야 하는지
  • 무엇이 좋은 페이지 교체 알고리즘인지

 

스래싱과 프레임 할당

페이지 폴트가 자주 발생하는 이유

  • 나쁜 페이지 교체 알고리즘을 사용해서
  • 프로세스가 사용할 수 있는 프레임 자체가 적어서

 

 

스래싱

프로세스가 실행되는 시간보다 페이징에 더 많은 시간을 소요하여 성능(CPU 이용률)이 저해되는 문제

 

스래싱을 그래프로 표현해보자

  • 동시 실행되는 프로세스의 수를 늘린다고 CPU 이용률이 높아지는 것이 아니다.
  • 페이징 폴트가 너무 빈번하게 일어나기 때문에 막상 실행해야하는 프로세스가 실행하지 못하는 상태

멀티 프로그래밍의 정도: 메모리에 동시에 실행되는 프로세스의 수

 

스래싱 정리

  • 각 프로세스가 필요로 하는 최소한의 프레임 수가 보장되지 않았기 때문
  • 안전하게 실행하려면 10개의 프레임이 필요한대 5개의 프레임만 할당해서 페이지 폴트가 빈번하게 발생하는 상황
  • 각 프로세스가 필요로 하는 최소한의 프레임 수를 파악하고 프로세스들에게 적절한 프레임을 할당해주어야 함

 

프레임 할당

 

1. 균등 할당(equal allocation)

  • 가장 단순한 할당 방식
  • 모든 프로세스들에게 균등하게 프레임을 할당하는 방식
  • 정적 할당 방식(프로세스의 실제 실행 과정을 고려하지 않고 단순히 프로세스의 크기만을 보고 할당 방식)

실행되는 프로세스들의 크기는 각기 다를수 있기 때문에 동일한 프레임을 할당하는 것은 비합리적이다.

 

 

2. 비례 할당(proportional allocation)

  • 프로세스의 크기를 고려하자
  • 프로세스 크기에 비례하여 프레임 할당
  • 정적 할당 방식

하지만 크기가 큰 프로세스인데 막상 실행해보니 많은 프레임을 필요로 하지 않다면?

크기가 작은 프로세스인데 막상 실행해보니 많은 프레임이 필요로 하면?

결국 프로세스가 필요로 하는 프레임 수는 실행해봐야 안다.

 

 

3. 작업 집합 모델

  • 프로세스가 실행하는 과정에서 배분할 프레임을 결정
  • 스레싱이 발생하는 이유는 빈번한 페이징 교체 때문
    • 그렇다면 CPU가 특정 시간 동안 주로 참조한 페이지 개수만큼만 프레임을 할당하면 된다.
  • '프로세스가 일정 기간 동안 참조한 페이지 집합'을 기억하여 빈번한 페이지 교체를 방지
    • 작업 집합이란 "실행 중인 프로세스가 일정 시간 동안 참조한 페이지의 집합"

 

그렇다면 작업 집합을 구하기 위해서 어떻게 해야 할까?

  1. 프로세스가 참조한 페이지
  2. 시간 간격이 필요

 

작업 집합 모델 기반의 프레임 할당 방식

  • 동적 할당 방식

이 프로세스의 최소 프레임 할당: 5개
이 프로세스의 최소 프레임 할당: 7개

 

 

 

페이지 폴트 빈도

  • 프로세스가 실행하는 과정에서 배분할 프레임 결정
  • 두 개의 가정에서 생겨난 아이디어
  • 1. 페이지 폴트율이 너무 높으면 그 프로세스는 너무 적은 프레임을 갖고 있다.
  • 2. 페이지 폴트율이 너무 낮으면 그 프로세스가 너무 많은 프레임을 갖고 있다.

 

페이지 폴트율 기반의 프레임 할당 방식

  • 프로세스가 실행하는 과정에서 배분할 프레임 결정
  • 페이지 폴트율에 상한선과 하한선을 정하고, 그 내부 범위안에서만 프레임을 할당하는 방식
  • 동적 할당 방식

 

 

해당 포스팅에 나온 글과 이미지들은 강민철 저자님의 혼자 공부하는 컴퓨터 구조 + 운영체제의 책과 강의를 참고하여 만들어졌습니다.

책에서 보다 깊게 나오는 내용이 있으므로 한번 구매하고 보셔도 좋을 것 같습니다.

 

[한빛미디어] 혼자 공부하는 컴퓨터 구조+운영체제

좋은 개발자는 컴퓨터를 분석의 대상으로 바라볼 뿐, 두려워하지 않는다!‘전공서가 너무 어려워서 쉽게 배우고 싶을 때’, ‘개발자가 되고 싶은데 뭐부터 봐야 하는지 모를 때’ ‘기술 면접

hongong.hanbit.co.kr

 

 

 

'CS' 카테고리의 다른 글

[CS] 파일 시스템  (0) 2024.05.27
[CS] 페이징의 이점  (0) 2024.05.26
[CS] 운영체제의 메모리 관리 방식 페이징  (0) 2024.05.26
[CS] 교착 상태  (0) 2024.05.26
[CS] 동기화  (0) 2024.05.26