운영체제 18 페이징

zh025700·2022년 5월 26일
0

운영체제

목록 보기
12/20

운영체제

18) 페이징: 개요

공간 관리를 할 떄
가변 크기의 조각들로 분할(세그멘테이션)하거나 동일크기의 조각으로 분할(페이징)해 공간관리를 한다.

세그멘테이션은 공간이 단편화 될 수 있다...

페이징은 프로세스의 주소 공간을 고정크기의 단위(페이지)로 나눈다.
실제 메모리도 페이지 프레임이라는 고정된 크기의 배열이라고 생각한다.

페이징의 컨셉

  • 페이징

    • 주소공간을 page라고 불리는 고정된 크기의 단위로 나눈다.

    • 세그멘테이션과 다르다.

      • 가변 크기의 세그멘트
  • 페이징을 하면, 실제 메모리는 page frame이라는 배열로 나뉜다.

  • 가상메모리에서 실제메모리로 변환이 필요하기 때문에 프로세스마다 page table이 필요하다

페이징 장점

  • flexibility 주소공간의 추상화를 지원한다.
    • 주소공간 사용 방식과 상관없이 효율적으로 주소 공간 개념을 지원할 수 있다.
    • 힙과 스택이 커지는지 알 필요가 없다.
  • simplicity 빈 공간을 관리하기 단순하다.
    • 주소 공간과 page frame의 페이지는 같은 크기다
    • 할당과 free list 유지가 쉽다.

가상 메모리의 페이지들은 실제 메모리 전체에 분산 배치 되어있다.

  • 그래서 페이지 테이블을 이용해 가상과 실제의 대응 정보를 알아

  • OS가 페이지를 사용할 수도 있다.

    • OS가 실제 메모리의 일부에 배치되어있는..

page table

  • 각 가상페이지에 대한 물리 메모리 위치를 기록한다.
    • 주소 변환 정보를 저장한다.
  • 프로세스마다 존재한다
  • OS 메모리 영역에 저장되어 있다.
    • PTBR이 페이지 테이블의 시작 주소를 안다.

주소 변환

  • 가상 주소의 두개의 요소
    • VPN: virtual page number
      • page num을 가리킨다
    • Offset
      • 주소의 번호를 가리킨다

VPN을 이용해 페이지 번호를 알아내고 offset을 이용해 페이지 번호내의 어디인지 판단

EX) 64바이트의 주소공간, 페이지는 16바이트, 가상주소 21

64바이트의 주소공간을 사용하니 가상 주소는 6비트여야한다.(2^6 = 64)
여기에 페이지는 16바이트니 가상 주소의 offset은 4비트다.
21을 이진수로 변경하면 010101이다.
VPN: 01 offset: 0101이 된다.

그래서 가상 주소 21은 가상 페이지 01의 5번째 바이트이다.
이 가상주소를 페이지테이블을 이용해 VPN을 물리페이지 번호로, Offset은 그대로 사용해 해당 바이트를 찾는다.

오프셋이 동일한 이유

  • 해당 페이지 내의 어디인지 알려주니깐...
    • 페이지 크기는 모두 같으니 offset은 같음.

페이지테이블은 어디에 저장되나?

  • 페이지 테이블은 매우 커질 수 있다.
    • 32bit주소공간, 4kb페이지
      • 가상 주소 20비트: vpn 12비트: offset(페이지가 4kb니깐,, 4kb=2^12비트)
        • offset으로 페이지 어디에 있는지 판별하니 페이지크기로 offset 비트 수 판단
        • 페이지테이블 크기 = 2^20(페이지 개수)*4바이트(페이지 테이블 항목 크기)
  • 각 프로세스의 페이지 테이블은 메모리에 저장된다.

페이지 테이블에는 무엇이 있는가

  • 페이지 테이블은 가상주소를 물리주소로 매핑하는데 사용되는 자료구조이다.

    • 가장 간단한 형태: linear 페이지 테이블(배열)
  • OS는 VPN으로 배열의 항목에 접근하고 PTE를 검색한다.

PTE page table entry

- 32bit 주소공간 4바이트
- 64bit 주소공간 8바이트
  • page frame number

    • 이걸로 VPN에 해당하는 물리메모리 프레임 번호를 찾는다
  • valid bit

    • 특정 변환의 유효 여부를 나타냄
  • read/write bit (protection bit)

    • 페이지를 읽거나 쓸 수 있는지 표시
  • user/supervisor bit

    • 모드에 따라 접근 가능한지
  • present bit

    • 페이지가 물리메모리에 있는지, 디스크(swap out)에 있는지
  • accessed bit

    • 페이지가 접근되었는지
  • dirty bit

    • 페이지가 변경되었는지 아닌지(값이 바뀐지)
4kb의 페이지를 가진 32비트 주소공간에선 pte가 4바이트를 지닌다했다..
페이지가 4kb니깐 offset이 12bit가 필요, 그럼 20bit의 vpn이 있음
그럼 32비트 주소공간을 사용하니 페이지 베이스 주소는 vpn이 20이니 해당 vpn에 상응하는 물리 페이지 20비트가 필요, 나머지 비트 12개에는 추가정보

페이징: 너무 느림

원하는 데이터를 가져오기 위해 시스템은 가상 주소를 물리 주소로 변환해야한다.
시스템은 프로세스의 페이지 테이블에서 적절한 페이지 테이블을 가져와 변환을 수행 후 물리 메모리에서 데이터를 탑재한다.
그럼 페이지 테이블이 어디 있는지 알아야겠네??
  • 원하는 PTE를 찾기위해, 페이지 테이블의 시작 지점이 필요하다

    • 현재 실행 중인 프로세스의 페이지 테이블의 위치를 알아야함
원하는 PTE를 찾기 위해 가상 주소에서 VPN을 골라낸다.
해당 VPN에 맞는 PTE를 찾기 위해서이다.
마스킹을 통해 가상 주소에서 VPN을 골라내면 이제 메모리에서 PTE를 가져올 수 있다.
이제 물리 프레임 숫자PFN를 찾아 offset과 결합해 원하는 물리 주소를 찾을 수 있다.
  • 모든 메모리 참조에 대해, 먼저 페이지 테이블에서 변환 정보를 알아야하기 때문에 반드시 한번의 추가적 메모리 참조가 필요하다.
    • 메모리에 접근(페이지 테이블)을하니 성능이 떨어짐

메모리 트레이스

  • 명령어 반입 시 메모리가 두번 참조된다.

    • 명령어 위치 파악을 위한 페이지 테이블 접근
    • 명령어 자체에 접근
  • 명령어에 따라 추가적 메모리 참조를 할 때도 있다.

    • 데이터를 사용하기 위해 접근, 총 2번
      • 이때도 페이지 테이블에 접근
      • 데이터 자체에 접근

요약

  • 페이징은 하드웨어적으로 메모리를 특정 단위로 분할
  • 페이지 테이블 접근으로 인한 시스템 성능 저하..
  • 페이지 테이블을 위한 메모리 공간 할당으로 인한 메모리 낭비..

이를 해결해야한다.

profile
정리

0개의 댓글

관련 채용 정보