티스토리 뷰

운영체제

페이징 기법

뭉크테크 2026. 9. 27. 17:47

VMS: 각 배열 요소의 크기가 1바이트 크기인 42.9..억 개의 선형 배열이라고 생각하면 편함

페이지가 뭔지 간단하게 말하면, 32비트 및 windows 운영체제 기준으로 할 때 0번지부터 시작해서 0xFFFFFFFF 까지 주소 번호를 가진 메모리 공간이 있을텐데, 0번지부터 4095번까지의 4KB 크기 공간이 보통 page 하나이다. 딱히 뭔가를 건드리지 않다면 말이다.

 

이러한 페이지 단위로 가상 주소 공간을 나누과, 물리 주소 공간을 각 프레임 단위에 동일한 크기로서 매핑하게 된다. 이 또한 크게 뭔가를 건드리지 않는 조건에서 말이다. 

그리고 특정 페이지 단위에서 얼만큼 떨어진 곳에서의 메모리 값이 특정 물리 메모리의 프레임에서의 특정 얼만큼 떨어진 곳을 가리킨 곳이 매핑 되게끔 한다. 얼만큼 떨어졌다는 것다는 것은 0번지 주소를 기준으로 얼만큼 떨어져있냐는 뜻인데 이를 오프셋 이라 한다. 그래서 가상 주소 VA=(P,D) 이런 식으로 있다면, P는 페이지 번호, D는 Distance로서 offset 값을 말하는데, 특정 가상 주소 값이 만약 page4 번에 D가 18이라고 한다면, 페이지 테이블을 통해 물리 주소로 들어가서 Distance에 해당하는 값을 가진 프레임을 찾아가는 것이다.

 

int *p = NULL;
*p = 10;     // ③번 지점 - 애초에 매핑된 적 없는 주소(0번지)에 접근

 

그런데 위 코드로 인해 CPU가 가상 주소에 접근을 시도하다가 페이지 테이블에서 특정 페이지 엔트리를 확인하였더니 해당 엔트리는 애초에 C언어 프로세스에게 한 번도 할당된 적 없었다. 즉 invalid 상태이다. 그로 인해, Page Fault가 발생한다.

OS 페이지 폴트 헨들러가 확인하여 스왑 영역 어디에도 이 페이지 관련 기록이 없음을 확인하고 복구할 방법이 아예 없다고 판단되면,  OS가 해당 프로세스에게 SIGSEGV 시그널을 전달하고 "Segmentation fault (core dumped)" 출력하면서 프로그램을 강제 종료한다.

 

이처럼 할당받은 적 없는 공간을 접근할려고 할때 페이지 테이블의 상태는 invalid라 Page Fault를 발생시켜 결국 Segmentation Fault를 발생시키는 경우도 있으나 추가적으로 할당은 받았으나 페이지 테이블은 vaild 즉 엔트리도 정상이라고는 뜨나, 권한 측면에서 R-- 만 있어 쓰기를 시도하는 경우에도 Segmentation Fault 에러가 발생할 수 있다. 즉 권한 비트가 해당 접근을 막는 경우이다.

 

 

 

 

 

 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2026/10   »
일 월 화 수 목 금 토
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
글 보관함