안녕하세요? 허니입니다. 페이지 테이블 에트리(PTE, Page Table Entry) 내부 구조를 보다 상세하게 포스팅해서 적어볼까 합니다. 학생이나 연구원분들에게 많은 도움이 될 것이라고 생각하며 언제든지 질문은 환영입니다.

 


오늘의 주제

 page in, page out
 Swapping
 Multilevel page table

 


PTE의 내부 구조


페이지 테이블 에트리 내부엔 가상 메모리 페이지와 실제 메모리 페이지를 매핑 시켜주기 위한 보다 복잡한 정보들이 숨어있다.

 

valid bit (present bit)

dirty bit

access bit

PF#

 
valid bit의 값이 0을 갖고 있으면 이것은 현재 PTE가 가리키는 page frame(PF#)이 존재하지 않음을 의미한다. 그 반대로 valid bit가 1이면 page frame이 존재함을 의미한다. 그리고 dirty bit은 modified bit라고도 하며, 현재 PTE가 가리키는 page의 내용이 변경되었음을 의미한다. Access bit는 해당 페이지프레임의 내용을 읽을 수 있느냐 읽을 수 없느냐의 정보를 표시한 것이다. PF#은 그 PTE가 가리키는 frame을 의미한다. page out은 기존에 사용중인 페이지프레임의 내용을 스왑 스페이스에 저장하고 그 페이지프레임을 현재 필요로 하는 다른 프로그램에 주는 것을 말한다. 반대로 paging은 스왑 스페이스에 머물러있는 내용을 다시 불러들여 페이지프레임을 제공하는 것을 말한다. 승강기에 적정인원 이상이 올라탔을 때 경고음이 울리게 되면 어느 한 사람이 하차해야 하듯 실제 메모리의 페이지프레임이 부족할 때 어떤 한 페이지프레임의 내용은 스왑 스페이스에 머물게 되는 것이다. 어떤 기준에 의해 page out될 페이지 프레임이 결정되는지-dirty bit이 설정되는지-는 이후 공부하게 될 것이다.

그림 44 Page in, Page out

 

바로 하나 하나의 페이지프레임들이 담고 있는 프로그램의 내용들이 현재 어떤 위치에 머물고 있는가 하는 세세한 정보들은 매우 중요한 역할을 한다. PTE 안에 이러한 정보들이 남아있어야만 프로세스가 어떤 명령을 수행할 때 정보를 참조해야만 재빠른 수행이 이루어질 수 있기 때문이다. 어느 한 페이지프레임의 내용이 현재 다시 필요하다면 그 내용이 스왑 스페이스에 머물고 있다는 정보가 남아있어야만 그 페이지프레임의 내용을 다시 불러오는데(page in) 보다 속도를 더할 수 있는 것처럼 말이다. 그러나 page out된 내용이 다시 page in 할 때 동일한 페이지프레임으로 들어갈 필요는 없다. 그러한 모든 변경 사항들은 PTE안에 고스란히 남겨지기 때문이다.
 
여기서 잠깐 Swapping(스와핑)에 대해 보다 상세한 언급이 필요할 듯하다. 시스템 안에 메모리가 부족하다면 어떤 조치가 취해질까. 메모리 안에 사용빈도수가 적은 프로세스들을 내보내게 되는데 메모리가 상당히 많이 부족하다고 인식되면 프로그램을 통째로 swap space로 내보내게 되는 것이다. 바로 메모리에서 프로그램을 통째로 내보내는 것을 swap out이라고 한다. 프로그램이 swap out 당하고 나면 그 프로그램이 다시 시작될 때 프로그램을 메모리에 올리기까지는 다소 시간이 걸리게 되는 것이다. 우리가 윈도우 환경에서 평소에 사용하지 않았던 창을 클릭 했을 때 상당한 시간이 경과한 뒤에 뜨는 것은 컴퓨터가 고물이어서가 아니라 그 프로그램이 메모리상에서 swap out 당했기 때문이다.
 

 그렇다면 page out이 발생하는 원인은 무엇일까.

앞서 우린 현재 실행되는 프로그램이 전부 메모리에 올려져 수행되지 않는다는 것을 배웠다. 하나의 프로그램 안에서 페이지 프레임이 필요할 때마다 매핑하게 되는데 이러한 페이징 방법을 Demand paging라고 한다. 바로 페이지가 필요하다는 요구가 있을 때마다 페이징 한다는 것을 의미한다. 프로그램이 수행될 때마다 재빠르게 매핑 시켜주기 위해선 다른 프로그램이 사용하지 않고 있는 free page가 필요한데 free page가 모자라게 되면 page out이 발생하는 것이다. 다시 말해 page out을 통해 free page를 확보해두어야만 페이지프레임의 부족으로 인해 매핑시간이 지연되는 것을 막을 수 있다는 것이다. 바로 가상 메모리상에 프로그램이 올려져 있는 상태에서 이보다 훨씬 용량이 적은 실제메모리상에서 프로그램이 실행되어야 하기 때문에 PTE의 복잡한 정보도 page out도 필요한 것이다.
 

 질문)모든 페이지의 내용들이 page out되는 걸까. 시스템 전체가 필요로 하는 기능이 page out 당했다면 시스템이 중단될 수도 있을 것 같다.
 답) 옳은 말이다. 그렇기에 어떠한 경우라도 page out 당하지 않도록 페이지고정(page fix) 시키는 경우가 발생하는 것이다. 페이지를 고정시키는 경우는 시스템 전체가 필요로 하는 기능, 즉 커널 영역과 입력, 출력이 진행중인 영역 등은 페이지를 고정시키게 되는 것이다. 그렇다면 page out을 당했을 때 과연 스왑 스페이스의 어디에 저장될까. 그것은 솔직히 우리가 알 바가 아니다. 스왑 스페이스 메니저라는 하드웨어를 통해 스왑 스페이스에 저장과 페이지프레임으로의 재배치가 이뤄지기 때문이다. 보통 스왑 스페이스는 second storage, 즉 하드 디스크 등을 사용한다.

 그렇다면 swap out은 메모리가 바닥이 났을 때부터 시작될까.

