본문 바로가기

computer

가상메모리 페이징 기법의 구현

유튜브 널널한 개발자님의 운영체제 시리즈 '가상메모리 페이징 기법의 구현'을 정리합니다.

 

C언어의 포인터는 어려운 개념이지만 매우 큰 권한을 갖는다.

포인터가 어렵게 느껴지는 이유는 두가지가 있다.

컴퓨터 구조, 하드웨어에 대한 이해가 떨어지는 것과

Virtual Memory Space에 대한 공간적인 개념이 없기 때문이다.

 

지난번 강의에서는 메모리는 1byte마다 주소가 붙고 

32bit 운영체제의 메모리 관리 범위는 4GB라고 하였다.

 

간단하게 생각하면 위 컴퓨터의 메모리는 배열로 관리되는 char[42GB]의 영역인 것이다.

Ram은 물리, 논리영역으로 메모리를 분리하여 관리하기 위해 Mapping table로 관리한다. 

 

Virtual Address (가상 주소)는 아파트 동과 호수로 비유할 수 있다. 

char[아파트 동][아파트 호수]라고 생각하면 아파트 동으로 먼저 접근하고 그 다음 아파트 호수로 접근하는 것이다.

VA = <page, distance (offset)>이다.

 

실제 운영환경에서는 메모리를 할당 했다 회수하는 과정이 반복하기 때문에 나란히 주소가 할당되지는 않을 것이다.

물리 주소의 순서가 뒤죽박죽이 되겠지만, Mapping table로 관리하기 때문에

바로 논리 메모리를 통해 물리 메모리를 찾을 수 있다. 

 

논리영역에서 메모리가 할당된 영역이라고 표시된 영역에 접근 시도가 항상 성공하는 것은 아니다.

Mapping table에 물리 영역에 대한 정보가 없다면,

사용자가 잘못된 접근을 시도하는 것이고 물리메모리 관리 체계나 개발자의 에러메세지에 따라 

Page fault 혹은 Segmentation fault를 반환한다.

 

 

Reference

https://youtu.be/X6tLar-qNHE

'computer' 카테고리의 다른 글

네임 서버 (a.k.a. DNS)  (0) 2022.09.07
가상메모리 접근 권한  (0) 2022.07.20
가상 메모리 개요  (0) 2022.07.16
리눅스 권한 permission (ls 명령어)  (0) 2022.07.06
파이썬에서 logging 모듈 사용하기  (0) 2022.06.22