시냅스

페이징과 스와핑, Main Memory 본문

운영체제

페이징과 스와핑, Main Memory

ted k 2022. 5. 20. 18:09

페이징과 스와핑

 

페이징 Paging

  • 프로세스가 할당되는 물리 메모리를 frame(고정된 크기 block)으로 쪼갬
  • frame(e.g. 4kb)을 logical memory(e.g. 4kb)와 맞춤 -> page
  • logical memory 와 physical memory를 완전히 분리한다.
  • Os가 Logical 과 Physical을 Mapping
  • 물리주소 공간이 연속적이지 않도록 관리하는 체계
    • 외부 단편화, 관련 압축 필요성 방지
    • 대부분 o/s에서 사용 된다.
  • cpu가 생성하는 논리주소는 Page number(p, 페이지 테이블 인덱스) + Page offset(d, 페이지 내 offset)로 이뤄져 있다.
  • page size는 하드웨어에 따라 다르지만 반드시 2의 거듭제곱 꼴이다.
  • 만약 logical address 2^m, page size 2^n 이라면 2^m-n = page number, 2^n = page offset이다.
  • 외부 단편화는 없으나, 내부 단편화 존재
  • 페이징은 메모리는 일정하게 같은 크기로 나눠 할당한 것이고
  • 세그멘테이션은 메모리를 다른 크기의 논리적인 단위로 나누어서 할당하는 것이다
  • 페이지 테이블
    • 물리 메모리의 할당에 관한 정보, 어느 프레임이 할당되어 있고 사용가능한지 등, 시스템에 하나 밖에 없는 자료구조이다.

 

TLB

https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/8_MainMemory.html

  • 메인 메모리에 페이지 테이블을 저장하면 메모리 액세스 시간이 지연되고 원하는 페이지에 접근하기 위해 메모리 상의 페이지 테이블에 먼저 접근하고 그 다음에 메모리 상의 페이지에 접근해야하기 때문에 메모리에 2번 접근해야한다.
  • Context switching이 일어날 때마다 Page 테이블이 바껴야 하는 비효율 개선
  • 페이지 번호를 찾으면 프레임 번호를 즉시 사용, 메모리 엑세스
  • 페이지 번호가 TLB에 없으면 페이지 테이블에 대한 메모리 참조를 새로 생성
    • 1. cpu가 논리주소를 생성하면 MMU는 해당 페이지 번호가 TLB에 있는지 확인한다.
    • 2. TLB에서 페이지 번호가 발견되면 프레임 번호를 알아내 메모리에 즉시 접근한다.
    • 3. TLB에 페이지 번호가 없으면 페이지 테이블에 접근하여 프레임 번호를 알아내며 해당 페이지 번호와 테이블 번호는 TLB에 저장하여 다음번에는 빠르게 찾을 수 있도록 한다.
    • 4. TLB가 다 차면 여러 교체 정책 중 하나를 선택하여 교체한다.
  • 소형 하드웨어 캐시
  • 성능을 위해 작게 유지해야 한다. (탐색 시간)
  • TLB Hit : 메모리 주소가 TLB 안에 있어 바로 참조할 수 있을 때
  • TLB Miss : TLB에 cache가 없을 때
  • Hit ratio : Hit이 일어나는 비율

 

Shared pages

  • 자기 코드가 변경될 일 없는 것들의 공통의 코드를 공유한다(e.g. libc)

 

보호 Protection

  • 메모리 보호는 각 프레임과 관련된 보호 비트에 의해 수행
    • 보호 비트 : 읽고 쓰기 또는 읽기 전용인지 정의
    • 유효 비트 : 페이지에 접근하는 것이 합법적인지 검사

 

페이지 테이블의 구조

  • 계층적 페이징
    • 페이징의 크기가 커지는 경우 테이블을 나눠서 저장한다.
  • 해시 페이지 테이블
    • 주소 공간이 32비트 보다 커지면 해시 페이지 테이블을 사용한다.
    • 해시 페이지 테이블의 각 항목은 연결 리스트를 가지고 있다.
    • 해시값이 같은 원소들이 연결 리스트에 연결되게 된다.
    • 각 원소는 세개의 필드를 가진다.
      • 1. 페이지 번호
      • 2. 페이지가 저장된 프레임 번호
      • 3. 연결 리스트 상의 다음 포인터
    • 페이지 번호를 받으면 해싱하고, 해싱한 값에 대한 항목을 찾는다.
    • 해당 항목에서 연결 리스트를 따라가며 일치하는 페이지 번호를 찾는다.
    • 페이지 번호에 대한 프레임 번호를 통해 물리 주소를 알아내고 접근한다.
      • 64비트 시스템에서는 해시페이지 테이블의 항목이 여러 페이지를 가리키는 클러스터 페이지 테이블을 사용한다.
  • 역 페이지 테이블
    • 시스템 상에 하나만 존재하며 메모리 프레임마다 한 항목을 할당한다.
    • 한 페이지 테이블에 여러 프로세스의 페이지를 표현하기 때문에 페이지 테이블의 각 항목은 어떤 프로세스의 페이지인지 표시해야 한다.
    • 메모리 참조가 발생하면 역 페이지 테이블을 순차적으로 돌면서 pid와 페이지 번호가 일치하는 페이지가 있는지 확인한다.
    • i 번째 항목에서 일치한다면 실제 메모리 상의 i 번째 프레임에 존재하는 것이다.

 

스와핑 Swapping

  • 프로세스가 실행 중에 임시로 백업 저장장치로 보내졌다가 다시 돌아오는 것
  • 필요한 것만 올린다.
  • Swap-in : 메모리에 올리는 것
  • swap-out : 메모리에서 빼는 거
  • 하지만, page 단위로 이뤄지기 때문에 page-in, page-out 이라고 한다.
Comments