페이징

페이징이란, 프로세스와 메모리를 일정한 크기로 잘라서 페이지와 프레임으로 사용하는 방식이다.

운영체제는 재배치 레지스터와 페이지 테이블을 통해 나눠진 프로세스를 마치 연속된 메모리 공간에 있는 것처럼 동작하게 한다.

 

논리 주소에서 물리 주소로 변화하는 과정

 

논리 주소는 페이지 테이블에 의해 물리 주소로 변환된다.

논리 주소는 이진수의 비트 단위로 표현되고 하위 비트에 오프셋, 상위 비트에 페이지 번호값을 가진다.

 

보다 쉽게 정리하면 다음과 같다.

논리 주소는 1바이트이고 페이지는 여러 논리 주소를 포함한다.

따라서 논리 주소를 표현하기 위해서는

1. 어떤 페이지 안에 2. 페이지 안에 있는 주소 중 몇 번째 를 찾아야 한다.

위 오프셋은 몇 번째를 의미하고 페이지 번호 값이 어떤 페이지를 가리키는지 알려준다.

보다 자세한 설명을 위해서 예를 들어보자.

 

예시

52번지라는 논리 주소를 물리 주소로 바꾸고 싶다고 한다고 가정해보자. 이때 페이지의 크기는 16바이트이다.

52번지를 2진수로 바꾸게 되면 110100이 된다.

이때 페이지의 크기가 16바이트이므로 한 페이지에 16개의 주소를 보관한다.

따라서 하위 4비트는 오프셋이고, 앞의 두 비트가 페이지 번호를 나타내는 인덱스 값이 된다.

11 + 0100

 

그러면 페이지 테이블에서 11(이진수)에 해당하는 3의 값을 가진 페이지 번호로 가게 되어 페이지 테이블 값을 읽는다.

만약 이 때의 페이지 테이블 값이 8이라고 하면 8과 오프셋을 합쳐서 물리 주소를 가지게 된다.

그 값은 1000(8의 이진수) + 0100(오프셋) 이라는 메모리 공간의 주소로 가게 되는 것이다.

10진수로 바꾸게 되면 132번지가 된다.

 

다시 해석하게 되면 테이블 값의 8은 128번지를 의미하게 되고

여기서 하위 n비트의 변위 값에 의해 132번지에서 이 프로세스의 페이지가 동작하게 되는 것이다.

 


 

내부 단편화

 

프로세스가 페이지를 나누는 단위의 배수가 아니라면 끝 부분에 페이지 크기보다 작은 프로세스 조각이 남는다.

예를 들어 프로세스가 15바이트이고 페이지 크기가 4바이트라면, 총 4개의 페이지에 마지막 페이지는 3바이트로 1바이트가 남는다.

 


 

관리의 측면

 

논리 주소를 사용하면 프로세스가 물리 주소에 접근하기 전에 새로운 추상화 계층이 생겼다고 이해할 수 있다.

실제 데이터에 접근하기 위해서는 페이지 테이블을 거쳐야 하고,

페이지 테이블 엔트리에 r, w, x 비트를 두어 페이지의 인가를 관리할 수 있다.

 

출처

 

쉽게 배우는 운영체제 2판 - 한빛아카데미

https://copycode.tistory.com/98

 

운영체제 17장 - 메모리 관리(4) : 페이징(1) -

운영체제 17장- 페이징(1) - 메모리의 낭비 공간인 hole을 최소한으로 만들기 위해 앞 장에서 많은 방법을 사용하였다. 최초 적합과 최적 적합을 통해 메모리의 공간에 적재하는 방식에 변화를 주

copycode.tistory.com

https://copycode.tistory.com/102

 

운영체제 18장 - 메모리 관리(5) : 페이징(2) -

운영체제 18장- 페이징(2) - 다중 프로그래밍 환경으로 바뀌면서 다양한 프로그램들이 메인 메모리 공간에 올라가서 프로세스로 되어 동작하기 시작했다. 프로그램들은 필요할 때 메인 메모리로

copycode.tistory.com

https://copycode.tistory.com/107

 

운영체제 19장 - 메모리 관리(6) : 페이징(3) -

운영체제 19장- 페이징(3) - 모든 프로그램들은 실행되기 전에 하드디스크에 보관된다. 그리고 사용을 하고자 하는 프로그램들이 메인 메모리에 적재되어서 CPU를 할당받아 기능을 수행하게 된다.

copycode.tistory.com