가상메모리
가상메모리는 운영체제/하이퍼바이저와 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개가 같은 캐시블록에 존재할 때 다른 변수를 참조해도 블록 전체가 교환되는 경우
'전공 > 컴퓨터구조' 카테고리의 다른 글
[컴퓨터구조] #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 |