1. 페이징과 페이지 테이블
- 스와핑(swapping)
: 프로세스를 보조기억장치의 일부 영역으로 쫓아내고 당장 필요한 프로세스를 적재하는 메모리 관리 기법 - 스왑 아웃(swap-out)
: 프로세스를 보조기억장치의 일부 영역으로 쫓아내는 것 - 스왑 인(swap-in)
: 스왑 아웃된 프로세스를 메모리에 적재하는 것 - 스왑 영역
: 스왑 아웃된 프로세스가 적재되는 보조기억장치 영영 - 연속 메모리 할당
: 프로세스를 메모리에 연속적으로 배치하는 방식
==> 부작용: 외부 단편화
> 프로세스들이 실행되고 종료되길 반복하며 빈 공간이 생기는 메모리 낭비 현상 - 연속 메모리 할당의 부작용을 극복할 수 있는 방법은?
==> 메모리와 프로세스를 일정 단위로 자르고 잘라진 공간에 프로세스를 할당하기 - 페이징
: 물리 메모리를 프레임(frame)이라는 일정한 크기로 나누고 프로세스를 페이지(Page)라는 일정한 크기로 나눈 뒤 페이지를 프레임에 매핑하는 메모리 관리 방식- 페이지 아웃, 페이지 인
- 가상 메모리 (virtual memory)
- 프로세스의 일부만을 적재하여 실제 물리 메모리보다 큰 프로세스를 실행하는 기술
- 페이징은 현대 운영체제에서 가장 대중적으로 사용되는 가상 메모리 관리 기법
- 페이지 테이블
: 프레임과 페이지의 매핑 정보를 담고 있는 표 형태의 데이터- 페이지 테이블 베이스 레지스터(PTBR)
: 각 프로세스의 페이지 테이블 위치를 가리키는 레지스터 - TLB(Translation Look-asid Buffer)
: 페이지 테이블의 캐시 메모리 - 페이지 테이블 내 정보: 유효 비트(valid bit)
: 접근하려는 페이지가 보조기억장치에 있을 경우: 페이지 폴트(page fault)- 작업 내역 백업
- 페이지 폴트 루틴 실행 - 접근하려는 페이지 적재
- 유효 비트 1로 변경
- 접근하려는 페이지 접근
- 페이지 테이블 내 정보: 보호 비트(protection bit)
: 접근하려는 페이지의 권한 - 페이지 테이블 내 정보: 참조 비트(reference bit)
: 접근한 적 있는 페이지인가? - 페이지 테이블 내 정보: 수정 비트(modify bit / dirty bit)
: 쓰기 작업을 한 적 있는 페이지인가?
- 페이지 테이블 베이스 레지스터(PTBR)
2. 요구 페이징, 스래싱
- 요규 페이징
: 처음부터 모든 페이지를 적재하지 않고 페이지 폴트가 발생하면 그 때 페이지를 적재한다. - 순수 요구 페이징
- 아무 페이지를 적재하며 실행
- 첫 명령어 실행부터 페이지 폴트 발생
- 적당한 페이지가 적재된 이후부터 페이지 폴트 감소
==> 페이지 폴트는 적게 발생할수록 좋다
==> 물리 메모리가 크면 근본적으로 해결된다.
- 프레임이 무한히 많은 메모리의 경우 => 무한히 많은 페이지 적재 가능
- 프레임이 한 개 있는 메모리의 경우 => 페이지 접근할 때마다 페이지 폴트
- 스래싱
: 프로세스 실행 시간보다 페이징에 더 많은 시간이 소요되는 문제
: 지나친 페이지 폴트로 인해 페이지 교체에 너무 많은 시간을 소요하여 성능이 저하되는 문제
==> 그래프를 통해 동시 실행되는 프로세스 수를 늘린다고 해서 반드시 CPU 이용률이 비례하여 높아지는 것은 아니다.
- 많은 물리 메모리(프레임)를 확보할 수 없다면 페이지 폴트 횟수를 줄일 수 있는 방법은 뭘까?
==> 페이지 교체 알고리즘(보조기억장치로 내보낼 페이지 / 메모리에 적재할 페이지를 잘 선별하면 된다.)