- 이번 포스팅에서는 가상 메모리 시스템을 만들 때 가장 많이 사용되는 페이징 시스템에 대해서 알아보자.
1. 페이징 시스템의 이해
a) 페이징 시스템이란?
- 고정된 크기의 단위인 페이지를 기준으로 가상 주소 공간과 이에 해당하는 물리 주소 공간을 관리하는 것.
- 하드웨어의 지원을 필요로 한다.
ex) Intel x86(32bit)의 경우, 페이징 처리 단위를 4KB, 2MB, 1GB로 지원
ex) 리눅스의 경우, 4KB 페이징 처리 단위를 지원
ex) 4KB단위로 페이징 처리를 한다는 것은 프로세스의 주소 영역(4GB)을 4KB단위로 나누는 것
- 페이지 번호를 기반으로 가상/물리 주소 매핑 정보를 기록 및 사용
b) 페이징 시스템의 작동방식 예제
- 프로세스(4GB)의 PCB(Process Control Block)에 Page Table이라는 구조체를 가리키는 주소가 들어있다.
- Page Table에는 가상주소와 물리주소의 매핑정보가 들어있다.
- 총 9kb의 가상 메모리를 4kb로 페이징 처리를 하려고 한다.
- 페이지를 나누다 보면 page3은 1kb를 할당받고 3kb가 초과된다.
- 그러나 실제로 물리메모리에 적재할 때에는, page3의 경우 초과된 3kb까지 포함해서 물리메모리에 넣는다.
- 이 메카니즘을 가능하게 하기위해 page는 가상 메모리 주소와 물리 메모리 주소를 함께 갖는다.
2. 페이지의 구조
- page 또는 page fram: 고정된 크기의 블럭 (ex. 4kb)
- 가상 주소 v = (p, d)
▶ p = 페이지 번호(페이지 테이블에서 검색하기 위한 용도)
▶ d = p 안에서 참조하는 위치
▶ 실제 데이터의 물리주소 == p의 물리 메모리의 시작주소 + d(변위)
a) 페이지(4kb) 구조 예시
- 가상 주소의 앞부분은 페이지 번호를 담고 있고, 실행할 코드의 주소는 뒷부분에 있다.
- 페이지 번호를 담고있는 가상 메모리 주소로부터 실행될 코드가 담긴 가상 메모리 주소까지의 거리를 알면 한번에 실행코드가 위치한 가상 메모리 주소값을 알 수 있다.
- 즉, 위의 그림처럼 시작주소로 부터실행 코드가 떨어진 거리를 d(변위)에 담아두는 것이다.
▶ 4KB는 총 32bit 이다.
▶ 0 ~ 11비트는 변위(d)를 나타낸다.
▶ 12비트 이상부터는 페이지 번호를 나타낸다.
3. 페이지 테이블
a) 페이지 테이블이란?
- 물리주소에 있는 페이지 번호와 해당 페이지의 물리 주소 정보를 매핑해놓은 표
b) 페이지 테이블을 이용한 페이지 시스템의 작동방식
- 어떤 프로세스에서 특정 가상 주소에 접근하기 위해 다음과 같은 과정을 거친다.
▶ 프로세스의 page table에서 특정 가상주소가 포함된 page 번호가 있는지 확인한다.
▶ page 번호가 존재한다면, 해당 page가 매핑된 시작 물리주소(p')를 알아낸다.
▶ p' + d가 데이터의 물리주소가 된다.
c) 페이지 시스템의 작동방식 예시
- aspect 라는 데이터의 물리주소를 찾는 과정을 예시로 해보자.
▶ aspect는 page3에 위치해 있다.
▶ page3의 시작 가상주소는 000000Ah이다. 이를 이용해서 page table을 조회한다.
▶ page table을 조회한 결과, page3은 1000h라는 물리주소를 갖는다.
▶ 1000h 물리주소에 접근하기 전에 변위 값을 확인한다. aspect라는 데이터는 page3에 2라는 변위값을 갖고 있다.
▶ 즉, 1000h + 2가 aspect라는 데이터의 물리주소값이 되는 것이다.
▶ 1000h + 2라는 물리주소를 이용해서 해당 데이터에 접근할 수 있게 된다.
4. 프로세스 생성부터 페이징 시스템과 MMU의 작동방식
a) 프로세스 생성
- 프로세스가 생성되면 Page table 정보가 생성된다.
- PCB(Process Control Block)에서 page table에 접근이 가능하고, page table은 default로 물리메모리에 적재된다.
- 더불어, 생성된 page table의 base 주소(= 가상주소)가 CR3라는 별도의 레지스터에 저장된다.
b) CPU가 가상 주소에 접근
- CPU가 가상주소에 접근을 하면 MMU가 동작한다.
- MMU는 CR3 레지스터에 있는 페이지 테이블의 base 주소를 확인하고,
- 해당 페이지 테이블에 매핑되어있는 페이지 번호와 변위값을 확인하여 찾고 있는 데이터의 물리주소를 확인한다.
- CPU에게 해당 물리주소를 반환한다.
'컴퓨터공학기초 개념 > 운영체제' 카테고리의 다른 글
33. 가상메모리 - 페이지 폴트 (0) | 2021.07.08 |
---|---|
32. 가상메모리 - 다중 단계 페이징 시스템 (0) | 2021.07.08 |
30. 가상메모리(Virtual Memory System) - 개념 (0) | 2021.07.06 |
29. 스레드(Thread) - 교착(Deadlock)과 기아(Starvation)상태 (0) | 2021.07.05 |
28. 스레드(Thread) - 세마포어(Semaphore) (0) | 2021.07.05 |
댓글