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

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
반응형

'전공 > 컴퓨터구조' 카테고리의 다른 글

[컴퓨터구조] #9~11 추가 사설 문제  (0) 2023.06.11
[컴퓨터구조] #14 병렬프로세서  (0) 2023.06.11
[컴퓨터구조] #12 가상머신/가상화/클라우드  (0) 2023.06.11
[컴퓨터구조] #11 메모리 계층 구조  (2) 2023.06.11
[컴퓨터구조] #10 데이터패스(파이프라인)  (0) 2023.06.11
'전공/컴퓨터구조' 카테고리의 다른 글
  • [컴퓨터구조] #9~11 추가 사설 문제
  • [컴퓨터구조] #14 병렬프로세서
  • [컴퓨터구조] #12 가상머신/가상화/클라우드
  • [컴퓨터구조] #11 메모리 계층 구조
dev_ares
dev_ares
대학에서 컴퓨터공학을 전공하고 있는 학생입니다.
    반응형
    250x250
  • dev_ares
    노트
    dev_ares
  • 전체
    오늘
    어제
    • 분류 전체보기 (188)
      • IT 트랜드 (2)
      • 백엔드 (18)
        • Java + Spring (8)
        • Kotlin + Spring (5)
        • 백엔드 (5)
      • 프론트엔드 (1)
        • React (1)
      • 대외활동 (17)
        • 42서울 (17)
      • 백준 (6)
        • Java (2)
        • C++ (3)
      • 전공 (121)
        • 객체지향프로그래밍 (17)
        • 자료구조 (23)
        • 리눅스시스템관리 (16)
        • 컴퓨터구조 (25)
        • 네트워크 (25)
        • 데이터베이스 (15)
        • 기타 전공 (0)
      • 프로그래밍 언어 (18)
        • Java (5)
        • Swift (4)
        • C++ (1)
        • Kotlin (8)
      • 기타 (4)
      • 공군 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코틀린
    상속
    명령어
    자바
    반복자
    자료구조
    백준
    메모리 계층 구조
    오블완
    사설 문제
    컴퓨터구조
    리눅스
    데이터패스
    컴퓨터 구조 및 설계
    42서울
    단일 사이클
    컴공 포트폴리오
    C++
    티스토리챌린지
    추가 문제
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
dev_ares
[컴퓨터구조] #13 가상메모리
상단으로

티스토리툴바