전공/컴퓨터구조

[컴퓨터구조] #13 가상메모리

Campus Coder 2023. 6. 11. 17:21
728x90
반응형

가상메모리

가상메모리는 운영체제/하이퍼바이저와 HW의 지원 필요

가상 메모리의 메모리 보호

- 하이퍼바이저나 OS가 각 가상머신이나 프로세스의 메모리 영역을 보호

가상메모리의 역할

  • 물리메모리보다 큰 프로그램 실행 가능하도록
    메모리를 디스크/SSD의 캐시역할로 사용하도록 만드는 기술
  • 프로그램마다 가상메모리주소공간 제공
  • 가상메모리와 물리메모리 간의 변환과정 - 페이지(page) 개념을 사용

 

가상 메모리 시스템 주소 = 가상 페이지 번호 + 페이지 오프셋(offset)

 

페이지 부재(falut) 시 엄청난 사이클이 필요함

- 대응

  • 페이지 크기가 커야 함
  • 페이지 부재 발생률을 낮추는 구성 -> fully associative
  • SW 알고리즘을 통해 개선
  • 쓰기 방식은 Write-back사용

 

페이지 테이블

페이지 테이블 레지스터 - 페이지 테이블의 시작주소를 가짐

Context Switching(문맥 교환)

- 가상머신이나 프로세스 교체

페이지 부재(Page fault)

- 가상페이지의 유효비트가 0일 경우

- Swap space(file)

  - 물리디스크 상에 대응 공간

  - LRU(Last Recently Used) 기법 사용

페이지 테이블(물리메모리 + 디스크)

 

가상메모리 성능개선

역 페이지 테이블(inverted Page Table)

- 페이지 테이블을 가상페이지의 개수만큼 이 아닌 물리메모리 실제 페이지 크기만큼 되도록 하는 기법

- 가상주소에 해시함수 적용

- 직접인덱스가 안 돼서 더 복잡함

 

다단계 페이지 테이블

- 다단계 캐시와 유사

 

페이지 테이블의 가상메모리화

- 최신 OS에서 사용하는 방법

 

가상메모리 쓰기

Write-back방식

Dirty page만 업데이트 - 페이지 테이블에 dirty bit로 관리

 

고속 가상메모리 주소변환

일반적인 가상 메모리 접근

- 가상 메모리 -> 물리메모리 주소변환 + 실제 메모리 접근

- 참조의 지역성(Locality) 활용

- TLB(Translation Lookaside Buffer) 버퍼

 

TLB 동작방식

TLB상에 가상메모리주소 검색

hit시

- 참조 비트를 1로 설정

- 쓰기가 발생하면 Dirty bit도 1로 설정

fail시

- 단순히 TLB에 없을 경우 -> 페이지 테이블에서 TLB 업데이트

- 페이지 fault인 경우 -> 물리디스크에서 물리메모리로 읽어옴, TLB 업데이트

 

FastMATH TLB

- 4KB 페이지 + 32비트 주소(가상, 물리)

- 가상페이지 번호 20비트

- 16개의 TLB 엔트리(64비트)

가상메모리, TLB, 캐시의 통합 구조

 

TLB 구현 스펙

TLB 크기 16~512 엔트리
블록 크기 1~2 페이지 테이블 엔트리(4~8바이트)
적중 시간 0.5~1 클럭사이클
실패 손실 10~1000 클럭사이클
실패율 0.01%~1%

Fully Associative 방식으로 구현하는 경우가 많음

렌덤으로 선정하는 경우 많음(LRU구현 비용이 높음)

 

 

가상메모리 보호 구현

보호구현

- TLB의 쓰기 접근 비트로 보호

- 페이지 접근권한 관련 비트를 페이지 테이블과 TLB에 추가

-> 사용자 프로세스가 페이지 테이블 매핑을 변경 불가하도록

- 페이지 테이블은 운영체제의 보호된 주소공간에 배치

- 프로세스 ID를 관리

 

하이퍼바이저 보호구현

호스트 OS와 게스트 OS 간의 차이 이해

- 물리메모리와 실제메모리 구분

 

전가상화 vs 반가상화

- 게스트 OS가 물리자원에 직접 접근 불가 vs가능

- 성능차이

 

가상메모리 개선

워킹 셋 - 자주 사용되는 페이지들의 집합

  • Thashing - 물리메모리-디스크 간의 끊임없는 페이지 교환으로 인한 성능감소
  • 물리메모리크기 증설
  • 워킹 셋을 통해 프로그램이 동시에 사용하는 페이지 수 줄임
  • TLB 실패 개선 - 가변 페이지 크기 지원
    큰 페이지를 사용하면 TLB실패 없이 직접 접근하는 메모리크기가 커짐

 

RAID

여러 개의 디스크를 사용해서 용량과 안정성, 읽기/쓰기 성능을 높이는 기술

  • RAID 0(Stripping)
    쓰기 성능 높이기
  • RAID 1(Mirroring)
    읽기 성능 높이기 + 안정성, 디스크 공간 n배 필요
  • RAID 0+1
    스트라이핑 적용 후 미러링 적용
  • RAID 1+0
    미러링 적용 후 스트라이핑 적용
  • RAID 5/6
    스트라이핑과 체크썸(패리티) 적용
    패리티 적용해서 디스크가 1개(RAID 5)나 2개(RAID 6)가 장애가 나도 복구 가능
    한 곳에 쓸 때 체크썸을 계산해서 업데이트 필요

 

FSM(Finite State Machine)

 

캐시 통일성

멀티코서 CPU에서는 코어별로 캐시를 가짐

- 개별 캐시들이 동일한 값을 가지도록 만들어야 함

 

  • 통일
    - 읽기가 가져오는 값
  • 일관성
    - 쓴 값을 읽기가 가져오는 시기
    - 여러 개의 값이 동일할 경우에 부르는 개념
    - 일반적으로 복제로 구현
  • 동기화
  • 쓰기 직렬화
  • 이동
    - 지역 캐시로 이동해서 지연감소와 공유메모리 대역폭 요구사항 감소
  • 복제
    - 공유데이터를 읽을 때 로컬캐시에 복사본을 생성
    - 읽기에 대한 접근 지연 감소, 경쟁 감소
    - 읽기 성능 증가, 쓰기 성능은 유지하거나 약간 감소

 

캐시 통일성 유지 프로토콜(Sooping)

데이터 블록의 모든 공유상태를 추적

Sooping

  • 네트워크(버스)를 감시
  • P2P방식으로 관리, 중앙집중식이 아님
  • 쓰기 Lock(성능 감소)

 

블록 크기가 크면 필요한 대역폭 증가

 

False sharing

- 서로 다른 공유변수 2개가 같은 캐시블록에 존재할 때 다른 변수를 참조해도 블록 전체가 교환되는 경우

728x90
반응형