일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 프로세스
- 연결 리스트
- 프로그래머스
- 프론트엔드
- 코딩테스트
- alexnet
- C
- RxJS
- APOLLO
- 이진탐색
- RT scheduling
- 타입스크립트
- vue3
- 릿코드
- 컨테이너
- pytorch
- 자바스크립트
- Machine Learning
- 웹팩
- 포인터
- 자료구조
- 알고리즘
- 배열
- 브라우저
- cors
- 연결리스트
- 스택
- GraphQL
- 해시테이블
- 큐
- Today
- Total
프린세스 다이어리
가상 메모리의 매커니즘, 페이징 시스템을 알아보자. 본문
1. 페이징 시스템이란
앞서 가상 메모리의 개념에 대한 글에서, CPU는 가상 메모리 주소만을 참조하고 필요할 때만 물리 메모리 주소를 참조한다고 정리했다. 그러면 어떤 단위로 물리 메모리를 활용하는지 궁금증이 생긴다. 왜냐하면 물리 메모리를 한 번에 4GB를 써 버리면 필요한 때만 물리 메모리를 쓴다는 의미가 없기 때문이다. 이 고민은 페이징 시스템(Paging System)으로 해결을 한다. 가상 메모리의 메커니즘은 다양한데, 페이징 시스템이 그중 가장 메이저 한 방식이라고 한다.
페이징 시스템은 물리 메모리에 크기가 동일한 사이즈로 페이지 단위를 만들어 올리는 방법이다. 리눅스 운영체제에서는 4KB 단위로 페이징을 한다. 이 의미는 물리 메모리인 0~4GB를 4KB 단위로 모두 주소를 쪼개서 페이지라고 하고 번호를 붙인다는 말이다. 페이지 번호를 기반으로 가상 주소와 물리 주소가 매핑되어 사용된다.
2. 가상 주소의 구성
페이지, 또는 페이지 프레임은 고정된 4KB의 크기를 가진다. 그런데 데이터가 물리 메모리에 쓰여지다 보면, 1KB만 차지해야 할 때도 있을 것이다. 이런 경우에도 공란 영역 3KB까지 더해서 4KB를 통째로 넣는다. 이렇게까지 4KB 블록으로 구성하다 보니, 실제 주소가 base 주소보다 +1KB 위치에 있을 수도 있다. 가상 주소는 이러한 갭까지 정보를 모두 담고 있다.
가상주소 v = ( 페이지 번호 p, 변위(오프셋) d )
가상 주소는 32bit인데, 0~11bit가 변위 d를 나타내고, 12bit 이상부터 page 번호를 나타낸다. 이 가상 주소를 통해 물리 메모리 주소와, 실제 물리 메모리에 있는 해당 data의 위치를 알 수 있다.
3. 페이지 테이블 구성, 페이징 시스템 동작 원리
프로세스의 PCB에 페이지 테이블 구조체를 가리키는 주소가 있다. 페이지 테이블은 페이지 번호별로 각각 가상 주소와 물리 주소를 매핑해 놓은 표다. 페이지 테이블이 있기 때문에 CPU가 가상 주소만 알아도, page 번호로 어떤 물리 주소에 매핑되는지 알 수 있다. 페이지 테이블에 가상 주소는 페이지 번호(p), 페이지 처음부터 얼마나 떨어진 위치에 있는지에 대한 정보(d)를 모두 가지고 있다.
해당 프로세스에서 특정 가상 주소 액세스를 하려면, 먼저 해당 프로세스의 PCB에 있는 페이지 테이블의 base 주소와 페이지 번호를 확인한다. 페이지 번호가 있으면 페이지 테이블에 가서 페이지가 매핑된 첫 물리주소를 알아낸다. 이 물리 주소를 p'라고 한다면, 실제 메모리 주소의 갭 d까지 합쳐서 p' + d가 실제 물리 주소가 된다. 페이지 테이블은 다음과 같이 구성되어 있다.
페이지 번호, 가상주소, 물리 주소, valid bit 정보 등이 있다. 물리 주소는 페이지 순서대로가 아니다. valid-invalid bit은 실제로 페이지가 물리 주소에 들어있는지(v), 없는지(i)에 대한 정보를 가지고 있다. 페이지 테이블을 이용하여 가상 주소와 물리 주소를 변환하여 프로세스를 실행하는 과정은 다음과 같다.
(1) 프로세스 구동 시, 그 프로세스의 페이지 테이블의 base 주소가 별도 레지스터에 저장된다. 이 레지스터를 CR3이라고 한다.
(2) CPU가 가상 주소를 접근하면, MMU 하드웨어가 CR3 레지스터를 가져온다.
*PCB의 페이지 테이블은 디폴트로 메모리에 적재됨. 그 페이지 테이블의 base주소에 접근한다는 의미임
(3) CR3 레지스터에 있는 페이지 테이블을 참조한다.
(4) 페이지 테이블의 물리 주소를 가져와서 CPU에 다시 전달해준다.
'운영체제, 컴퓨터 구조' 카테고리의 다른 글
[OS] 페이징 시스템의 "공유 메모리(Shared Memory)" 개념 (0) | 2022.01.31 |
---|---|
[OS] 다중단계 페이징 시스템의 개념, TLB 뜻 (0) | 2022.01.30 |
가상 메모리 등장한 이유, 가상 메모리 이용하는 원리 (0) | 2021.10.22 |
[OS] 멀티 프로세스와 멀티 스레드, 둘 중에 뭐가 좋아? (1) | 2021.10.05 |
[OS] 프로세스 구조와 레지스터 알아보기 (0) | 2021.10.05 |