[Operating System] 페이징

권영태·2025년 5월 6일

Operating System

목록 보기
15/20

페이징

메모리 할당 방식 중 불연속 메모리 할당의 고정 (크기) 분할 방식 중 하나로, 작업을 크기가 동일한 페이지로 나누어서 처리하는 방법을 페이징이라고 한다.

페이지란?

가상 메모리 전체 주소 공간의 고정된 크기 블록(4KB)를 페이지라고 한다.
물리 메모리는 페이지가 아닌 프레임 단위를 사용한다.

페이징이란?

불연속 메모리 할당 기법 중 하나로, 동일한 크기의 페이지를 물리 메모리의 빈 프레임에 각각 저장한다.

  • 장점: 외부 단편화가 없으며 연속 메모리 할당으로 발생하는 문제를 해결해준다.
  • 단점: 내부 단편화 가능성이 있으며, OS의 페이지 관리 부담이 높다.

페이징 시스템의 하드웨어

페이지 테이블

각 프로세스마다 페이지 테이블을 만들고 유지해 페이징을 지원한다.
페이지 테이블의 물리 주소는 PCB에 저장되어, CPU 스케줄러가 프로세스 실행 시 PTBR을 함께 로드한다.

  • PTBR(Page Table Base Register): 페이지 테이블의 시작 물리 주소를 가르키는 하드웨어 레지스터로, MMU가 PTBR이 가르키는 페이지 테이블을 참조해 가상 주소 -> 물리 주소로 매핑할 수 있다.

페이지 테이블 구현 방식

페이지 테이블 구현은 크게 두 방식으로 구분 할 수 있다.

  • 레지스터 방식: 페이지 테이블 전체를 고속 하드웨어 레지스터로 구현하는 방식.
    • 장점: 번역 속도가 매우 빠르다.
    • 단점: 컨텍스트 전환 시 모든 레지스터가 교환해야 되기 때문에 오버헤드가 크다.
  • 메인 메모리 방식: 페이지 테이블을 메인 메모리에 두고, PTBR 하나만 레지스터에 보관한다.
    • 장점: 컨텍스트 전환 시 PTBR 하나만 교환하면 되기 때문에 오버헤드가 작다.

TLB(Translation Lookaside Buffer)

페이지 번호와 프레임 번호의 매핑을 캐싱하는 소형 기억장치다.

  • 동작 방식
    1) CPU 논리 주소 생성
    2) MMU가 페이지 번호로 TLB 먼저 조회
    2-1) Hit시 즉시 프레임 번호를 획득해 메인 메모리 해당 부분에 접근한다.
    2-2) Miss시 페이지 테이블에서 프레임 번호를 획득하고, 그 쌍을 TLB에 추가 후 메인 메모리 해당 부분에 접근한다.
  • 엔트리(Row) 교체 정책으로 LRU, R-R(라운드 로빈), 랜덤 등이 존재한다.
  • ASID(Address-Space-Id): 각 TLB 엔트리에 프로세스 식별자(ASID)를 함께 저장해 컨텍스트 전환 시 TLB Flush() 없이도 여러 프로세스 엔트리를 공존시킬 수 있다.

보호

유효-무효 비트를 통해 논리 주소 공간에 속하지 않는 페이지 접근을 무효 처리하거나, 페이지 테이블 엔트리마다 보호 비트를 두고 권한 위반 시 H/W 트랩을 발생시켜 보호할 수있다.

공유 페이지

재진입 가능한 코드만 물리 메모리의 같은 페이지를 공유해 메모리 효율을 높일 수 있다.

생각 정리

페이지와 프레임 차이는 뭘까??

페이지는 가상 메모리 주소 공간에서 사용하는 고정된 크기의 블록을 의미하고, 프레임은 물리 메모리 주소 공간에서 고정된 크기의 블록을 의미한다.

외부 단편화와 내부 단편화란??

  • 외부 단편화: 전체 여유 메모리의 총량은 충분하지만, 여유 공간들이 불연속적이여서 메모리를 할당할 수 없는 문제
  • 내부 단편화: 프로세스가 요청한 크기보다 할당한 블록이 더 커서 남는 공간이 발생하는 문제

페이지가 실제 주소를 가져오는 과정은??

1) CPU가 생성한 논리 주소의 페이지 번호(p)와 페이지 내 오프셋(d)로 분리시킨다.
2) 분리된 p로 페이지 테이블을 인덱싱해 해당하는 프레임 번호(f)를 읽어온다.
3) (f*프레임 크기) + d 공식을 통해 실제 주소를 찾아낸다.

어떤 주소공간이 있을 때, 수정 가능한 공간인지 확인하는 방법은??

페이지 테이블 엔트리마다 프로텍트 비트가 존재하는데, 이 비트를 통해 수정 가능 여부를 확인한다.

32비트에서 페이지 크기가 1kb일 때, 페이지 테이블의 최대 크기??

논리 주소 전체 크기(2^32)를 페이지 크기(2^10)으로 나눈 2^22가 페이지 최대 크기가 된다.

32비트 OS는 램을 최대 4GB로 사용할 수 있는 이유??

32비트 논리 주소 전체 크기는 2^32 즉 4G이다. 페이징에서 논리 주소의 상위 32비트가 페이지 번호로 쓰이기 때문에 최대 4GB로 사용할 수 있다.

TLB를 쓰면 왜 빨라질까??

매번 페이지 테이블을 참조하지 않고, TLB Hit 시 바로 메모리에 접근할 수 있기 때문에 빠르다.

MMU란?

MMU(Memeory-Management Unit)는 논리 페이지를 물리 페이지 프레임으로 동적 매핑해주는 역할을 한다.

TLB와 MMU의 위치는 어딜까?

두 장치 모두 CPU 내부 레지스터와 캐시 사이에 존재하고 있다.

코어가 여러개일 때, TLB는 어떻게 동기화 할까?

각 코어마다 독립적인 TLB를 가지는데 이는 ASID를 써서 쉽게 해결할 수 있다.
ASID 설명은 본문을 참고하자.

TLB 관점에서, Context Switching 발생 시 어떤 변화가 일어날까?

TLB를 전부 비우는 Flsuh()와 ASID를 바꿔서 프로세스 식별자에 맞는 엔트리만 접근할 수 있도록 제어한다.


학습하며 정리한 글이기 때문에 혼용된 표현 또는 잘못된 내용이 있을 수 있습니다.
만약, 발견하신 경우 댓글을 통해 알려주신다면 진심으로 감사드립니다.

profile
GitHub : https://github.com/dudxo

0개의 댓글