연속 메모리 할당
- 프로세스에 연속적인 메모리 공간을 할당하는 방식
스와핑
- 실행되지 않는 프로세스들을 보조기억장치 일부 영역으로 쫓아내고
그렇게 해서 생긴 메모리상의 빈 공간에 다른 프로세스를 적재하여 실행하는 방식
- 스왑 영역 : 프로세스들이 쫓겨나는 보조기억장치의 일부 영역
- 스왑 아웃 : 실행되지 않는 포르세스가 메모리에서 스왑 영역으로 옮겨지는 것
- 스왑 인 : 스왑 영역에 있는 프로세스가 다시 메모리로 옮겨오는 것
메모리 할당
최초 적합
- 운영체제가 메모리 내의 빈 공간을 순서대로 검색하다가 적재할 수 있는 공간을 발견하면 그 공간에 프로세스를 배치하는 방식
- 검색을 최소화할 수 있고 빠른 할당이 가능하다
최적 적합
- 운영체제가 빈 공간을 모두 검색한 후, 프로세스가 적재될 수 있는 공간 중 가장 작은 공간에 프로세스를 배치하는 방식
최악 적합
- 운영체제가 빈 공간을 모두 검색한 후, 프로세스가 적재될 수 있는 공간 중 가장 큰 공간에 프로세스를 배치하는 방식
위 세 방식 모두 연속 메모리 할당 방식이다.
외부 단편화
-
프로세스를 메모리에 연속적으로 배치하는 할당은 비효율적이다.
-
위 예시에서 빈 공간은 50이지만 50크기의 프로세스를 적재할 수 없다.
프로세스들이 실행되고 종료되길 반복하며 메모리 사이에 공간 발생
-
외부 단편화
프로세스를 할당하기 어려울 만큼 작은 메모리 공간들로 인해 메모리가 낭비되는 현상
해결 방안
외부 단편화를 없앨 수 있는 다른 방법이 페이징 기법이다.
페이징을 통한 가상 메모리 관리
- 가상 메모리
실행하고자 하는 프로그램 일부만 메모리에 적재하여 실제 물리 메모리보다 더 큰 프로세스를 실행할 수 있게 하는 기술
페이징이란
-
프로세스의 논리 주소 공간을 페이지라는 단위로 자르고
메모리 물리 주소 공간을 프레임이라는 페이지와 동일한 크기의 일정한 단위로 자른 뒤
페이지를 프레임에 할당하는 가상 메모리 관리 기법
-
페이징에서도 스와핑을 사용할 수 있다.
프로세스 전체가 아닌 페이지 단위로 스왑 아웃 / 인 된다.
페이지 아웃 / 페이지 인 이라고 부르기도 한다.
한 프로세스를 실행하기 위해 프로세스 전체가 메모리에 적재될 필요는 없다.
-
프로세스를 이루는 페이지 중 필요한 페이지만 메모리에 적재하고, 나머지는 보조기억장치에 남겨둔다.
이를 통해 물리 메모리보다 더 큰 프로세스를 실행할 수 있다.
페이지 테이블
- 프로세스가 메모리에 불연속적으로 배치되어 있다면 CPU는 이를 순차적으로 실행할 수 없다.
그래서 페이지 테이블을 이용한다.
- 페이지 테이블
(실제 메모리 내의 주소)물리 주소에 불연속적으로 배치되더라도
(CPU가 보는 주소) 논리 주소에는 연속적으로 배치되도록 하는 방법
-
페이지 번호와 프레임 번호를 짝지어주는 역할
어떤 페이지가 어떤 어떤 프레임에 할당되었는지를 알려준다.
페이지 번호를 이용해 페이지가 적재된 프레임을 찾을 수 있다.
물리 주소에는 불연속적이더라도 논리 주소에는 연속적으로 배치되도록 한다.
-
페이징은 외부 단편화 문제를 해결할 수 있지만 내부 단편화 문제를 야기할 수 있다.
내부 단편화는 페이지 크기보다 작은 크기로 발생
PTBR
- CPU 내의 페이지 테이블 베이스 레지스터
각 프로세스의 페이지 테이블이 적재된 주소를 가리킨다.
- 이렇게 페이지 테이블을 메모리에 두면 메모리 접근 시간이 두 배가 된다.
페이지 테이블을 보는데 한 번, 프레임에 접근하는데 한 번이 소요됨.
TLB
- 위 문제를 해결하기 위해 CPU 곁에 TLB를 둔다.
TLB : 페이지 테이블의 캐시 메모리
페이지 테이블의 일부를 가져와 저장한다.
TLB 히트 : 발생한 논리 주소에 대한 페이지 번호가 TLB에 있을 경우
→ 메모리에 접근할 필요가 없어 한 번만 접근하면 된다.
TLB 미스 : 페이지 번호가 TLB에 없을 경우
페이징에서의 주소 변환
- 특정 주소에 접근하려면 정보가 필요하다.
- 어떤 페이지 혹은 프레임에 접근하고 싶은지
- 접근하려는 주소가 그 페이지 혹은 프레임으로부터 얼마나 떨어져 있는지
- 페이징 시스템에서는 모든 논리 주소가 페이지 번호와 변위로 이루어져 있다.
- 페이지 번호 : 접근하고자 하는 페이지 번호
- 변위 : 접근하려는 주소가 프레임의 시작 번지로부터 얼마나 떨어져 있는지
- <페이지 번호, 변위>로 이루어진 논리 주소는 페이지 테이블을 통해
<프레임 번호, 변위>로 변환된다.
논리 주소의 변위와 물리 주소의 변위 값은 같다.
페이지 테이블 엔트리
- 페이지 테이블의 각각의 행들을 말한다.
페이지 번호, 프레임 번호 외에도 다른 정보들이 들어있다.
유효 비트
- 현재 해당 페이지에 접근 가능한지 여부를 알려준다.
- 현재 페이지가 메모리와 보조기억장치 중 어디에 적재되었는지를 알려주는 비트
메모리에 적재되어 있다면 1, 그렇지 않다면 0
- 유효비트가 0인 페이지에 접근하려고 하면 페이지 폴트 인터럽트 발생
보호 비트
- 페이지 보호 기능을 위해 존재하는 비트
- 해당 페이지가 읽고 쓰기가 모두 가능한지, 혹은 읽기만 가능한 페이지인지를 나타낼 수 있다.
0이면 읽기만 가능, 1이면 둘 다 가능
- 세 개의 비트로 더 복잡하게 구현 가능하다.
읽기(r), 쓰기(w), 실행(x)의 조합으로 나타낸다.
100의 경우 읽기만 가능, 110의 경우 읽고 쓰기만 가능
참조 비트
- CPU가 페이지에 접근한 적이 있는지 여부를 나타낸다.
- 적재 이후 읽거나 쓴 페이지는 1로, 그렇지 않은 경우는 0으로 유지
수정 비트 (더티 비트)
- 해당 페이지에 데이터를 쓴 적이 있는지 없는지 수정 여부를 알려준다.
- 1이면 변경된 적 있고, 0이면 변경된 적 없다.
- 페이지가 메모리에서 사라질 때 보조기억장치에 쓰기 작업 필요 여부를 판단하기 위해 존재
페이지 교체와 프레임 할당
- 물리 메모리의 크기는 한정되어 있다.
기존에 적재된 불필요한 페이지를 선별해 보조기억장치로 내보내고
프로세스들에게 적절한 수의 프레임을 할당할 수 있어야 한다.
요구 페이징
- 프로세스를 메모리에 적재할 때 처음부터 모든 페이지를 적재하지 않고 필요한 페이지만을 메모리에 적재하는 기법
- 요구 페이징 시스템이 안정적으로 작동하려면 페이지 교체, 프레임 할당을 해결해야 한다.
페이지 교체 알고리즘
- 쫓아낼 페이지를 결정하는 방법
- 일반적으로 페이지 폴트를 적게 일으키는 알고리즘을 좋은 알고리즘으로 평가한다.
페이지 폴트가 일어나면 보조기억장치로부터 필요한 페이지를 가져와야해서 메모리에 있는 페이지를 가져오는 것보다 느리기 때문이다.
- 페이지 폴트 횟수는 페이지 참조열을 통해 알 수 있다.
페이지 참조열
FIFO 페이지 교체 알고리즘
-
가장 먼저 올라온 페이지부터 내쫓는 방식
-
초기에 적재된 페이지가 계속 사용될 내용을 담고 있을 경우 문제가 된다.
-
보완책 : 2차 기회 페이지 교체 알고리즘
참조 비트 1 : CPU가 참조한 적이 있는 페이지 → 참조 비트 0으로 초기화 후 적재 시간을 현재 시간으로 설정
참조 비트 0 : CPU가 참조한 적이 없는 페이지 → 내쫓기
최적 페이지 교체 알고리즘
- CPU에 의해 참조되는 횟수를 고려하는 알고리즘
사용 빈도가 가장 낮은 페이지를 교체하는 알고리즘
- 페이지 폴트 발생 빈도가 가장 낮다.
하지만 가장 사용되지 않을 페이지를 예측하는 것이 어렵기 때문에 실제 구현이 어렵다.
LRU 페이지 교체 알고리즘
- 가장 오랫동안 사용되지 않은 페이지를 교체하는 알고리즘
스래싱과 프레임 할당
- 프로세스가 사용할 수 있는 프레임 수가 적어도 페이지 폴트가 자주 발생한다.
스래싱
-
프로세스가 실제 실행되는 시간보다 페이징에 더 많은 시간을 소요해 성능이 저해되는 문제
-
근본적인 원인은 각 프로세스가 필요로 하는 최소한의 프레임 수가 보장되지 않기 때문
-
동시 실행되는 프로세스의 수를 늘린다고 CPU 이용률이 높아지는 것이 아니다.
-
그렇기에 운영체제는 최소한의 프레임 수를 파악하고 적절한 프레임을 할당할 수 있어야 한다.
프레임 할당 방식
- 균등 할당
모든 프로세스에 균등하게 프레임을 제공하는 방식
- 비례 할당
프로세스의 크기에 비례하여 프레임을 할당하는 방식
배분할 프레임 결정하는 방식
- 작업 집합 모델
프로세스가 일정 기간 동안 참조한 페이지 집합을 기억해 페이지 교체 방지하는 방식
작업 집합 : 실행 중인 프로세스가 일정 시간 동안 참조한 페이지 집합
- 작업 집합을 구하려면 필요한 것
- 프로세스가 참조한 페이지
- 시간 간격
- 페이지 폴트 빈도 기반
페이지 폴트율에 상한선, 하한선을 정하고 이 범위 안에서만 프레임 할당하는 방식