티스토리 뷰
이번 장에서는 CPU가 메모리Fetch를 할때 Virtual Address을 Physical Address로 변환 시켜 가져오는 과정을 알아보도록 하겠습니다.
먼저 과정을 크게 살펴보면
- CPU가 TLB를 참조하여 Virtual address를 참조함, 있으면 TLB HIT.
- TBL에 없을경우 TLB miss가 일어나 Page Table에가서 가상주소를 찾아옴
- Virtual address를 찾은후 Physical address로 변환함
- L1 cache로가서 해당 Physical address에 해당하는값을 찾음, 있으면 L1 HIT.
- L1에 없을경우 L1 miss가 일어나 다른 메모리로가서 찾음.
- 찾으면 CPU로 fetch함.
이때 VPO, PPO, CI,CO는 바뀌지않는 값입니다. 즉, 이값은 서로 같아 고정된 값으로 미리 가지고와 실제 메모리 매핑할때, 미리 위치를 잡아두어 속도를 좀더 빠르게 할 수 있습니다.
TLB란?
-Virtual address를 효율적으로 관리하기 위해 사용되는 하드웨어 캐시입니다.
원래는 cpu가 어떤 Virtual address를 참조하려할때 존재여부를 확인하기 위해 Page Table을 참조해야하는데, 이것은 메모리에 존재 하기때문에, 참조하는과정에서 시간이 많이 소모되어, 성능 향상을 위해 TLB가 생겨났습니다.
TLB는 Page Table의 일부를 저장하고, 이것을 바탕으로 해당 페이지가 메모리에 존재하는지 여부를 빠르게 확인합니다.
TLB HIT
-TLB에 해당 페이지가 존재할때를 뜻합니다. TLB에서 한번 데이터 확인이 일어나고 MMU에서 바로 Physical Address로 변환하여 실제 메모리에 해당하는값을 가져옵니다. TLB에서 일어나는 일이라, 메모리를 한번만 이용하여 걸리는 시간이 매우 단축됩니다.
TLB MISS
-TLB에 해당 페이지가 존재하지 않을때를 뜻합니다. TLB에서 한번데이터 확인이 일어났는데 TLB가없을경우 바로 메모리로가서 Page Table을 참조하여 해당 페이지를 찾아냅니다. 찾아내면 이 페이지를 TLB에 저장하고 MMU에서 Physical Address로 변환하여 실제 메로리에 해당하는값을 가져옵니다. 메모리를 두번을 사용해야하기 때문에 걸리는시간이 깁니다. 다행히도 MISS는 자주일어나지않아 가끔씩 일어나는 과정입니다.
Multi-Level Page Table
-Page Table은 실제 메모리에 저장되어있는데 이 테이블 특성상 모든 테이블을 그냥 저장하게되면 저장공간이 너무 커지게 됩니다. 따라서, 이 저장공간을줄이는 방법으로 multi-level이 생겨났는데 레벨 별로 나누어 테이블을 저장하는 방식입니다.(링크드 리스트와 비슷함) 낮은 level에서부터 점점 높은 level로 가는 과정이며, 가장 높은level에는 실제 virtual memory가 저장되어 있습니다. 아래의 사진은 가장 흔히 사용하는 4-level Page Table입니다.
(CR3는 레지스터종류로 페이지 테이블 디렉터리의 시작주소를 저장하는 레지스터)
'OS' 카테고리의 다른 글
Shell(쉘) (0) | 2023.05.28 |
---|---|
메모리 Stack변화 (0) | 2023.05.15 |
Copy-on-Write (mmap) (0) | 2023.05.08 |
가상 메모리(Virtual Memory) (0) | 2023.05.05 |
프로그램 -> 프로세스 변환과정 (컴파일) (0) | 2023.04.06 |
- Total
- Today
- Yesterday
- 쿼리
- 자바
- 포트포워딩
- 스프링
- 보안
- 깃
- DB
- 깃허브
- 데이터
- 데이터베이스
- 인공지능
- 도커
- 프로토콜
- nat
- 테이블
- 자동화
- 배포
- 클라우드
- 웹소켓
- 파인튜닝
- 컨테이너
- 메세지큐
- 네트워크
- 컴퓨터구조
- 소프트웨어공학
- JPA
- 서버
- sql
- 문법
- IP주소
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |