본문 바로가기
운영체제

운영체제 - 페이징 시스템 (Paging System)

by icblue21 2022. 12. 7.
728x90

페이징 시스템 (Paging System)

 

페이징이란 크기가 동일한 페이지로 가상 주소 공간과 이에 매칭되는 물리 주소 공간을 분리하는 것이다.

페이지 번호를 기반으로 가상 주소/ 물리 주소 매핑 정보를 기록/ 사용 한다.

하드웨어의 지원이 필요하며 인텔 x86 시스템에서는 4KB,2MB,1GB로 페이징을 지원하며, 리눅스의 경우 4KB로 페이징한다.

 

페이징 시스템 동작 원리

 

프로세스(4GB)의 PCB에는 Page Table 구조체를 가리키는 주소가 들어 있다. 이 Page Table에는 가상 주소와 물리 주소간 매핑 정보가 들어 있다.

 

페이징 시스템

 

페이지 또는 페이지 프레임은 4kb로 고정된 크기의 block이다.

페이지 시스템에는 하나의 공식같은 것이 있는데 가상 주소 v = (p,d) 라는 공식이다. 

 

p는 가상 메모리 페이지를 나타내며 페이지 번호라고 부르며 d는 p안에서 참조하는 위치를 나타내며 변위(오프셋)라고 부른다. 

 

페이지 테이블에는 물리 주소에 있는 페이지 번호와 해당 페이지의 첫 물리 주소를 매핑한 정보가 들어가며 어떤 프로세스가 특정 가상 주소에 액세스 하려면 해당 프로세스의 페이지 테이블에 해당 가상 주소가 포함된 페이지 번호가 있는지 확인하고 페이지 번호가 있으면 이 페이지가 매핑된 첫 물리 주소(p`)를 알아내고 변위(d)를 더해 p`+d가 실제 물리 주소가 되는 방식으로 동작한다.

 

 

TLB(Translation Lookaside Buffer)

 

 

MMU가 물리 주소를 확인하기 위해서는 메모리에 접근해야 한다. 메모리 계층 구조상 메모리에 접근하는 것이 CPU측면에서는 상당히 긴 시간이 걸린다. 이러한 문제를 해결하기 위해 프로세스에 내장된 페이지 정보 캐쉬 TLB를 사용하여 메모리 접근 시간을 단축 시킬 수 있다.

 

 

페이징 시스템의 공유 메모리 (IPC)

 

 

프로세스 B는 프로세스 A를 fork한 자식 프로세스라고 가정하자. 그렇다면 이 둘의 특정 페이지는 같은 부분이 있을 것이다. 각 프로세스의 페이지 테이블에서 같은 부분이 하나의 물리 메모리 공간을 가리키게 한다면 이 두 프로세스는 하나의 물리 메모리 공간을 공유하게 된다. 이것이 페이징 시스템에서의 공유 메모리 개념이다.

 

이를 통해 메모리 공간 절약, 메모리 할당 시간 절약이라는 효과를 기대할 수 있다.

 

요구 페이징

요구 페이징은 프로세스의 모든 데이터를 메모리에 적재하지 않고, 실행 중 필요한 시점에만 메모리에 적재하는 기법이다. 필요하지 않은 페이지 프레임은 다시 저장 매체에 저장해야 하므로 페이지 교체 알고리즘이 필요하다.

 

페이지 폴트 

어떤 페이지가 실제 물리 메모리에 없을 때 일어나는 인터럽트이다.

운영체제가 페이지 폴트가 일어나면, 해당 페이지를 물리 메모리에 올린다.

 

Q. 페이지 폴트가 자주 일어나면 어떻게 될까?

A. 실행되기 전에 해당 페이지를 물리 메모리에 올려야 한다. -> 이것이 반복되니 시간이 오래 걸린다. 과도하게 페이지 교체 작업이 일어나서 아무것도 못할 수 있다.

 

Q. 그럼 페이지 폴트를 일어나지 않게 하려면 어떻게 해야 할까?

A. 앞으로 실행될 코드, 데이터를 미리 물리 메모리에 올려놓으면 된다 -> 앞으로 있을 일을 예측해야 함 사실상 불가능.

 

인터럽트와 IDT

 

인터럽트는 미리 정의되어 각각 번호와 실행 코드를 가리키는 주소가 IDT(Interrupt Descriptor Table)에 기록되어 있다.

컴퓨터가 부팅시 운영체제가 운영체제 내부 코드를 기록하게 되어 있다.

 

하나의 흐름으로 살펴보면

1. 인터럽트 발생시, IDT를 확인한다.

2. 시스템콜 인터럽트 명령은 0x80 번호가 미리 정의 되어 있다

3. 인터럽트 0x80 에 해당하는 운영체제 내부 코드는 system_call()이라는 함수이다.

4. 즉, IDT에는 system_call() 같은 정보가 기록되어 있다.

 

페이지 교체 (page replacement)

 

운영체제가 특정 페이지를 물리 메모리에 올리려고 하는데 물리 메모리가 다 차있는 경우엔 어떻게 해야 할까?

이런 경우 기존 페이지 중 하나를 물리 메모리에서 저장 매체로 내리고 새로운 페이지를 물리 메모리에 올려야 한다. 하지만 어느 페이지를 저장 매체로 내리느냐를 결정하는 것은 생각해봐야 할 문제이다. 때문에 다양한 페이지 교체 알고리즘이 탄생했다.

 

FIFO 페이지 교체 알고리즘 : 가장 먼저 들어온 페이지를 교체하는 알고리즘이다.

 

OPT(Optimal) 페이지 교체 알고리즘 : 앞으로 가장 오랫동안 사용되지 않을 페이지를 교체하는 알고리즘이다.

(일반 OS에서 구현 불가)

 

LRU(Least Recently Used) 페이지 교체 알고리즘 : 가장 오래전에 사용된 페이지를 교체하는 알고리즘이다.

 

LFU(Least Frequently Used) 페이지 교체 알고리즘 : 가장 적게 사용된 페이지를 교체하는 알고리즘이다.

 

NUR(Not Used Recently) 페이지 교체 알고리즘 : LRU와 마찬가지로 가장 오래전에 사용된 페이지를 교체하는 알고리즘이다. 하지만 각 페이지마다 참조 비트(R), 수정 비트(M)을 두어 (0,0),(0,1),(1,0),(1,1)순으로 교체가 진행되는 것이 차이점이다.

 

 

 

 

댓글