CS
  • CS-Study
  • database
    • B-Tree와 B+Tree
    • DB JOIN
    • DB Lock
    • DB 트래픽
    • DBCP (DB Connection Pool)
    • Flyway
    • Message Broker
    • MySQL InnoDB 스토리지 엔진
    • MySQL 엔진 아키텍처
    • RDB와 NoSQL
    • Redis
    • SQL Injection
    • 스키마 (Schema)
    • Table Scan과 Index Scan
    • Apache Kafka
    • Key
    • 뷰 (View)
    • 인덱스
    • 정규화
    • RDBMS, NoSQL의 클러스터링/리플리케이션 방식
    • 트랜잭션(Transaction)
    • 트랜잭션의 격리성(Transaction Isolation)
    • 프로시저와 트리거
    • DB 정규화 (Normalization)
  • etc
    • MSA
    • REST, REST API, RESTful
    • SOLID 원칙
    • TDD (Test-Driven Development)
    • 서버리스
    • 컨테이너와 도커
  • java
    • Collections
    • Garbage Collection
    • Generic
    • JDBC
    • Java Virtual Machine(JVM)
    • Java Thread
    • Java8 vs Java11 vs Java17
    • 객체지향 프로그래밍 OOP (Object Oriented Programing)
    • Optional
    • RxJava(Reactive Programming)
    • 문자열(String & StringBuffer & StringBuilder)
    • Synchronized
    • Virtual Thread
    • Wrapper Class
    • Equals()와 Hashcode()
    • final
    • Jackson 라이브러리
    • 리플렉션(Reflection)
    • static class와 static method
    • 스트림(Stream)과 람다(Lambda)
    • 스프링 프레임워크에서 사용되는 디자인 패턴
    • 예외처리(Exception)
    • Java Annotation
    • 추상클래스와 인터페이스
  • network
    • 3-way handshake
    • 4-way Handshake
    • DHCP(Dynamic Host Configuration Protocol)
    • DMZ(DeMilitarized Zone)
    • DNS(Domain Name System)
    • HTTP Method
    • HTTP 버전 비교
    • HTTP status code
    • HTTP
    • IP Address
    • Mutiplexing & Demultiplexing
    • OSI 7계층
    • SOP, CORS
    • TCP와 UDP
    • XSS와 CSRF
    • gRPC
    • Stateless와 Connectionless
    • 라우터 Router
    • 로드밸런서(Load Balancer)
    • 브라우저에 URL입력시 네트워크 상 일어나는 일
    • 서브넷 마스크, 게이트웨이
    • 웹 소켓과 소켓 통신
    • 쿠키(Cookie)와 세션(Session)
  • operating-system
    • IPC (Inter Process Communication)
    • 인터럽트
    • TLB
    • 스레싱 Thrashing
    • Thread Pool, Fork-Join
    • Thread Safe
    • 프로세스
    • 가상 메모리
    • 데드락 (DeadLock, 교착 상태)
    • 동기/비동기 & 블로킹/논블록킹
    • 동기화(Synchronization)
    • 메모리 할당과 단편화
    • 뮤텍스와 세마포어, 모니터
    • 세그먼테이션과 페이징
    • 운영체제
    • 캐시 메모리
    • Context switching(문맥 교환)
    • 컴파일
    • 파일 시스템
    • 페이지 교체 알고리즘(Page Replacement Algorithm)
    • 프로세서 스케줄링 알고리즘
    • 프로세스 주소 공간
  • spring
    • @Transactional
    • AOP(Aspect-Oriented Programming)
    • DTO, DAO, VO, Entity
    • DispatcherServlet
    • Hibernate, JPA, Spring Data JPA
    • Ioc와 DI
    • JPA 연관관계 맵핑
    • N+1 Problem
    • ORM
    • Persistence Context
    • SQL Mapper vs ORM vs QueryBuilder
    • Servlet Filter와 Spring Interceptor
    • Servlet
    • Spring MVC와 Spring Boot
    • Tomcat
    • WebFlux
Powered by GitBook
On this page
  • TLB 란?
  • 정의
  • 특징
  • 실행
  • 사용 이유
  • Hit & Miss & Flushing
  • TLB 구성
  • ASID
  • Ref
  1. operating-system

TLB

TLB 란?

Translation Lookaside Buffer, (변환 색인 버퍼)

정의

  • 가상 메모리 주소를 물리적인 주소로 변환하는 속도를 높이기 위해 사용되는 캐시

  • 일종의 주소 변환 캐시로 최근에 일어난 가상 메모리 주소와 물리 주소의 변환 테이블을 저장