메모리가 바닥난 이후 swap out을 시킨다면 필요한 만큼의 메모리를 확보하는 동안 시스템은 중단되고 말 것이다. 시스템을 중단시키는 시스템설계자라면 명예퇴직에 1등 후보가 아닐까. swap out은 스왑임계치의 기준보다 메모리가 적을 때 실행되게 되는데 시스템이 작동하는데 지장이 없이 메모리를 확보할 수 있는 경우 한계치가 바로 스왑 임계치가 되는 것이다. 앞서 언급한 page out 역시 free page가 바닥날 때까지 기다리지 않는다. 일정한 기준선인 페이지 임계치에 도달하면 free page가 바닥남으로 인해 시스템이 멈추는 불상사를 막기 위해 page out을 실행하는 것이다. 외환보유고가 바닥난 국가가 긴급히 외화를 확보하기 위해 막대한 경제적 손실을 당하는 것과 마찬가지일 것이다.

 


페이지 테이블은 어떤 과정으로 채워질까?


프로그램을 처음 수행할 때 페이지 테이블은 텅 비어있다. 페이지 테이블에 아무 것도 없음이 확인되면 page fault가 발생되는데 page fault라는 것은 프로그램에서 접근하려고 하는 페이지프레임이 메모리에 없음을 뜻한다. 이렇게 되면 free page를 가져와 페이지 프레임 넘버를 가지고 PTE를 만들게 되는 것이다. 새로운 학생이 전학을 오게 되면 그 학생의 이름은 당연히 출석부에 없다. 담임선생님은 그 학생이 이전 학교에서 가져온 신상명세서를 가지고 출석부 빈칸을 채우게 되는 것처럼 말이다. 이렇듯 하나의 프로그램이 페이지 단위로 쪼개어져 실행되는 대도 사용자들은 연속적으로 프로그램이 실행된다고 착각하게 된다. 그러한 착각을 기대하면 OS는 잠시 사용되지 않는 페이지를 스왑 스페이스에 갔다 놓고 페이지를 요구하면 재빨리 스왑스페이스를 뒤지고... 시스템이 운영되는 동안 잠시의 쉴 틈도 없이 제 할 일을 하고 있는 것이다. 그러한 머리 좋은 OS를 구현한 것은 물론 훌륭한 시스템 설계자일 테지만 말이다.

 

 지금까지 우린 페이지테이블이 무엇이며 어떤 역할을 하는지 살펴보았다.

