티스토리 뷰

반응형
 

[운영체제] 페이징이란?(1) / 페이지 테이블, 페이징 동작 순서

페이징(Paging) 프로세스는 생성되면 실제 필요한 데이터를 일정한 특정 단위의 메모리로 조각낸다. 이 조각낸 메모리들은 모두 크기가 같으며, 조각낸 것들을 묶어서 물리 메모리에 넣고 필요할

jerryjerryjerry.tistory.com

이전 포스팅 글의 내용에서 다뤘던 페이징이 일어나는 순서에 대해서 다시 요약해보겠다.


페이징 동작 순서 큰 틀로 요약

① CPU가 특정 프로세스를 실행시키기 위해 가상 주소를 운영체제에게 요청한다.

 

② 이 가상 주소를 받아서 처리하는 것은 MMU이다. MMU가 맨 처음 CPU에 있는 CR3 레지스터에 접근하여, 메모리에 있는 처리할 프로세서의 페이지 테이블의 주소를 가져온다. MMU는 특정 프로세스의 페이지 테이블을 PCB에서 찾아 접근한다.

 

③ 가지고 있는 가상주소의 페이지 번호를 알아낸 후, 페이지 테이블에 해당 페이지 번호를 찾는다. 해당 페이지 번호가 있으면(valid bit 값이 1일때), 가지고 있는 가상 주소의 첫번째 페이지 번호를 찾아 그와 매핑된 첫번째 물리 주소를 찾는다.

 

④ 가지고 있는 가상 주소와 첫번째 페이지 번호의 주소값의 차이(변위)를 알아낸다. 변환한 물리 주소가 첫번째 물리 주소와 얼마나 차이 나는지 계산후, 실제 물리 주소 위치가 몇번째인지 알아낸다.

 

⑤ 물리 메모리(RAM)에 접근해서 실제 물리 주소 데이터를 CPU에게 전달한다.


TLB(Translation Lookaside Buffer, 페이지 정보 캐쉬)

페이지 테이블은 PCB에 저장된다. 이 PCB는 실제 물리 메모리 영역에 있으며, 따라서 페이지 테이블은 실제 물리 메모리 영역에 저장되어 있는 것이다. CPU가 데이터가 필요할 때마다 페이지 테이블(물리 메모리 영역)에 접근하는 것은 시간이 오래 걸린다. 그런데 페이지 테이블에 접근한 후 물리 주소를 계산하고 다시 물리 메모리로 가서 실제 데이터를 가져오면 물리 메모리에 총 2번 접근하게 되어 더 오래 걸린다.

 

CPU는 속도를 높이기 위해 물리 메모리 영역보다 가깝고 가벼운 레지스터에 페이지 테이블의 값을 임시로 저장한다. 이렇게 하면 물리 메모리 접근 없이 CPU 내부에서 가상 주소와 물리 주소 매핑 값을 찾아 낼 수 있다. 

 

TLB는 가상 주소와 물리 주소 쌍을 저장하고 있는(일종의 캐시를 담고 있는) 레지스터이다. 원래는 CPU가 MMU에게 요청해서 페이지 테이블에 접근 후 물리 주소 위치를 찾아야 하지만, MMU는 페이지 테이블에 접근하기 전 TLB부터 조회한다. CPU가 요청한 가상 주소의 페이지 번호가 TLB에 있으면 변위 값을 계산해서 실제 물리 주소값을 알아낸다. 이후 실제 물리 메모리(RAM)에 접근해서 데이터를 찾아 CPU에게 전달한다. 

 

이렇게 TLB를 사용하면 CR3에 들려 페이지 테이블을 찾는 시간이 줄어들고, 물리 메모리에 접근하는 횟수도 1번으로 줄어들어서 시간이 절약 된다. 


요구 페이징(Demand Paging 또는 Demanded Paging)

프로세스의 페이지들을 언제 메모리에 올릴 것인지 정하는 페이징 알고리즘이다. 페이징 알고리즘에는 크게 선행 페이징과 요구 페이징 2가지가 있다.

 

① 선행 페이징

프로세스가 생성되자마자 필요한 페이지들을 모두 메모리에 올려 놓는 알고리즘으로 메모리 관리 기법 중 하나이다. 이렇게 모든 페이지를 올려두면, 데이터를 조회할 때는 모든 페이지가 전부 있으니 편하게 조회하겠지만, 나중에 쓰이지 않는 페이지들도 모두 포함되어 있다. 메모리의 측면에서 보면 사용하지 않는 페이지들이 들어있으니 비효율적이다. 

 

② 요구 페이징