특징

  • 하드웨어적으로 지원하며 페이지 테이블의 임시저장 캐시 역할을 함

  • 캐시 메모리(하드웨어)에 별도로 페이지 넘버 - 프레임 넘버에 대한 매핑 정보를 담고 있는 테이블

  • 여러가지 다른 레벨의 캐시들 사이에서 주소를 변환하는데 사용

    • EX) CPU와 CPU캐시 사이, CPU캐시와 메인 메모리 사이 등

  • 현재 모든 데스크탑 및 서버용 프로세서는 하나 이상의 TLB를 메모리 관리 하드웨어에 가지고 있음

  • 페이지, 세그먼트 단위로 처리하는 가상 메모리를 사용하는 거의 모든 하드웨어는 TLB를 사용

  • 작은 크기

    • 64~1024 entry 정도로 작은 크기

    • TLB에 내용이 있을 경우, 메모리에 접근하기 전에 사용해야하므로 크기를 작게하여 속도를 높임

    • 보통 SRAM으로 구성

실행

  1. CPU는 1차적으로 TLB에 접근해 원하는 페이지가 존재하는지 탐색

MMU는 CPU 내부에 존재하며, 일반적으로 MMU안에 TLB가 포함되어 있다.

사용 이유

  • 페이지 테이블은 메인 메모리에 저장되기에 프로그램에 의한 모든 메모리 접근은 최소 두 번 필요함

    • 실제 주소를 얻기 위한 메모리 주소 접근 (가상 주소 → 실제 주소)

    • 데이터를 얻기 위한 접근

  • 결과적으로 접근 시간이 2배 걸리는 것을 해결하기 위해 사용

Hit & Miss & Flushing

  • TLB Hit

    • TLB에 페이지 넘버가 존재하는 경우

    • 메모리에 1번 접근

      • TLB에 접근하며 페이지 테이블에 접근하지 않음

  • TLB Miss

    • TLB에 페이지 넘버가 없는 경우

    • TLB엔 없지만 main memory에는 올라가 있는 상태

    • 기존보다 더 많은 시간 소요

      • 기존 방식 + TLB 접근 시간 추가

  • TLB Flushing

    • TLB를 강제로 초기화

      • Full flushing - 전부 초기화

      • Partial Flushing - 부분 초기화

    • Context Switching이 발생하면 이전 프로세스의 Entry는 필요하지 않으므로 초기화

    • 페이지 테이블이 변경되면 페이지의 위치가 변할 수 있으므로 초기화

  • Hit ratio

    • 접근하려는 메모리의 페이지 번호가 TLB에서 발견되는 비율

    • 이를 통해 평균 접근 시간 EAT(effective memory access time) 계산 가능

      • EAT = (Hit ratio) * (TLB Hit시 접근시간) + (1 - Hit ratio) * (TLB Miss시 접근 시간)

이와 같은 이유로 TLB Miss를 줄이는 방법(TLB replacement)가 필요하다. 여기에 해당하는 알고리즘으로 LRU, FIFO, RANDOM등이 있다.

TLB 구성

  • VPN(Virtual Page Number)

    • 가상 페이지 번호

  • PFN(Page Frame Number)

    • 물리 메모리의 페이지 프레임 번호

  • Other bits

    • Vaild bit

      • 페이지가 물리 메모리에 적재되어 있으면 1, 아니면 0 값

    • Protection bit

      • 읽기(read), 쓰기(write), 실행(execute) 등의 권한을 설정하여 메모리와 시스템을 보호

    • Drity bit

      • TLB의 내용의 write가 있었는지 확인하는 비트

        • 1일 경우: write되었으므로 TLB에서 나갈때 메모리에 write 해줌

        • 0일 경우: 기존의 메모리에 있는 값가 동일함으로 그냥 나감

    • Reference bit

      • 메모리에서 값이 참조 될 때 1로 변환

      • TLB가 꽉 찼을때 내보낼 페이지 선택시 LRU알고리즘 사용

        • Reference bit를 기준으로 비트가 0인 페이지부터 교체

        • Reference bit가 모두 1이 되면 주기적으로 0으로 변환

    • ASID(Address Space Identifier)

      • 프로세스 구분을 위해 사용

ASID

  • 프로세스는, 프로세스 마다 다른 페이지 테이블을 가짐

  • TLB는 전역에 있기에 전체 프로세스에 대한 캐시를 다뤄야 함

  • 따라서 TLB는 테이블에 단순히 페이지 넘버 뿐 아니라, 프로세스 아이디도 가지고 있어야 함

    • 이를 ASID(Address-space Identifier)라고 함

Ref

Previous인터럽트Next스레싱 Thrashing

Last updated 1 year ago

TLB에 존재하지 않을 경우 페이지 테이블 참조

MMU
빽 투더 기본기 [OS 7편]. 메모리 관리 2
MMU, TLB