MESI

    멀티코어 확장성을 위한 Queue기반 Lock (w/ chatgpt)

    멀티코어 확장성을 위한 Queue기반 Lock (w/ chatgpt)

    🧠 왜 Queue 기반 락이 필요할까?기본적인 스핀락(spinlock)은 이렇게 생겼어:while (lock == 1) { // 락이 풀릴 때까지 busy-wait}문제점:여러 스레드가 같은 메모리 위치를 동시에 조회하고 수정하려고 함 → cache line bouncing특히 락 경합이 심할 때 성능이 급격히 떨어짐 😵‍💫해결책: 각 스레드가 자기만의 스핀 공간을 가지게 하고,앞의 스레드가 끝날 때까지 조용히 기다리자!바로 이게 Queue 기반 락의 핵심 개념이야.🔗 대표적인 Queue 기반 락✅ CLH 락 (Craig, Landin, and Hagersten Lock)특성설명Queue단일 연결 리스트 형태의 논리적 큐Spin 위치자기 전 노드의 상태를 스핀공유 변수 접근 최소화false ..

    Test-and-Set (TAS) 와 Compare-and-Swap (CAS) 차이점 (w/ chatgpt)

    Test-and-Set (TAS) 와 Compare-and-Swap (CAS) 차이점 (w/ chatgpt)

    🔍 1. Compare-and-Swap (CAS)"값이 기대한 값이면 바꾸고, 아니면 바꾸지 마!"동작 방식:bool compare_and_swap(int* addr, int expected, int new_val) { if (*addr == expected) { *addr = new_val; return true; } return false;}addr == expected → true면 new_val로 바꿈아니면 아무 것도 하지 않음원자적으로 실행됨 (CPU instruction or atomic primitive)🧠 사용 예:lock-free 자료구조 (스택, 큐)atomic compare → 실패하면 retry loop예: std::atomic::comp..

    멀티코어에서 캐시 일관성 프로토콜. (w/ chat-gpt)

    멀티코어에서 캐시 일관성 프로토콜. (w/ chat-gpt)

    🧠 왜 캐시 일관성이 필요할까?멀티코어 시스템에서는 각 CPU가 자기만의 캐시 (L1, L2 등)를 갖고 있고,공유 메모리(RAM)는 느리기 때문에 캐시에 데이터를 복사해서 작업함.근데! 문제가 발생할 수 있어:CPU1: 변수 x = 0 → 캐시에 복사CPU2: 변수 x = 0 → 캐시에 복사CPU1: x = 42 // 캐시에서 변경CPU2: x 를 읽음 → 여전히 0임?! ❌같은 주소인데 캐시마다 다른 값을 갖게 됨 → 일관성 깨짐이걸 방지하려고 등장한 게 바로 캐시 일관성 프로토콜!💡 대표적인 프로토콜: MESI 프로토콜가장 유명하고 널리 쓰이는 프로토콜이야.각 캐시 라인(cache line)이 가질 수 있는 상태를 정의함:상태의미Modified내가 가진 캐시가 최신이며, 메모리와는 다름 (di..