가상 메모리
- 실행하고자 하는 프로그램의 일부만 메모리에 적재하여 실제 물리 메모리보다 더 큰 프로세스를 실행할 수 있게 하는 기술
- 한 프로세스를 실행하기 위해 프
로세스 전체가 메모리에 적재될 필요 x
- 가상 메모리 관리 기법에는 페이징, 세그멘테이션 존재
- 현대 운영체제는 대부분 페이징 사용
페이징
- 메모리의 물리 주소 공간을 프레임 단위, 프로세스의 논리 주소 공간을 페이지 단위로 잘라 각 페이지를 프레임에 할당하는 기법
- 일정한 단위로 잘라 할당시키기 때문에 프로세스 전체가 연속적으로 할당될 필요 없음
페이지 테이블
- 프로세스가 메모리에 불연속적으로 배치되면 다음에 실행할 명령어 위치를 찾기 어려움
- 페이지 테이블의 페이지 번호를 이용해 페이지가 할당된 프레임을 찾아감을 통해 논리 주소에는 연속적으로 배치될 수 있음
- 페이지를 통해 어떤 프레임에 어떤 페이지가 할당되었는지 알 수 있다.
Page Table Base Register - PTBR
그럼 프로세스마다 프로세스 페이지 테이블을 가져야 할 것임
이 프로세스 페이지 테이블은 메모리에 적재되어 있다.
그리고 CPU 내부의 PTBR이 각 프로세스 페이지 테이블이 적재된 주소를 가리킨다.
페이지 테이블을 메모리에 뒀을 때의 문제점
- CPU가 페이지 테이블에 접근하고
- 접근한 페이지 테이블에서 프레임 번호를 얻어 프레임 접근
총 2번의 메모리 접근이 필요
이를 해결하기 위해 TLB가 존재
Translation Lookaside Buffer - TLB
- CPU 곁에(일반적으로는 MMU 내에) 존재
- MMU: 논리 주소를 물리 주소로 변환하는 하드웨어, CPU와 주소 버스 사이에 위치
- 페이지 테이블의 캐시 메모리 역할
- 페이지 테이블의 일부를 저장. 최근에 사용된 페이지 위주로 저장해 둔다.
- CPU가 발생한 논리 주소의 페이지 번호가 TLB에 있을 경우 → TLB Hit
- CPU가 발생한 논리 주소의 페이지 번호가 TLB에 없을 경우 → TLB miss
페이지 테이블 엔트리 Page Table Entry - PTE
- 페이지 테이블의 행을 의미
- 페이지 번호, 프레임 번호, 유효 비트, 보호 비트, 참조 비트, 수정 비트 등이 존재
유효 비트 (valid bit)
- 일부 페이지들은 스왑되어 보조 기억 장치에 존재할 수 있음
- 따라서 현재 해당 페이지에 접근이 가능한지, 즉 메모리에 존재하는지를 알려줌
- 접근 가능 1 / 접근 불가능 0
- 메모리에 적재되어 있지 않은 페이지로 접근하려 할 시 page fault 발생
보호 비트 (protection bit)
- 페이지 보호 기능
- 해당 페이지의 read/write, read-only 여부를 알려줌을 통해, read-only 페이지에 쓰기를 시도할 시 이를 막아 페이지를 보호
- read/write/execute 3개의 조합으로도 나타낼 수 있다.
참조 비트 (reference bit)
- CPU가 이 페이지에 접근한 적이 있는지 여부를 나타냄
- 적재 이후 읽거나 쓴 적이 있다면 1 / 없다면 0
수정 비트 (modified bit)
- 해당 페이지에 데이터를 쓴 적이 있는지 여부
- 수정된 적이 있다면 1 / 없다면 0
- 페이지 스왑을 할 때, 보조 기억 장치에서 쓰기 작업을 해야 하는지에 대한 여부 판단
계층적 페이징 - hierarchical paging
- multilevel paging이라고도 불림
- 프로세스 페이지 테이블을 다시 페이지로 나누고, 이를 가리키는 페이지 테이블을 하나 더 두는 방식
- 기존 페이징 기법을 한번 더 수행한다고 생각하면 된다.
- 2개 이상의 여러 계층으로도 구성 가능
- 메모리에서 페이지 테이블이 가지는 공간을 줄일 수 있음
- 메모리 참조 횟수가 많아지는 단점
Reference
혼자 공부하는 운영체제