메모리를 효율적으로 사용하기 위한 알고리즘이다. 프로세스가 생성되어도 페이지를 올려놓지 않고있다가, CPU가 필요한 페이지 정보를 찾는 시점에 메모리에 페이지를 업데이트 한다. 이렇게 하면 프로세스 실행 중 필요할 때만 페이지를 메모리에 올리고 사용할 수 있어, 메모리 측면에서 효율적이다. 

 

요구 페이징은 프로세스의 모든 페이지 정보를 메모리에 저장하지 않고, 실행 중 필요한 시점에서만 메모리에 올려두는 방법이다. 필요한 페이지만 메모리에 올리면 메모리 사용량을 줄일 수 있고, 디스크 입출력 횟수도 감소시킬 수 있어 전체적인 성능 향상이 이뤄진다. 

 

그럼 프로세스에게 특정 페이지가 필요한 시점이라고 판단하는 기준은 무엇일까? 그것은 페이지 폴트로 알 수 있다.


페이지 폴트(Page Fault)

페이지 폴트는 요구 페이징 기법에서 발생하는 현상으로, 프로세스가 실행 중에 필요한 페이지가 물리 메모리에 없을 때 발생한다. 즉, 페이지 폴트는 운영체제에게 찾아야할 페이지가 없으니 물리 메모리에 업데이트 시켜달라고 요청하는 인터럽트이다.

 

CPU가 가상주소를 호출하면 MMU는 페이지 테이블에서 물리 메모리에 실제 데이터가 있는지 vaild bit를 보고 판단한다. 이때, vaild bit가 0일때, 물리 메모리에 데이터가 없다고 운영체제에게 알려주는 에러가 페이지 폴트 인터럽트이다. 

 

페이지 폴트가 발생하면 운영체제는 이 신호를 받고 필요한 페이지를 디스크(하드웨어)에서 가져와 물리 메모리(RAM)에 업데이트 한다. 업데이트 후 페이지 테이블에 요청한 페이지 주소값, 물리 주소, vaild bit가 1이라고 업데이트 한다. 업데이트가 완료되면 CPU는 다시 가상주소를 MMU에게 호출하고, 물리 메모리에 해당 페이지가 있으니 작업을 진행하게 된다.


페이징 동작 순서 최종 요약

① CPU가 특정 프로세스를 실행시키기 위해 가상 주소를 운영체제에게 요청한다.

 

② 이 가상 주소를 받아서 처리하는 것은 MMU이다. MMU는 먼저 TLB 레지스터에 접근해서 받은 가상 주소의 페이지 정보와 물리 주소가 있는지 확인한다. 값이 있으면 바로 물리 메모리에 접근해서 데이터를 리턴하고, 없으면 CPU에 있는 CR3 레지스터에 접근한다.

 

MMU가 CR3 레지스터에 접근하여, 메모리에 있는 해당 프로세스의 페이지 테이블의 물리 주소 값을 찾는다. MMU는 물리 메모리에 있는 페이지 테이블 주소를 찾아 접근한다. 

 

④ 가지고 있는 가상 주소의 페이지 번호를 알아낸 후, 페이지 테이블에 해당 페이지 번호를 찾는다. 해당 페이지 번호가 있으면(valid bit 값이 1일때), 가지고 있는 가상 주소의 첫번째 페이지 번호를 찾아 그와 매핑된 첫번째 물리 주소를 찾는다.

 

④-① 가지고 있는 가상 주소와 첫번째 페이지 번호의 주소값의 차이(변위)를 알아낸다. 변환한 물리 주소가 첫번째 물리 주소와 얼마나 차이 나는지 계산후, 실제 물리 주소 위치가 몇번째인지 알아낸다. 

 

④-② 물리 메모리(RAM)에 접근해서 실제 물리 주소 데이터를 CPU에게 전달한다.

 

 

⑤ 가지고 있는 가상 주소의 페이지 번호를 알아낸 후, 페이지 테이블에 해당 페이지 번호를 찾는다. 해당 페이지 번호가 없으면(vaild bit 값이 0일때), 페이지 폴트 인터럽트 신호를 운영체제(OS)에 보낸다.

 

⑤-① 운영체제는 해당 페이지 정보를 저장 매체(하드웨어)에서 찾아서 물리 메모리의 공간에 업데이트 한다. 업데이트 후 페이지 테이블에 요청한 페이지 주소값, 물리 주소, vaild bit가 1이라고 업데이트 한다. 

 

⑤-② 업데이트 완료 후 CPU에게 다시 가상 주소를 호출하라고 지시한다. 이후 CPU는 다시 가상 주소를 MMU에게 호출하고, 물리 메모리에 해당 페이지가 있으니 작업을 진행한다. 


 

반응형
댓글
공지사항