가상 메모리 개념 - 페이징 시스템
페이징 시스템 (paging system)
가상 메모리는 하나의 프로세스에서 특정 시간동안 쓰는 영역은 일부분이므로 일부분만 메모리에 올려놓자.
어느 정도 크기만큼 메모리에 올려야 될까? → 페이징 이라는 단위로
페이징 개념
- 크키가 동일한 페이지로 가상 주소 공간과 이에 매칭하는 물리 주소 공간을 관리
- 하드웨어 지원이 필요
- 리눅스에서 4KB로 paging
- 페이지 번호를 기반으로 가상 주소와 물리주소간 매핑 정보가 있음
페이징 시스템 구조
- page 또는 page frame : 고정된 크기의 block (4KB)
- paging system
- 가상 주소 v = (p,d)
- p : 가상 메모리 페이지
- d : p 안에서 참조하는 위치(변위)
- 페이지 크기가 4KB 예
1) 가상 주소의 0비트에서 11비트가 변위 (d)를 나타내고,
2) 12비트 이상이 페이지 번호가 될 수 있음
→ 페이징 가상주소에 대한 물리주소 + d(변위) = 실제 물리 메모리에 있는 해당 데이터의 위치를 알 수 있음
페이지 테이블(page table)
- 물리 주소에 있는 페이지 번호와 해당 페이지의 첫 물리주소 정보를 매핑한 표
- 가상 주소 v = (p,d) 라면
- p : 페이지 번호
- d : 페이지 처음부터 얼마 떨어진 위치인지
- paging system 동작
- 해당 프로세스에서 특정 가상 주소 엑세스를 하려면
- 해당 프로세스의 page table( PCB에 page table 의맨첫주소(base 주소) + 페이지번호 -> page table 에서 page : 물리주소+변위 )에 해당 가상 주소가 포함된 page 번호가 있는지 확인
- page 번호가 있으면 이 page가 매핑된 첫 물리 주소를 알아내고(p')
- p' + d 가 실제 물리 주소가 됨
- 해당 프로세스에서 특정 가상 주소 엑세스를 하려면
페이징 시스템과 MMU(컴퓨터 구조)
- CPU는 가상 주소 접근
- MMU 하드웨어 장치를 통해 물리 메모리 접근
- 프로세스 생성시, 페이지 테이블 정보 생성
- PCB 등에서 해당 페이지 테이블 접근 가능하고 관련 정보는 물리 메모리에 적재
- 프로세스 구동 시, 해당 페이지 테이블 base 주소가 별도 레지스터에 저장(CR3)
- CPU가 가상 주소 접근 시, MMU가 페이지 테이블 base 주소를 접근해서 물리주소 가져옴
다중 단계 페이징 시스템
- 32bit 시스템에서 4KB 페이지를 위한 페이징 시스템은
- 하위 12bit는 오프셋, 상위 20bit가 페이징 번호이므로, 2의 20승(1048576)개의 페이지 정보가 필요
- 페이징 번호를 단계를 나누어 생성
- 페이지 디렉토리를 만들고 필요없는 페이지는 생성하지 않으면 공간 절약 가능
- 페이지 번호를 나타내는 bit 를 구분해서 단계를 나눔 (리눅스는 3단계, 최근 4단계 나누어 처리)
MMU와 TLB(컴퓨터 구조)
- MMU가 물리 주소를 확인하기 위해 메모리를 갔다와야 함.
- TLB : 페이지 정보 캐쉬
→ 어떻게 MMU 동작? CPU가 가상메모리 요청(①하면 MMU가 CR3 레지스터에 값을 가지고 페이지 테이블에 들어가게 되고(②) 물리주소를 가져오고(③) 물리주소에 MMU가 접근해(④) 해당 페이지에 해당Data 를 CPU에전달(⑤)
→ 페이지 테이블에 가기 위해 CR3 레지스터, 물리주소 요청하는 등 시간이 많이 걸림.
TLB (캐쉬 보조 하드웨어) 사용
가상 주소를 요청하면 CR3 레지스터에 가서 물리주소를 얻게 되는데
한번 접근해 변환이 된 물리주소는 TLB 에 저장
MMU 단계에서 TLB에 해당 물리주소가 있는지 먼저 확인, 있다면 ②,③ 하지 않아도 됨
페이징 시스템과 공유 메모리
- 프로세스간 동일한 물리 주소를 가리킬 수 있음 (공간절약, 메모리 할당 시간 절약)
→ 물리 메모리에는 별도의 공간으로 따로 놓지 않고 하나만 가져다 놓고 페이지 테이블에서 주소를 변환할때 해당 물리주소만 동일하게 가리키도록하면 메모리 두 배로 사용x
- 물리 주소 데이터 변경시
: 물리 주소 데이터 수정 시도시, 물리 주소를 복사 할 수 있음(copy-on-write)
요구 페이징 (Demand Paging 또는 Demanded Paging)
- 프로세스 모든 데이터를 메모리로 적재하지 않고, 실행 중 필요한 시점에서만 메모리로 적재함
- 선행 페이징(anticipatory paging) - 미리 프로세스 관련 모든 데이터를 메모리에 올려놓고 실행하는 반대 개념
- 더 이상 필요하지 않은 페이지 프레임은 다시 저장매체에 저장(페이지 교체 알고리즘 필요)
페이지 폴트(page fault)
- 어떤 페이지가 실제 물리 메모리에 없을 때 일어나는 인터럽트
- 운영체제가 page fault 가 일어나면, 해당 페이지를 물리 메모리에 올림
- 페이지 폴트가 자주 일어나면? 실행되기 전에, 해당 페이지를 물리 메모리에 올려야 함(시간이 오래 걸림)
- 페이지 폴트가 안 일어나게 하려면?
: 향후 실행/참조될 코드/데이터를 미리 물리 메모리에 올리면 됨(앞으로 있을 일을 예측해야 함 - 신의 영역)
제로베이스 컴퓨터 공학 전공자 따라잡기 강의 시청 후 정리한 내용입니다.