꾸준한 개발자

계속적인 성장을 추구하는 개발자입니다. 꾸준함을 추구합니다.

계속 쓰는 개발 노트

운영체제 (OS)

가상 메모리 - 페이징 시스템

gold_dragon 2021. 4. 22. 21:31

크기가 동일한 페이지로 가상 주소 공간과 이에 매칭하는 물리 주소 공간을 관리합니다. 이를 페이징이라 합니다. 페이징을 하기 위해서는 하드웨어 지원이 필요하며 리눅스의 경우 4KB로 페이징을 나누고 있습니다. 페이지 번호를 기반으로 가상 주소 혹은 물리 주소 매핑 정보를 기록하고 사용합니다.

페이징 시스템

프로세스의 PCB에 Page Table 구조체를 가리키는 주소가 들어있습니다. Page Table에는 가상 주소와 물리 주소 간 매핑 정보가 있습니다.

 

page는 고정된 크기의 block(4KB)을 갖게 됩니다.

 

프로세스 생성 시, 페이지 테이블 정보를 생성하게 되는데 PCB 등에서 해당 페이지 테이블에 접근 가능하고 관련 정보는 물리 메모리에 적재돼 있습니다. 프로세스 구동 시, 해당 페이지 테이블 base 주소가 별도 레지스터(CR3)에 저장되고, CPU가 가상 주소에 접근할 경우, MMU가 페이지 테이블 base 주소를 접근해서, 물리 주소를 가져옵니다.

다중 단계 페이징 시스템

페이지 정보를 단계를 나워서 생성합니다. 필요없는 페이지는 생성하지 않기 때문에 공간 절약이 가능합니다.

페이지 번호를 나타내는 bit를 구분해서 단계를 나눕니다. (리눅스의 경우 3간계로 나뉘어지는데 최근에는 4단계로 나뉘어지기도 합니다.)

MMU와 TLB(컴퓨터 구조)

CPU가 MMU에 Virtual address를 요청하면 MMU는 CR3 값을 가지고 page table에 들어가게 됩니다. 물리 주소를 가져오게 되면 물리 주소에 MMU가 다시 접근하게 되고 해당 데이터를 CPU에 전달하게 됩니다.

 

위 과정의 경우 시간이 많이 소요됩니다. 이를 해결하기 위해서 캐시 보조 하드웨어를 추가합니다. TLB에 최근의 물리주소로 변환된 가상 주소를 저장합니다. 다음에 같은 주소를 요청할 때 MMU에서 TLB에 해당 주소가 있는지 확인한 후 있으면 물리 주소로 바로 접근합니다.

페이징 시스템과 공유 메모리

프로세스간 동일한 물리 주소를 가리킬 수 있으며, 이는 공간과 메모리 할당 시간을 절약할 수 있습니다.

만약 물리 주소 데이터를 변경하게 된다면 물리 주소를 복사할 수 있습니다.

요구 페이징(Demand Paging / Demanded Paging)

프로세스 모든 데이터를 메모리에 적재하지 않고, 실행 중에 필요한 시점에만 적재하는 시스템입니다.

페이지 폴트(page fault)

어떤 페이지가 실제 물리 메모리에 없을 때 일어나는 인터럽트입니다. 운영체제가 page fault가 일어나면, 해당 페이지를 물리 메모리에 올립니다.

 

페이지 폴트가 자주 일어나게 되면 소요 시간이 오래 걸립니다. 페이지 폴트가 안 일어나게 하려면 실행/참조될 코드/데이터를 미리 물리 메모리에 올려놔야 됩니다.

'운영체제 (OS)' 카테고리의 다른 글

가상 메모리 - 세그멘테이션  (0) 2021.04.23
페이지 교체 정책  (0) 2021.04.23
가상 메모리  (0) 2021.04.22
스레드 교착 상태(Deadlock)와 기아 상태(Starvation)  (0) 2021.04.22
스레드 동기화 문제  (0) 2021.04.22