연속 메모리 할당의 문제점
1. 외부 단편화
2. 물리 메모리보다 큰 프로세스 실행 불
페이징 (paging)
프로세스를 일정 크기로 자르고, 이를 메모리에 불연속적으로 할당하는 방식
프로세스의 논리 주소 공간을 페이지(page)라는 일정 단위로 자르고
메모리의 물리 주소 공간을 프레임(frame)이라는 페이지와 동일한 일정한 단위로 자른 뒤
페이지를 프레임에 할당하는 가상 메모리 관리 기법
이를 통해, 외부 단편화를 해결
페이징에서의 스와핑
프로세스 단위의 스왑 인, 스왑 아웃이 아닌 페이지 단위의 스왑 인(페이지 인), 스왑 아웃(페이지 아웃)
메모리에 적재될 필요가 없는 페이지들은 보조기억장치로 스왑 아웃
실행에 필요한 페이지들은 메모리로 스왑 인
하나의 프로세스를 실행하기 위해
해당 프로세스의 모든 페이지가 적재될 필요 없다
달리 말해 물리 메모리보다 큰 프로세스도 실행될 수 없다
하지만, 메모리 내에서 프로세스들이 불연속적으로 배치되어 있다면
이를 실행하는 CPU 입장에서는
프로세스를 이루는 페이지가 어느 프레임에 적재되어 있는지 CPU가 일일이 알기 어렵고
순차적으로 실행할 수가 없으며 '다음에 실행할 명령어 위치'를 찾기가 어려워짐
이를 해결하기 위해 페이지 테이블을 이용한다
페이지 테이블
(실제 메모리 내의 주소인) 물리 주소에 불연속적으로 배치되더라도
(CPU가 바라보는 주소인) 논리 주소에는 연속적으로 배치되도록 하는 방법
페이지 번호와 프레임 번호를 짝지어 주는 일종의 이정표
프로세스마다 페이지 테이블이 있다
물리적으로는 분산되어 저장되어 있더라도 CPU 입장에서 바라본 논리 주소는 연속적으로 보임
CPU는 그저 논리 주소를 순차적으로 실행하면 될 뿐
페이징과 페이지 테이블의 문제점 - 내부 단편화
모든 페이지 크기가 동일하다보니
마지막 페이지에서는 하나의 페이지 크기보다 작은 크기로 데이터가 있을 확률이 높다
PTBR
프로세스마다 페이지 테이블이 있고
각 페이지 테이블은 CPU 내의 프로세스 테이블 베이스 레지스터(PTBR)가 가리키고 있다
그런데, 페이지 테이블이 메모리에 있으면 메모리 접근 시간 두 배가 된다
페이지 테이블 참조하기 위해 한번
페이지 참조하기 위해 한번
따라서, 페이지 테이블이 메모리에 저장돼 있는 것이 효율적인 방식은 아닐 수 있다
TLB
위와 같은 문제를 해결하기 위해 캐시 메모리를 이용한다
TLB는 CPU 곁에 페이지 테이블의 캐시 메모리이며
페이지 테이블의 일부를 가져와 저장한다
이를 통해 불필요한 메모리 접근을 줄인다
TLB 히트: CPU가 접근하려는 논리 주소가 TLB에 있다면
메모리 접근이 한 번
TLB 미스: CPU가 접근하려는 논리 주소가 TLB에 없다면
메모리 접근이 두 번
페이징에서의 주소 변환
페이지 테이블에서 논리주소가 물리주소로 변환되는지에 초점을 맞춰보자
특정 주소에 접근하고자 한다면,
1. 어떤 페이지/프레임인지
2. 접근하려는 주소가 그 페이지 혹은 프레임으로부터 얼마나 떨어져 있는지를 알아야 한다
페이징 시스템에서의 논리 주소
페이지 번호(page number)와 변위(offset)로 구성되어 있다
따라서,
페이지 번호, 변위로 이루어진 논리 주소를
페이지 테이블을 통해
프레임 번호, 변위로 변환된다
페이지 테이블 엔트리 (PTE)
PTE는 페이지 테이블의 각각의 행을 의미하고
페이지 번호, 프레임 번호만 있는 것이 아닌
다양한 정보가 담겨있다
- 유효 비트
현재 해당 페이지가 메모리에 적재되어 있는지 여부를 나타낸다
메모리에 적재되어 있다면, 1
스왑 영역으로 나가있다면, 0
+ 유효 비트가 0인 페이지에 접근하려고 하면,
페이지 폴트(page fault)라는 인터럽트 발생
1) CPU는 기존의 작업 내역을 백업
2) 페이지 폴트 처리 루틴을 실행
3) 페이지 처리 루틴은 원하는 페이지를 메모리로 가져온 뒤 유효 비트를 1로 변경
4) 페이지 폴트를 처리했다면 이제 CPU는 해당 페이지에 접근할 수 있게 된다
- 보호 비트
읽기, 쓰기, 실행과 같이 페이지에 접근할 권한을 제한하여 페이지를 보호하는 비트
- 참조 비트
CPU가 이 페이지에 접근한 적이 있는지 여부
- 수정 비트 (dirty bit)
CPU가 이 페이지에 데이터를 쓴 적이 있는지 여부
수정 비트의 존재 이유는
스와핑과 관련이 있으며
페이지가 스왑 영역으로 이동하는 경우에
보조기억장치에 쓰기 작업을 해야 하는지 여부를
판단하기 위해 존재
수정된 페이지는 스왑 아웃될 때 보조기억장치에도 쓰기 작업을 해야 함
'CS > [혼자 공부하는] 운영체제' 카테고리의 다른 글
6-4] 가상메모리: 페이지 교체와 프레임 할당 (0) | 2023.06.10 |
---|---|
6-3] 가상 메모리: 쓰기 시 복사와 계층적 페이징 (0) | 2023.06.09 |
6-1] 가상 메모리: 연속 메모리 할당 (0) | 2023.06.08 |
5-2] 교착상태: 교착 상태 해결 방법 (0) | 2023.06.08 |
5-1] 교착상태: 교착 상태란 (0) | 2023.06.07 |