컴퓨터 구조 & 운영체제/운영체제

[운영체제] 페이징의 쓰기 시 복사와 계층적 페이징

ReBugs 2023. 7. 9.

이 글은 혼자 공부하는 컴퓨터 구조 + 운영체제 (저자 : 강민철)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다.


쓰기 시 복사(copy on write)

  • 전통적인 관점에서 fork()함수를 이용하여 프로세스를 복제하면 코드 및 데이터 영역을 비롯한 모든 자원이 복제되어 서로 다른 메모리 공간에 적재된다.
  • 각 프로세스의 페이지 테이블은 자신의 고유한 페이지가 할당된 프레임을 가리킨다.
  • 이러한 복사 작업은 프로세스 생성 시간을 늦출 뿐만 아니라 불필요한 메모리 낭비를 야기한다.

 

쓰기 시 복사를 이용하면 각 프로세스(부모 프로세스와 자식 프로세스)는 동일한 프레임을 가리킨다.

이로써  굳이 부모 프로세스의 메모리 공간을 복사하지 않고도 동일한 코드 및 데이터 영역을 가리킬 수 있다.

만일 부모 프로세스와 자식 프로세스가 메모리에 어떠한 데이터도 쓰지 않고 그저 읽기 작업만 한다면 이상태가 지속되고, 둘중 하나가 페이지에 쓰기 작업을 하면 그 순간 해당 페이지가 별도의 공간으로 복제된다.

각 프로세스는 자신의 고유한 페이지가 할당된 프레임을 가리키는 것이다.

이것이 쓰기 시 복사이다.

이러한 쓰기 시 복사를 통해 프로세스 생성 시간을 줄이는 것은 물론 메모리 공간 절약도 가능하다

 


 

계층적 페이징

  • 프로세스의 페이지 테이블 크기는 생각보다 작지 않다.
  • 프로세스를 이루는 모든 페이지 테이블 엔트리를 메모리에 두는 것은 큰 낭비이다.

프로세스를 이루는 모든 페이지 테이블 엔트리를 항상 메모리에 유지 하지 않을 방법이 계층적 페이징이다.

 

계층적 페이징은 페이지 테이블을 페이징하여 여러 단계의 페이지를 두는 방식이다.

여러 단계의 페이지를 둔다는 점에서 다단계 페이지 테이블(multilevel page table)기법이라고 부른다.

 

아래와 같은 기본적인 페이지 테이블이 있다고 가정하면, 

이 페이지 테이블을 여러 개의 페이지로 쪼개고, 이 페이지들을 가리키는 페이지 테이블(아래 그림의 outer 페이지 테이블)을 두는 방식이 계층적 페이지이다.

outer 페이지 테이블은 메모리에 항상 적재하고 일부분의 페이지 테이블이 필요하다면 outer페이지를 이용하여 일부분의 페이지 테이블만 메모리에 적재하는 것이다.

페이지 테이블을 이렇게 계층적으로 구성하면 모든 페이지 테이블을 항상 메모리에 유지할 필요가 없고, 페이지 테이블 중 몇 개는 보조기억장치에 있어도 무방하며, 추후 해당 페이지 테이블을 참조해야할 때가 있으면 그때 메모리에 적재면 그만이다.

 


 

계층적 페이징을 사용하지 않을 경우에는 논리 주소는 페이지 번호와 변위로 이루어져 있다.

 

하지만 계층적 페이징을 사용하는 경우 CPU가 발생하는 논리 주소도 달라진다.

계층적 페이징을 사용하는 경우 논리 주소는 <변위, 바깥 페이지 번호, 안쪽 페이지 번호>로 구성된다.

 

이러한 논리 주소를 토대로 주소 변환은 아래와 같이 이루어진다.

  1. 바깥 페이지 번호를 통해서 찾고자 하는 페이지 테이블 엔트리(row)를 찾는다.
  2. 안쪽 페이지 번호를 통해서 해당 페이지 테이블 안에서 특정 페이지 엔트리를 찾는다.
  3. 해당 프레임 번호에 변위를 더하여 물리 주소를 구한다.

댓글