Dev/Computer Science

OS - Paging(페이징 기법)

두넌 2024. 4. 7.

서론

페이징 기법에 관한 지식들을 공부하고, 정리했던 내용을 바탕으로 글을 작성해 보았습니다

혹시나 틀린 내용이 있다면 지적해 주시면, 바로 반영하도록 하겠습니다

 

Paging ?

모든 프로세스를 일정 크기로 잘라서 메모리에 불연속적으로 배치하는 것

  • Process 의 논리 주소 공간을 Page 라는 일정 단위로 자름
  • Memory 의 물리 주소 공간을 Frame 이라는 페이지와 동일한 Size 로 자름

 

왜 Paging 을 하는가?

  • Process 들의 크기는 모두 제각각이다
  • 프로세스들은 실행되는 시점에 메모리에 배치되어 있어야 실행이 가능하다
  • 프로세스들을 메모리에 탑재하다 보면, 중간 중간에 실행이 끝나 메모리에서 삭제되어 빈 공간이 나타난다
  • 새로 메모리에 배치할 프로세스의 크기가 빈 공간의 크기보다 크다면 배치할 수 없다
    • 이를 외부 단편화(external fragmentation) 이라고 한다

따라서, 프로세스의 논리 공간을 쪼갠 Page 를 메모리의 물리 공간을 쪼갠 Frame 이라는 공간에 할당하여 각기 다른 크기의 프로세스를 효율적으로 메모리 내에 배치할 수 있게 된다

 

Page swapping

  • 실행에 필요한 부분(Page) 만 메모리에 적재하고, 실행되지 않는 부분은 보조 기억장치에 저장해 둔다
  • 메모리에 적재될 필요가 없는 Page 를 보조 기억장치로 보내는 것을 Swap Out(Page Out) 이라고 한다
  • 실행에 필요한 페이지를 메모리로 가져오는 것을 Swap In(Page In) 이라고 한다

이는 프로세스를 이루는 모든 Page 가 메모리에 적재되어 있지 않아도 되는 것을 의미하며,

이렇게 되면 물리 메모리보다 큰 프로세스도 실행할 수 있게 된다

 

문제점

  • 프로세스의 각 Page 들이 실제 메모리에 어디에 저장되어 있는지를 CPU가 알기 어렵다 (어느 Frame 에 적재되어 있는지)
  • 해당 프로세스를 메모리 내부에서 순차적으로 실행이 어렵다 (불연속적으로 배치되어 있기 때문)
  • 따라서, Page Table 을 두어 해당 프로세스의 Page가 메모리 물리 공간 어디에 저장되어 있는지에 대한 정보를 저장한다

 

 

Page Table

프로세스의 어떤 Page 가 어떤 Frame 에 적재되어 있는지 알 수 있도록 하는 것

  • 실제로는 물리 주소 내에 불연속적으로 배치되어 있지만, CPU 입장에서는 연속적으로 배치되어 있는 것처럼 보이도록 함

위 사진에서, CPU 는 각 프로세스의 페이지 테이블을 참조하여 해당 프로세스를 연속적으로 참조할 수 있다

  • 페이지 0 → 프레임 3 / 페이지 1 → 프레임 5 / 페이지 2 → 프레임 2

 

발생할 수 있는 문제점

Internal Fragmentation (내부 단편화)

  • 프로세스의 크기가 Page Size 로 딱 나누어 떨어진다는 보장은 없음
    • Process 의 size 가 97이고 Page size 가 10인 경우 마지막 페이지는 3의 공간이 남음
  • 하나의 페이지 크기보다 작은 크기로 발생하는 메모리 낭비 문제 발생

 

PTBR (Page Table Base Register)

CPU는 각 프로세스의 페이지 테이블이 어디에 있는지 알기 위해, PTBR 레지스터를 참고한다

 

발생할 수 있는 문제점

메모리에 페이지 테이블이 전부 저장되어 있다면?

  • 실제 물리 주소에 접근하는 시간이 2배로 늘어난다
    • 페이지 테이블을 참조하기 위하여 PTBR 에 접근
    • 실제 Frame 을 참조하기 위하여 Page Table 에 접근

 

 

TLB

현재 자주 참조되고 있는 페이지 테이블을 일부 저장하는 캐시 메모리

  • 위에 언급했던 발생할 수 있는 문제점을 일부 해결한다
    • TLB 에 페이지 테이블이 저장되어 있다면, 바로 실제 Frame(물리 주소) 을 참조할 수 있다
    • (= 불필요한 메모리 접근을 줄일 수 있다)

 

내부적인 로직

TLB hit

  • CPU가 접근하고자 하는 논리 주소가 TLB 내부에 존재한다면? → TLB Hit
    • CPU는 1번의 참조로 실제 물리 주소를 참조할 수 있음

TLB Miss

  • 논리 주소가 TLB 내부에 없다면? → TLB Miss
    • CPU는 2번의 참조로 실제 물리 주소를 참조할 수 있다

 

 

Paging 에서의 주소 변환

CPU가 실제 접근할 물리 주소를 알아내기 위해서는 다음과 같은 정보를 알아야 한다

  • 어떤 Page / Frame 에 접근하고 싶은지 → page number
  • 접근하려는 주소가 Page / Frame 으로부터 얼마나 떨어져 있는지 → offset

Page 는 Process 를 Page Size 로 쪼개 놓았기 때문에, 각 Page 내부에는 다양한 정보들이 들어있을 것이다

CPU가 원하는 정보를 얻기 위해서는 각 Page의 시작 위치에서 얼마나 떨어진 곳에 내가 원하는 정보가 있는지를 알고 있어야 한다

 

세부 설명

  • 논리 주소는 page number + offset 쌍으로 구성되며
  • 물리 주소(실제 주소)는 frame number + offset 쌍으로 구성된다
  • 위 그림에 나와있는 것처럼, page size = frame size 이므로 offset 은 논리 주소와 물리 주소에서 같다
  • page 는 그대로 frame 에 적재되기 때문이다

 

 

Page Table Entry

페이지 테이블 내부에는 page number, offset 을 제외하고도 다양한 정보들을 가지고 있다

 

유효 비트

현재, 해당 페이지에 접근이 가능한 지를 나타내는 비트를 유효 비트라고 한다

  • 이는 다시 말하면, 메모리에 적재되어 있는지에 대한 여부를 나타낸다

 

만약 0(메모리에 적재되어 있지 않다면?)

  • Page Fault 가 일어난다 (Interrupt)

 

어떤 일이 일어나는가? (Page Fault Routine)

  • CPU가 기존 작업을 백업한다
  • Interrupt Service Routine 을 실행한다
  • 원하는 페이지를 메모리에 적재하고 유효 비트를 1로 변경한다
  • CPU는 원하는 페이지에 접근할 수 있게 된다

 

보호 비트

페이지를 보호하기 위하여 설정하는 비트이다

  • 읽기 전용인지, 읽기/쓰기 전용인지와 같은 정보를 저장할 수 있다

 

참조 비트

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

 

수정 비트(Dirty Bit)

해당 페이지에 데이터를 쓴 적이 있는지(수정된 적이 있는지) 를 나타낸다

  • 이는 Swapping 시에 중요하게 작용한다

메모리에 적재했던 페이지는 더 이상 사용되지 않는다고 판단되면, 보조 기억장치로 Swap Out 이 이루어진다

이때, 만약 메모리에서 해당 내용이 수정되었다면 이를 반영하여 보조 기억장치에 반영해 주어야 한다

댓글