운영체제

페이징

mumu3997 2024. 7. 9. 19:16

페이징을 통한 가상 메모리 관리에 대해 알아보자.

 

가상메모리 

 

가상 메모리는 실행하고자 하는 프로그램을 일부만 메모리에 적재하여 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술이다.

이를 가능케 하는 기법은 페이징이다.

 

페이징 기법을 통해 물리 메모리보다 큰 프로세스를 실행할 수 있으며 외부 단편화 문제도 해결 가능하다.

 

페이징

외부 단편화의 근본적인 원인은 각기 다른 크기의 프로세스가 메모리에 연속적으로 할당되었기 때문임.

 

그러면 불연속적으로 적재할 수 있다면 외부 단편화는 발생할 가능성이 적어질 것이다.

 

페이징은 프로세스의 논리 주소 공간을 페이지라는 일정한 단위로 자르고, 메모리 물리 주소 공간을 프레임이라는 페이지와 동일한 크게의 일정한 단위로 자른 뒤 페이지를 프레임에 할당하는 가상메모리 관리 기법이다.

  • 프레임(Frame) : 물리 메모리를 일정한 크기로 나눈 블록이다.
  • 페이지(Page) : 가상 메모리를 일정한 크기로 나눈 블록이다.

프레임을 할당받지 못한 페이지들은 외부 저장장치에 저장되며, 이때도 프레임과 같은 크기 단위로 관리된다.

 

 

페이징을 사용하는 시스템에서는 페이지 단위로 스왑 아웃, 인 된다.

 

 

실행에 필요하지 않은 페이지들은 보조기억장치에 남겨둘 수 있으므로 물리 메모리보다 더 큰 프로세스를 실행할 수 있다.

 

페이지 테이블

프로세스가 메모리에 불연속적으로 배치되어 있다면 CPU 입장에서 이를 순차적으로 실행할 수가 없고,

CPU 입장에서 다음에 실행할 명령어 위치를 찾기가 어려워진다.

 

페이징 시스템은 프로세스가 비록 물리 주소에 불연속적으로 배치되더라도 (CPU가 바라보는 주소인) 논리 주소에는 연속적으로 배치되도록 페이지 테이블을 이용한다.

 

프로세스들이 메모리에 분산되어 저장되어 있더라도 CPU는 논리 주소를 순차적으로 실행하면 된다.

 

페이지 테이블 베이스 레지스터 (PTBR: Page Table Base Register)

프로세스마다 각자의 프로세스 테이블을 가지고 있고 각 프로세스의 페이지 테이블들은 메모리에 적재되어 있다.

 

CPU 내의 PTBR은 각 프로세스의 페이지 테이블이 적재된 주소를 가리킨다.

 

각 프로세스들의 페이지 테이블 정보들은 각 프로세스의 PCB에 기록된다. 문맥 교환이 일어날 때 다른 레지스터와 마찬가지로 함께 변경된다.

 

TLB : Translation Lookaside Buffer

페이지 테이블을 메모리에 두면 메모리 접근 시간이 두 배로 늘어난다.( 페이지 테이블 볼 때 한번, 프레임에 접근할 때 한번 총 두 번)

 

이 문제를 해경 하기 위해 TLB라는 페이지 테이블의 캐시 메모리를 CPU 곁에(일반적으로 MMU 내에) 둔다.

 

TLB는 캐시이기 때문에 테이블의 일부 내용을 저장한다.

 

참조 지역성에 근거해 주로 최근에 사용된 페이지 위주로 가져와 저장한다.

 

TLB히트 : 페이지 번호가 TLB에 있을 경우

 

TLB미스: 페이지 번호가 TLB에 없을 경우

 

페이징에서의 주소 변환

특정 주소에 접근하기 위한 정보

  • 어느 프레임에 접근하는지
  • 접근하려는 주소가 페이지 또는 프레임에서 얼마나 떨어져 있는지

페이징 시스템에서 논리 주소는 페이지 번호 page number와 변위 offset로 이루어져 있다.

(32비트 주소면 n비트는 페이지번호 32 - n비트는 변위)

 

논리 주소 <페이지 번호, 변위>는 페이지 테이블을 통해 물리 주소 <프레임 번호, 변위>로 변환하여 찾는다.

 

CPU가 논리주소 (<3,2>)에 접근한다고 해보자.

 

3번 페이지는 2번 프레임에 있다. CPU는 2번 프레임, 변위 2에 접근하여 12번지 + 2로 14번지에 접근하게 된다.

 

페이지 테이블 엔트리 PTE: Page Table Entry

페이지 테이블 엔트리에는 페이지 번호, 프레임 번호 외에도 유효 비트, 보호 비트, 참조 비트, 수정비트등이 저장된다.

 

유효 비트 valid bit

현재 해당 페이지에 접근 가능한지 여부를 체크해 줌.

 

현재 페이지가 메모리에 적재되어 있는지 보조기억장치에 있는지를 알려주는 비트이다.

 

페이지가 메모리에 적재되어 있다면 유효 비트가 1, 아니면 0이다.

 

 

CPU가 유효 비트가 0인 페이지에 접근하려고 하면 페이지 폴트 page fault라는 예외 Exception가 발생한다.

  1. CPU는 기존 작업을 백업
  2. 페이지 폴트 처리 루틴 실행
  3. 페이지 처리 루틴은 원하는 페이지를 메모리로 가져온 뒤 유효 비트를 1로 변경
  4. CPU는 해당 페이지에 접근 가능

보호 비트 protection bit

보호 비트를 통해 해당 페이지가 읽고 쓰기가 모두 가능한 페이지인지, 읽기만 가능한 페이지인지를 나타낸다.

 

0인 경우: 읽기

1인 경우: 읽기 쓰기

 

세 개의 비트로 좀 더 세세하게 구현할 수 있다.

 

참조 비트 reference bit

CPU가 이 페이지에 접근한 적이 있는지 여부를 나타낸다.

 

 

수정 비트 modified bit

해당 페이지에 데이터를 쓴 적이 있는지 없는지 수정 여부를 알려준다.

더티 비트 dirty bit라고도 부른다.

 

1이면 변경된 적이 있는, 0이면 변경된 적이 없는 페이지임을 나타낸다.

 

수정 비트는 어디에 쓰일까? 

 

CPU는 메모리를 읽는 것뿐만 아니라 메모리에 값을 쓰기도 하는데, 한 번도 수정된 적이 없는 페이지가 스왑 아웃될 경우 아무런 추가 작업을 하지 않아도 된다.

 

어차피 같은 페이지가 보조기억장치에 저장되어 있기 때문이다.

 

이 작업(스왑 아웃)이 필요한 페이지인지 아닌지를 판단하기 위해 수정 비트를 둔 것이다.

 

 

https://www.inflearn.com/course/%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C

'운영체제' 카테고리의 다른 글

페이징(3)  (0) 2024.07.18
페이징(2)  (0) 2024.07.09
연속 메모리 할당  (0) 2024.06.23
동기화 기법  (0) 2024.06.19
동기화 - Synchronization  (1) 2024.06.17