[운영체제] 페이징 메모리 관리

페이징 메모리 관리

1) 페이지와 프레임

  • 프로세스의 주소 공간을 0번지부터 동일한 크기의 페이지로 나눔
  • 물리 메모리 역시 페이지 크기로 나누어 프레임으로 부름
  • 프로세스 구성 요소에 상관없이 고정 크기로 분할
  • 페이지 크기는 운영체제마다 다르게 설정가능
  • 페이지에 대응되는 프레임 번호를 저장하는 페이지 테이블 존재

2) 페이징 기법

  • 프로세스 주소공간과 물리 메모리를 페이지 단위로 분할하고, 프로세스의 각 페이지를 물리 메모리의 프레임에 분산 할당하고 관리하는 기법
  • 프로세스마다 페이지 테이블이 있으며 논리 주소의 물리 주소 변환은 MMU에 의해 이루어짐
  • 물리 메모리의 빈 프레임 리스트 관리 필요 → 프레임 할당 알고리즘
  • 내부 단편화가 발생하나 세그먼테이션보다 우수함

3) 페이징의 우수성

  • 구현이 용이함 - 고정 크기로 분할
  • 이식성이 높음 - cpu에 의존하지 않아 다양한 컴퓨터 시스템에 이식 가능
  • 융통성이 높음 - 시스템에 따라 페이지 크기를 다르게 설정 가능
  • 메모리 활용과 시간 오버헤드에서 우수 - 외부 단편화가 없으며 내부 단편화는 발생하나 매우 적음 → 홀 선택 알고리즘 필요 X

4) 페이지와 페이지 테이블

  • 4GB의 주소 공간을 가지는 프로세스 / 페이지 크기 4KB
  • 현재 프로세스는 6개의 페이지 사용 → 6*4 = 24KB
  • 페이지 테이블은 주소 공간의 모든 페이지를 나타낼 수 있는 항목을 포함, 대부분은 비어있음
  • 프로세스가 동적 할당을 받을 경우 페이지를 할당하고 대응되는 프레임의 주소에 해당 값을 할당→ 반환 시 페이지가 빌 경우 페이지 또한 반환
  • 프로세스가 시스템 호출을 사용할 경우 커널 코드에 접근 → 커널 코드 역시 논리 주소로 구성되어 프로세스의 페이지 테이블을 이용하여 물리 주소 접근

5) 32비트 CPU, 페이지 크기 4KB

  • 물리 메모리의 최대 크기 = 2^32 = 4GB
  • 한 프로세스가 구성가능한 최대 페이지 = 4GB/4KB = 약 백만개(1M)
  • 프로세스 당 하나의 페이지 테이블 존재, 페이지 테이블의 크기 (페이지 테이블 항목의 크기 = 32비트) → 4바이트 * 구성 가능한 최대 페이지(1M) = 4MB

6) 페이징에서 단편화

  • 외부 단편화는 없으며, 내부 단편화 발생
  • 스택이나 힙에서 생성하는 페이지는 제외하고 생각 (페이지가 계속 변화)
  • 프로세스의 마지막 페이지에서만 단편화 발생
  • 단편화의 평균 크기 = 페이지의 1/2 크기

페이징의 주소 체계

1) 페이징의 논리 주소

  • [페이지 번호, 오프셋] → 페이지 크기가 4KB(2^12)일 경우 페이지 내 각 바이트 주소 12비트
  • 페이지 크기에 따라 오프셋이 달라짐
  • 페이지 번호를 페이지 테이블에서 찾아 프레임 번호로 변경하여 물리 주소 접근
  • 32비트 컴퓨터, 페이지 크기 4KB일 경우 → 뒤의 3비트(오프셋)를 제외한 나머지 주소는 페이지 번호를 나타냄

2) 페이징 구현

  • CPU에 페이지 테이블이 있는 메모리 주소를 가진 레지스터가 필요
  • MMU 장치에 의해 논리 주소가 물리 주소로 빠른 변환이 필요
  • 운영체제에서 프레임의 동적 할당/반환 및 페이지 테이블 관리 기능이 필요

페이지 테이블의 문제점과 TLB

