목차
- 요구페이징
- 페이지 교체
- 페이지 교체 알고리즘
- 스래싱
- 프레임 할당
물리 메모리보다 큰 프로세스를 실행할 수 있지만,
그럼에도 불구하고 메모리의 크기는 한정되어 있다.
운영체제 입장에서 해결해야 할 문제
- 기존에 적재된 불필요한 페이지를 선별해 보조기억장치로 내보내야 함(페이지 교체)
- 프로세스들에게 적잘한 수의 프레임을 할당해야 함(프레임 할당)
요구 페이징
- 처음부터 모든 페이지를 적재하지 않고 필요한 페이지만을 메모리에 적재하는 기법
- 요구되는 페이지만 적재하는 기법
- 순수 요구 페이징 방식
이러한 요구 페이징 시스템이 안정적으로 작동하려면 해결해야 할 문제?
- 페이지 교체
- 프레임 할당
페이지 교체 알고리즘
- 요구 페이징 기법으로 페이지들을 적재하다보면 언젠간 메모리가 가득 차게 된다.
- 당장 실행에 필요한 페이지를 적재하려면 적재된 페이지를 보조기억장치로 내보내야 한다.
- 이 때, 어떤 페이지를 내보내야 할까?
- 이를 결정하는 방법(알고리즘)이 페이지 교체 알고리즘
무엇이 좋은 페이지 교체 알고리즘일까?
- 페이지 폴트가 적은 알고리즘
- 페이지 폴트가 발생하면 보조기억장치에 접근해야 해서 성능 저하
그럼 페이지 폴트 횟수를 어떻게 알 수 있을까?
- 페이지 참조열(page reference string)
- CPU가 참조하는 페이지들 중 연속된 페이지를 생략한 페이지 열
FIFO 페이지 교체 알고리즘
- 가장 단순한 방식
- 메모리에 가장 먼저 올라온 페이지부터 내쫓는 방식
- "오래 머물렀으면 나가라"
- 프로그램 실행 초기에 잠깐 실행될 페이지
- 프로그램 실행 내내 사용될 페이지 <= 먼저 적재되었다고 내쫓아선 안된다.
보완책
- 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. 페이지 폴트율이 너무 낮으면 그 프로세스가 너무 많은 프레임을 갖고 있다.
페이지 폴트율 기반의 프레임 할당 방식
- 프로세스가 실행하는 과정에서 배분할 프레임 결정
- 페이지 폴트율에 상한선과 하한선을 정하고, 그 내부 범위안에서만 프레임을 할당하는 방식
- 동적 할당 방식
해당 포스팅에 나온 글과 이미지들은 강민철 저자님의 혼자 공부하는 컴퓨터 구조 + 운영체제의 책과 강의를 참고하여 만들어졌습니다.
책에서 보다 깊게 나오는 내용이 있으므로 한번 구매하고 보셔도 좋을 것 같습니다.
'CS' 카테고리의 다른 글
[CS] PCB와 TCB (0) | 2024.11.06 |
---|---|
[CS] 파일 시스템 (0) | 2024.05.27 |
[CS] 페이징의 이점 (0) | 2024.05.26 |
[CS] 운영체제의 메모리 관리 방식 페이징 (0) | 2024.05.26 |
[CS] 교착 상태 (0) | 2024.05.26 |