관리 메뉴

클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

가상 메모리 2 - 페이징을 통한 가상 메모리 관리 1 : 페이징의 개념 및 페이지 테이블 본문

알고리즘 및 자료 관리/컴퓨터 구조 & 운영체제

가상 메모리 2 - 페이징을 통한 가상 메모리 관리 1 : 페이징의 개념 및 페이지 테이블

huenuri 2024. 10. 18. 12:05

조금 쉬었으니 다시 공부를 시작해 볼 것이다. 페이징은 현대 운영체제 메모리 관리 기법에 있어 가장 중요한 개념이라 해도 과언이 아닐 만큼 중요하다. 페이징이 왜 생겨나게 되었으며, 어떤 원리도 작동하는지 이해해 볼 것이다.

 

4GB 메모리가 설치된 컴퓨터로는 4GB 이상의 프로그램을 실행할 수 없다.

 

 

페이징 기법을 이용하면 물리 메모리보다 큰 프로세스를 실행할 수 있을 뿐만 아니라 외부 단편화 문제도 해결할 수 있다.


 

 

 

 

페이징이란

 

 

 

외부 단편화는 발생하지 않는다. 

 

 

 

 

 

 

 

 

 

 프로세스를 이루는 페이지 중 실행에 필요한 일부 페이지만을 메모리에 적재하고, 당장 실행에 필요하지 않은 페이지들은 보조기억장치에 남겨둘 수 있다.


 

 

 

 

페이지 테이블

 

CPU로 하여금 페이지 번호만 보고 해당 페이지에 적재된 프로엠을 찾을 수 있게 한다. 페이지 테이블은 현재 어떤 페이지아 어떤 프레임에 할당되었지는 알려 준다.

 

 

 

 

 

 

프로세스들이 메모리에 분산되어 저장되어 있더라도 CPU는 논리 주소를 그저 순차적으로 실행하면 된다.

 

 

 

 

하나의 페이지 크기가 작다면 발생하는 내부 단편화의 크기는 작아질 것으로 기대할 수 있다. 하지만 하나의 페이지 크기를 너무 작게 설정하면 그만큼 페이지 테이블의 크기도 커지기 때문에 페이지 테이블이 차지하는 공간이 낭비된다. 그렇기에 내부 단편화를 적당히 방지하면서 너무 크지 않은 페이지 테이블이 만들어지도록 페이지의 크기를 조정하는 것이 중요하다.

 

 

리눅스를 포함한 일부 운영체제에서는 위와 같이 비본적으로 설정된 페이지 크기보다 더 큰 크기의 페이지도 일부 허용하며 메모리에 유지하는 경우도 있다. 기본적으로 설정된 페이지보다 큰 페이지를 대형 페이지라고 한다.


 

 

 

 

예를 들어 프로세스 A가 실행될 때 PTBR은 프로세스 A의 페이지 테이블을 가리키고, CPU는 프로세스 A의 페이지 테이블을 통해 프로세스 A의 페이지가 적재된 프레임을 알 수 있다. 마찬가지로 프로세스 B가 실행될 때는 PTBR이 프로세스 B의 페이지 테이블을 가리키고 CPU는 프로세스 B의 테이지 테이블을 통해 프로세스 B의 페이지가 적재된 프레임을 알 수 있다.

이러한 각 프로세스들의 페이지 테이블 정보들은 각 프로세스의 PCB에 기록된다. 그리고 프로세스의 문맥 교환이 일어날 때 다른 레지스터와 마찬가지로 변경된다.

 

 

 

 

우리가 사용하는 컴퓨터의 CPU 곁에는 TLB가 있다. TLB는 페이지 테이블의 캐시이기 때문에 페이지 테이블의 일부 내용을 저장한다. 참조 지역성에 근거해 주로 최근에 사용된 페이지 위주로 가져와 저장한다.

 

 

 

 

TLB 히트의 경우 페이지가 적재된 프레임을 알기 위해 메모리에 접근할 필요가 없다. 그렇기에 메모리 접근을 한 번만 하면 된다. 하지만 만일 페이지 번호가 TLB에 없을 경우 어쩔 수 없이 페이지가 적재된 프레임을 알기 위해 메모리 내의 페이지 테이블에 접근하는 수밖에 없다. 이를 TLB 미스라고 한다.

 


 

 

 

학습을 마치고

페이징 기법은 분량이 많아서 다음 포스트에 나머지 내용을 이어가려고 한다. 이번 시간에는 정말 집중이 안 되고 졸음이 몰려와서 학습 시간이 평소보다 많이 걸렸다. 아마도 어젯밤에 잠을 자지 않아서 그런 것 같다.

점심시간에 낮잠을 자면 좀 더 나아질 것 같다. 그래도 생각보다 별로 피곤하지 않다. 페이징 기법은 솔직히 조금 지루해서 그런 것 같다. 그래도 중요한 내용이니 집중해서 잘 마무리해 볼 것이다.