1) 페이지 테이블의 문제점

  • 1번에 메모리 엑세스를 위한 2번의 물리 메모리 엑세스 ( 페이지 테이블 항목 읽기 + 데이터 엑세스 ) → TLB 사용
  • 페이지 테이블의 낭비 ( 페이지 테이블 항목이 비어있는 문제 ) → 2레벨 페이지 테이블

2) TLB (Translation Look-aside Buffer)

  • 주소 변환 캐시로 불림
  • 최근에 접근한 페이지와 프레임 번호를 쌍으로 저장하는 캐시 메모리
  • [페이지 번호, 프레임 번호]를 항목으로 저장
  • 페이지 번호를 받아 동시에 고속으로 검색 → 고가이며 캐시의 크기가 작음(64~1024개 항목 저장)

3) TLB를 활용한 메모리 엑세스

  1. cpu로부터 논리 주소 발생
  2. 논리 주소의 페이지 번호가 TLB로 전달
  3. 페이지 번호와 TLB내 모든 항목 동시에 비교
    • 페이지가 TLB 내에 있는 경우 → TLB에서 출력되는 프레임 번호와 오프셋으로 물리 주소 구성
    • TLB에 페이지가 없는 경우 → 페이지 테이블로부터 프레임 번호를 읽어오며 TLB에 페이지와 프레임 번호를 저장

4) TLB에서 알 수 있는 사실

  • TLB와 참조의 지역성 참조의 지역성을 이용하여 순차 메모리 액세스에 실행이 빠르며, 랜덤 메모리 액세스나 반복이 없는 경우 실행 속도가 느림 → 효과적인 전략
  • TLB의 항목을 늘리면 TLB의 히트율은 높아짐
  • TLB reach - TLB를 가득 채웠을 때 미스없이 작동하는 메모리 범위 = TLB 항목 수 * 페이지 크기

5) TLB를 고려한 컨텍스트 스위창 과정

  1. cpu의 모든 레지스터를 PCB에 저장
  2. PCB에 있는 프로세스의 페이지 테이블 주소를 페이지 테이블 레지스터로 로딩
  3. TLB 내용 모두 지움 → 비용이 큼
  4. 새 프로세스 컨텍스트를 PCB에서 CPU로 로딩

페이지 테이블의 메모리 낭비 문제 해결

1) 페이지 테이블의 메모리 낭비

  • 실제로 실행되는 프로세스의 크기가 작고 많지 않을 경우 → 실제 사용하는 페이지 테이블 항목이 매우 적음

2) 페이지 테이블 낭비 문제의 해결책

  1. 역 페이지 테이블 [ 프로세스 번호 , 페이지 번호 ] 프레임 번호를 인덱스로 사용함 논리 주소에서 프로세스 번호와 페이지 번호를 사용하여 테이블에서 검색한 후 인덱스 번호를 반환
  2. 멀티 레벨 페이지 테이블 페이지 테이블은 하나의 페이지에 넣고 페이지 테이블을 가리키는 페이지 구성 사용중인 페이지들에 대해서만 페이지 테이블 구성

3) 역 페이지 테이블

  • 시스템에 하나 존재
  • 프로세스 번호와 페이지 번호로 구성되어 사용
  • 기존 페이지 테이블과 비교하여 물리 메모리를 사용하는 프레임을 통해 사용하는 크기를 구할 수 있음

4) 멀티 레벨 페이지 테이블

  • 현재 사용준인 페이지들에 대해서만 페이지 테이블을 만드는 방식
  • 페이지 테이블을 수십 수백개의 작은 페이지 테이블로 나누고 여러 레벨로 구성
  • 2레벨 페이지 테이블의 경우 [ 페이지 디렉토리 인덱스, 페이지 테이블 인덱스, 오프셋] 으로 구성
  • 페이지 테이블들의 페이지화

'Computer Science > Operating System' 카테고리의 다른 글

[운영체제] 파일 시스템 관리  (0) 2023.07.25
[운영체제] 가상 메모리  (0) 2023.07.24
[운영체제] 메모리 관리  (0) 2023.07.22
[운영체제] 교착상태  (0) 2023.07.17
[운영체제] 스레드 동기화  (0) 2023.07.16