일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 파이썬 프로젝트
- 패스트 캠퍼스 #자율주행 #비전
- 파이선 행
- 파이썬 열
- 파파고 꿀팁
- ROS #spin() #spinOnce() #ROS기초
- 파이썬 음성인식
- 통계 #ROC #TPR #FPR #TNR #이진분류 #Accuracy #Recall
- 파이썬 유튜브
- PDF 개행문자
- pdf 번역
- 파이썬 파일 전송
- 크롬오류#크롬검색어자동완성끄기#검색어자동완성오류#검색어자동완성 제거#검색어 노란선#검색어반복입력
- ROS #Robotics #ROS기초
- 파이썬 예시
- 논문번역 꿀팁
- 파이썬#파이썬경로#파이썬폴더#파이썬디렉토리
- 파이썬 엑셀 파일 읽고 쓰기
- 파이썬 채팅
- 리눅스기초#리눅스명령어#리눅스 tail#tail#모의해킹 리눅스
- 파이썬#subprocess#communicate()
- 파이썬 텍스트 변환 #파이썬 공부
- 스트림 암호 one-time-pad 공격#보안#암호
- 파이썬 #파이썬프로젝트 #파이썬 예시 #파이썬 파일경로 #파이썬 자동화
- QGC#QGrouncControl#GLIB오류
- 파이썬 음성파일 텍스트 변환
- 리눅스#모의해킹#리눅스명령어#head 명령어
- 파파고 번역
- 파이썬
- 파이썬 #
개발자비행일지
TLB(Translation -Lookaside Buffer) 변환- 색인 버퍼 본문
페이징은 프로세스의 주소공간을 고정된 크기의 페이지로 나누고, 각 페이지가 존재하는 물리 메모리주소와 프로세스와 매핑해주는 과정이다. 이 때, 필요한 정보들을 메모리에 잇는 페이지 테이블 이라는 자료구조에 저장한다. 이 페이지테이블은 프로세스 별로 존재하는데 실행될 때 마다 새로운 페이지테이블에 접근하는 과정을 반복하는 것은 프로세스 실행속도 면에 있어서 큰 오버헤드이기 때문에 운영체제의 속도개선을 위한 알고리즘으로 등작한 것이 TLB(Translation-Lookaside Buffe)이다.
위 그림처럼 CPU에서 명령을 수행하는 과정에서 가상메모리 주소를 실제주소로 변환하는 과정을 담당하는 MMU(Memory Management Unit)은 TLB를 참조한다. |
가상주소변환은 아래와 같은 알고리즘으로 이루어진다.
-
VPN = (VirtualAddress & VPN_MASK) >> SHIFT 2
-
(Success, TlbEntry) = TLB_Lookup(VPN)
-
if (Success == True) // TLB HIT!
-
if (CanAccess(TlbEntry.ProtectBits) == True)
-
Offset = VirtualAddress & OFFSET_MASK
-
PhysAddr = (TlbEntry.PFN << SHIFT) | Offset
-
AccessMemory(PhysAddr)
-
else
-
RaiseException(PROTECTION_FAULT)
-
else // TLB MISS;
-
PTEAddr = PTBR + (VPN * sizeof(PTE))
-
PTE = AccessMemory(PTEAddr)
-
if (PTE.Valid == False)
-
RaiseException(SEGMENTATION_FAULT)
-
else if(CanAccess(PTE.ProtectBits == False))
-
RaiseException(PROTECTION_FAULT)
-
else
-
TLB_Insert(VPN, PTE.PFN, PTE.ProtectBits)
-
RetryInstruction()
위 알고리즘은 크게 아래와 같이 동작한다.
가상메모리주소에서 VPN을 추출한다 .VPN이 TLB에 존재하는지 TLB를 검사.VPN이 TLB에 있다면 TLB HIT이다. 해당 페이지에 대한 접근 권한 검사까지 성공하면 그 정보와 가상주소의 offset을 합쳐서 원하는 물리메모리주소를 얻을 수 있다.만약 VPN이 TLB에 없다면 TLB MISS이다. TLB MISS가 되면 하드웨어가 페이지테이블에 접근하여 변환정보를 가져오고가상메모리가 유효하고 접근권한검사까지 성공해야 해당 변환 정보를 TLB로 읽어온다. TLB가 갱신되면 명령어를 재실행하게 되며 이 때는 메모리참조가 빠르게 발생한다.
위의 과정을 보면 TLB MISS가 발생된다면, 물리적 메모리에 접근해서 통패 페이지테이블에 접근해서 변환된 정보를 가져오고 이를 가상메모리로 변환한 다음 이 가상메모리가 유효하고 접근권한검사에 문제가 없을 경우 TLB로 해당 정보를 가져 올 수 있다. 이것이 TLB MISS가 가지는 오버헤드다. 이 오버헤드를 TLB FLushing이라고 한다.
즉, TLB FLushing이란 process간 context switching 시에 발생하는 TLB miss 로 인해 발생하는 오버헤드를 말한다. 이를 방지하기 위해서 우리는 프로세스에 ID를 주어서 TLB 영역을 구분하고, 이를 통해서 필요한 영역만 flush하는 방식으로 flush를 최소화해서 오버헤드를 방지한다.
하지만 이러한 방식은 의도치 않게 cache에 정보가 남아 있게 되어서, 전혀 다른 페이지 테이블을 가지고 있는 서로 다른 프로세스들 간의 정보를 노출하는 Side Channel이 되기도 한다.
'▶ Computer Science' 카테고리의 다른 글
UID, EUID, RUID (0) | 2020.07.01 |
---|---|
MMU(Memory management unit) 가상메모리, 물리메모리 변환 과정 (0) | 2020.06.30 |
파일시스템(File System) (0) | 2020.02.06 |
응용프로그램과 프로그램 실행원리 (0) | 2018.11.29 |
운영체제의 정의 및 역할 (0) | 2018.11.27 |