한가지 분명 머릿속에 남는 것은 참으로 복잡하다는 것이다. 복잡하다는 것이 시스템 내부적으로는 어떤 의미를 갖는 걸까. 바로 많은 메모리를 차지한다는 것이다. 우리가 계산을 위해 편리하게 사용하는 엑셀이란 프로그램은 21Mbyte를, 그리고 MS-WORD의 경우 18Mbyte 정도의 크기를 갖고 있다. 그리고 이보다 작은 용량을 갖는 프로그램들이 대다수인데 페이지테이블이 다음과 같이 4Mbyte의 메모리를 차지한다는 것은 결코 만만한 크기가 아니다.

 페이지 테이블의 크기 계산

1개의 페이지 크기 = 4Kbyte
컴퓨터의 주소공간 크기 = 4Gbyte 일 때
 4G/4K = 1Mbyte × 4byte(pte의 크기)
          = 4Mbyte (페이지 테이블 크기)

 
또한 페이지 테이블의 크기가 아무리 크다 하더라도 테이블 항목 하나 하나가 알차게 쓰인다면 별 다른 문제가 제기되지 않았을 것이다. 바로 낭비적인 요소가 존재한다는 말이다. 32bit의 주소버스를 갖는 CPU는 2의 20승(실제 계산을 해보면 1048576의 어마어마한 수치가 나온다.)의 엔트리항목을 갖게 되는데 만일 1Mbyte 크기의 프로그램이라면 이중 실제 사용되는 페이지 테이블 엔트리는 250개정도(1Mbyte/4Kbyte)에 불과하다. 다시 말해 대다수의 페이지테이블엔트리들은 채울 내용도 없이 자리만 차지하고 있다는 것이다. 이렇듯 페이지 테이블이 낭비적으로 메모리를 차지하는 것을 고민하던 중 Multilevel page table이 고안된 것이다.


Multilevel page table


Multilevel page table이란 별다른 역할 없이 공간만을 차지했던 페이지테이블엔트리들을 보다 효율적으로 운영하기 위해 필요한 것만을 만드는 것이다. 필요할 때마다 페이지프레임 크기와 동일한 4Kbyte(1024항목)의 페이지 테이블을 구성하게 되는데 그러기 위해선 페이지테이블 주소를 찾는데 2단계를 거쳐야 한다. 레벌 1의 테이블에선 페이지디렉토리를 갖고 있게 되는데 바로 현재 필요한 페이지테이블 엔트리들의 주소를 갖고 있는 것이다. 이를 통해 레벨 2의 테이블에선 현재 쓰일 페이지프레임 넘버만을 가진 페이지 테이블을 형성하게 된다. 보통의 프로그램들이 실행되는데는  2-3개 정도의 레벨2 페이지 테이블이 형성되면 된다. 다시 말해 3072(3개의 페이지테이블일 경우, 1024X3)개의 페이지테이블 항목만이 필요한데 똑같은 프로그램을 사용할 때라도 단순 페이지 테이블을 만들면 2의 20승이 페이지 테이블 엔트리 항목이 만들어져야 하는 것이다.

그림 45 MPT (Multilevel Page Table)
 


요점정리

 

 page out이란?

Page out은 기존에 사용중인 페이지프레임의 내용을 스왑 스페이스에 저장하고 그 페이지프레임을 현재 필요로 하는 다른 프로그램에 주는 것을 말한다. 반대로 page in은 스왑 스페이스에 머물러있는 내용을 다시 메모리로 불러들여 페이지프레임을 제공하는 것을 말한다. 프로그램이 수행될 때마다 재빠르게 매핑 시켜주기 위해선 다른 프로그램이 사용하지 않고 있는 free page가 필요한데 free page가 모자라게 되면 page out이 발생하는 것이다.

 

 swap out이란?

시스템안에 메모리가 부족하다면 메모리안에 사용빈도수가 적은 프로세스들을 내보내게 되는데 메모리가 상당히 많이 부족하다고 인식되면 프로그램을 통째로 swap space로 내보내게 되는 것이다. 바로 메모리에서 프로그램을 통째로 내보내는 것을 swap out이라고 한다.

 

 page fault란?

page fault라는 것은 프로그램에서 접근하려고 하는 페이지프레임이 메모리에 없음을 뜻한다. 이렇게 되면 free page를 가져와 페이지 프레임 넘버를 가지고 PTE를 만들게 되는 것이다.

 

 Multilevel page table이란?

필요한 페이지 테이블 엔트리만을 구성하기 위해 레벌 1의 테이블에선 페이지 디렉토리를 통해 현재 필요한 페이지테이블 엔트리들의 주소를 갖게 되고 이를 통해 레벨 2의 테이블에선 현재 쓰일 페이지프레임 넘버만을 가진 페이지 테이블을 형성하게 된다.

 

목 차

 운영체제를 시작하는 분들을 위해

 운영체제의 역사와 구체적으로 어떤 일들을 수행하나요?

 운영체제의 목표와 역할이 미래에도 계속 증대될까요?

 운영체제를 이해하기 위해 필요한 기본 개념들은 무엇인가요?

 운영체제 프로세스 생애주기(Process Lifecycle)는 무엇인가요?

 운영체제 프로세스 관리(Process Management)는 어떻게 하나요?

 운영체제 프로세스(Process)의 처리 속도는 어떻게 높일까?

 운영체제 스레드(Thread)는 무엇인가요?

 운영체제 스케줄링 (Scheduling)은 어떻게 하나요?

 운영체제 스케줄링 알고리즘의 비교 기준이 있나요?

 운영체제 프로세스 동기화가 무엇인가요?

 운영체제에서 세마포어(Semaphore)란?

 운영체제 메모리 관리(Memory Management)는 어떻게 하나요?

 운영체제 메모리 분할 방법은 어떻게 하나요?

 운영체제 가상메모리(Virtual Memory)는 무엇인가요?

 운영체제 Page in/out, Swapping 등이 Page Table Entry와 어떤 관계인가요?

 운영체제 메모리 관련해서 알아야 할 개념은 어떤것이 있나요? (TLB, Locality, Working Set, Overlay)

 운영체제 Page replacement (페이지 대체) 알고리즘이란?

 운영체제 파일시스템(File System)은 어떻게 운영되나요?

 운영체제 파일시스템 내부구조는 어떻게 되나요?

 운영체제 디스크 공간 할당(Disk Space Allocation) 알고리즘과 효과적 알고리즘의 판단 기준은?

 운영체제 파일시스템에서 접근 시간, 디스크 스케줄링을 위한 알고리즘, I/O 시스템이란?

 리눅스 인터럽트 (Interrupt)에 대해 자세히 설명해 주세요.

 인텔 구조에서 운영체제 가상 메모리 (Virtual Memory)는?

 운영체제 아키텍처의 종류는 얼마나 있나요?

 

+ Recent posts