스와핑
- 현재 사용되지 않는 프로세스들을 보조기억장치 일부 영억으로 쫒아내고 빈 공간에 새 프로세스를 적재하는 방법
- 스와핑을 통해 프로세스들이 요구하는 메모리 공간 크기가 실제 메모리 크기보다 커질 수 있게 됨
연속 메모리 할당
- 프로세스들은 메모리의 빈 공간에 할당됨
- 빈 공간이 여러개 있다면 여러 공간 중 하나에 할당되는데, 최초 적합, 최적 적합, 최악 적합의 3가지 방식이 있음
최초 적합: 운영체제가 메모리 내 빈 공간을 검색하다가 적재할 수 있는 공간을 발견하는 대로 그 공간에 프로세스를 배치하는 방식
최적 적합: 운영체제가 빈 공간을 모두 검색하고 적재 가능한 가장 작은 공간에 할당하는 방식
최악 적합: 운영체제가 빈 공간을 모두 검색하본 뒤 적재 가능한 가장 큰 공간에 할당
- 프로세스를 연속적으로 메모리에 할당하는 방식은 메모리를 외부 단편화 문제로 인해 메모리를 효율적으로 사용하는 방법은 아님
외부 단편화
- 메모리를 할당한 다음 해제하는 과정에서 여러개의 빈 공간이 생겨 메모리가 낭비되는 현상
- 메모리 단편화를 해결하기 위한 방법으로 메모리 압축, 페이징이 있음
- 메모리 압축: 프로세스를 재배치시켜 빈 공간들을 하나로 모으는 방식, 많은 오버헤드를 야기하는 단점이 있음
페이징
- 프로세스의 논리 주소 공간을 페이지라는 일정 단위로 자르고, 메모리의 물리 주소 공간을 프레임이라는 페이지와 동일한 일정한 단위로 잘라 페이지를 프레임에 할당하는 가상 메모리 관리 기법
- 프로세스 단위가 아니라 페이지 단위로 스왑을 진행하며, 실행에 필요한 페이지들은 메모리로 페이지 인, 메모리에 있을 필요가 없는 페이지들은 페이지 아웃을 진행함
페이지 테이블
- 물리 주소에 불연속적으로 배치되더라도 CPU 입장에서 바라보는 논리 주소에는 연속적으로 배치되도록 하는 방법
- 페이지 번호와 프레임 번호를 짝지어 주는 역할을 함
- 페이지 테이블은 프로세스마다 존재함
- 페이징은 외부 단편화를 해결해 주지만, 페이지의 마지막 부분에 빈 공간이 생기는 내부 단편화 문제가 생김
PTBR
- 프로세스마다 페이지 테이블이 있고 각 페이지 테이블은 CPU 내의 프로세스 테이블 베이스 레지스터(PTBR)이 가리킴
- CPU는 PTBR 레지스터를 통해 프로세스의 프레임이 각각 어디에 할당되는지 알 수 있게 됨
- 페이지 테이블이 메모리에 있으면 메모리를 접근하는 시간이 두배로 증가하게 됨 (페이지 테이블 참조, 실제 메모리 주소 접근) => 속도 저하의 문제가 있음
TLB
- 페이지 테이블의 캐시 메모리로, 페이지 테이블의 일부를 가져와 저장하는 공간
- TLB 히트가 되면 메모리 접근을 한번 하고, TLB 미스가 일어나면 메모리 접근을 두번 진행하게 됨
- 메모리의 접근을 줄일 수 있다는 장점이 있음
페이징에서의 주소 변환
- 어떤 프레임에 접근하고 싶은지, 접근하려는 주소가 그 페이지, 프레임으로부터 얼마나 떨어져 있는지를 우선 알아야 함
- 이를 위해 페이징 시스템에서의 논리 주소는 페이지 번호와 변위의 2가지로 이루어져 있고, 이는 페이지 테이블을 통해 프레임 번호, 변위로 변환되게 됨
ex)
- 논리주소 <페이지 번호, 변위>가 <5, 2>인 곳에 접근하고자 한다.
- 이 때 5번페이지의 프레임 번호를 페이지 테이블로부터 확인한다.
- 5번 페이지가 1번 프레임에 있고 이는 8-12번지를 차지한다 하면, <5, 2>의 주소는 8번지로부터 2만큼 떨어진 10번지가 됨
페이지 테이블 엔트리
- 페이지 테이블에서 각각의 행을 페이지 테이블 엔트리(PTE)라고 함
- PTE에는 페이지 번호, 프레임 번호, 유효비트, 보호 비트, 참조 비트, 수정 비트가 있음
유효 비트: 현재 해당 페이지에 접근 가능한지 여부 (= 스왑됬는지 여부)
유효 비트가 0인 페이지에 접근하려고 하면 페이지 폴트 인터럽트가 발생하며 사진과 같은 절차를 거침
![](https://velog.velcdn.com/images/nhs075241/post/24febbcf-3d3b-4318-8154-75d16d687c2d/image.png)
보호 비트: 페이지 보호 기능을 위해 조냊하며, 페이지의 읽기, 쓰기, 실행 등의 권한을 제한하는 역할을 함
참조 비트: CPU가 이 페이지에 접근한 적이 있는지 여부
수정 비트: CPU가 이 페이지에 데이터를 쓴 적이 있는지 여부, 데이터가 변경됬으면 스왑 아웃 시 보조기억장치에도 쓰기 작업을 해야 하기 때문에 존재
요구 페이징
- 처음부터 모든 페이지를 적재하지 않고 필요한 페이지만을 메모리에 적재하는 기법
- 다음과 같은 과정을 통해 CPU는 프레임에 접근함
- CPU가 특정 페이지에 접근하는 명령어를 실행
- 해당 페이지의 유효 비트가 1일 경우 CPU는 페이지가 적재된 프레임에 접근
- 유효 비트가 0이면 페이지 폴트 발생
- 페이지 폴트 처리 루틴을 해당 메모리로 적재하고 유효 비트를 설정
- 요규 페이징 시스템이 안정적으로 작동하려면 페이지 교체, 프레임 할당 관리를 잘 해야함
페이지 교체 알고리즘
- 어떤 페이지를 보조기억장치로 내놓을 것인지를 결정하는 알고리즘
- 페이지 폴트를 최소화하는 알고리즘이 좋은 알고리즘임
- 페이지 폴트 횟수를 알기 위해 페이지 참조열을 확인함
페이지 참조열: CPU가 참조하는 페이지들 중에 연속된 페이지를 생략한 페이지열
FIFO 페이지 교체 알고리즘
- 메모리에 가장 먼저 올라온 페이지부터 교체하는 방식
- 프로그램 실행 내내 사용될 페이지까지 페이지 교체를 하기 때문에 성능면에서 좋지는 않음
2차 기회 페이지 교체 알고리즘
- FIFO 교체 알고리즘을 보완하는 방식
- 참조 비트가 1이면 참조 비트를 0으로 바꾸고 적재 시간을 현재시간으로 바꿔줌
최적 페이지 교체 알고리즘
- CPU에 의해 참조되는 횟수를 고려하는 알고리즘
- 앞으로의 사용 빈도가 가장 낮은 페이지부터 교체함
- 가장 낮은 페이지 폴트율을 보장하지만, 예측이 어렵기 때문에 실제 구현이 어려움
LRU(Least Recently Used) 페이지 교체 알고리즘
- 가장 오래 사용하지 않은 페이지를 교체하는 알고리즘
- 최적 페이지 교체 알고리즘에 비해 구현이 쉬움
스래싱
![](https://velog.velcdn.com/images/nhs075241/post/a72f3731-0b24-4c44-86a1-e51778f30951/image.png)
- 스래싱은 프로세스보다 실행되는 시간보다 페이징에 더 많은 시간을 소요해 성능이 저하되는 문제
스래싱으로 인해 동시 실행되는 프로세스의 수를 늘린다고 CPU 이용률이 높아지는 것은 아님
스래싱의 페이지 폴트가 자주 발생하는 이유는 페이지 교체 알고리즘 보다도 프로세스가 사용할 수 있는 프레임 자체가 적은 것이 원인인 경우가 많음
- 각 프로세스가 필요로 하는 최소한의 프레임 수를 확인하고 프로세스들에게 적절한 프레임을 할당해야 함
- 프레임 할당 방법에는 균등 할당, 비례 할당, 작업 집합 모델, 페이지 폴트 빈도 방식이 있음
균등 할당: 모든 프로세스들에게 균등하게 프레임을 할당하는 방식
비레 할당: 프로세스의 크기에 비례하여 프레임 할당
작업 집합 모델: CPU가 특정 시간 동안 주로 참조한 페이지 개수만큼 프레임 할당
작업 집합을 구하기 위해서는 프로세스가 참조한 페이지, 시간 간격을 알고 그 동안에 주로 참조한페이지를 확인
페이지 폴트 빈도: 페이지 폴트율에 상한선과 하한선을 정하고 그 내부 범위에서만 프레임을 할당 방식
균등 할당, 비례 할당은 정적 할당 방식, 작업 집합 모델, 페이지 폴트 빈도는 동적 할당 모델임
쓰기 시 복사
- 프로세스는 기본적으로 자원을 공유하지 않기 때문에 자식 프로세스들은 부모 프로세스가 적재된 별도의 공간에 통째로 복재됨 => 프로세스 시간 지연, 메모리 낭비
- 쓰기시 복사는 부모 프로세스와 동일한 자식 프로세스가 복제되면 자식 프로세스는 부모 프로세스와 동일한 프레임을 가리키는 방식
- 쓰기 작업이 없다면 이 상태를 유지하고, 쓰기작업을 하면 별도의 공간으로 복제됨
계층적 페이징
![](https://velog.velcdn.com/images/nhs075241/post/20f90c81-9e8f-4147-a437-231d84289dfe/image.png)
- 페이지 테이블을 페이징 해서 여러 단계의 페이지를 두는 방식
- CPU와 가장 가까이 위치한 페이지 테이블 (Outer 테이블)만 메모리에 저장해 둠
- 페이지 테이블 전부를 메모리에 두지 않아 메모리를 절약할 수 있음
![](https://velog.velcdn.com/images/nhs075241/post/2e930d26-9349-4d80-b095-910c8e3664d9/image.png)
- 계층적 페이징을 이용하는 환경에서는 논리 주소에 바깥 페이지 번호, 안쪽 페이지 번호, 변위가 담기게 됨
출처:
https://www.youtube.com/watch?v=bNFLpMUYqSE&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl&index=39
혼자 공부하는 컴퓨터 구조+운영체제, 강민철, 한빛미디어