Windows OS
- Windows Large Page 의 사용 가상주소int* p = new int;이때 p 에 담기는 주소는 당연히 물리 주소가 아니며,CPU에서 추가적인 작업이 필요한 가상 주소 입니다. 가상주소 -> 물리주소 변환가상 주소는 사실 다음과 같은 내부 구조를 가지고 있습니다.윈도우즈 x64 기준에서 구조는 다음과 같습니다.| 63 ~ 48 | 47 ~ 39 | 38 ~ 30 | 29 ~ 21 | 20 ~ 12 | 11 ~ 0 || X | PML4 | PDPT | PD | PT | Offset |Offset12bit페이지 내부 위치 (4KB 기준)PT index9bitPage TablePD index9bitPage DirectoryPDPT index9bitPage Directory Pointer TablePML..
- 윈도우즈 커널에서의 컨텍스트 스위치 과정 윈도우즈 커널에서의 컨텍스트 스위치 과정 - 2026/01스레드 스케쥴링OS내에는 많은 수의 스레드가 있고, 이 스레드는 돌아가면서 CPU를 사용합니다. 실제로 스레드 스케쥴링은 유저 모드에서 커널 모드로 전환되고 커널 코드를 수행함으로서 이루어집니다.퀀텀시간과 우선순위모든 스레드는 퀀텀(Quantum) 이라고 불리는 시간 단위를 가집니다. 이는 KTHREAD라고 불리는 커널 구조체에 포함 됩니다. 선점되거나, 커널 디스패처가 포함되는 API(WFSO, Sleep)등을 호출하지 않는다면, 스레드는 코어를 해당 시간 만큼 점유합니다.스케쥴러(Scheduler)와 디스패처(Dispatcher) 현재 실행 중인 스레드의 상태가 Running에서 Ready로 바뀌는 경우가 있습니다. 퀀텀을 모두 소진하거나, 다..
멀티스레드 프로그래밍
- MPMC Lock-free Queue (List + CAS Loop, RefCount) 의 구현 MPMC Lock-free Queue (List + CAS Loop, RefCount) 의 구현 - 2026/01 본 포스팅은 C++ Concurrency In Action 2E 를 참고하였습니다.주의) 다만, 구현된 코드는 참조 카운트 집계 방식에서 개조를 했습니다. (방식은 비슷합니다.)ABA 회피, Dangling Pointer 방지를 위한 참조 카운트 구현에 대한 내용은아래 포스팅에 있습니다.https://so-what-93.tistory.com/108 작업을 진행 " data-og-host="so-what-93.tistory.com" data-og-source-url="https://so-what-93.tistory.com/108" data-og-url="https://so-what-93.tis..
- MPSC Queue (List, Lazy Update) 의 구현 MPSC Queue (List, Lazy Update) 의 구현 - 2026/01매우 간단한 방식의 MPSC Lock-free Queue 입니다.- Enqueue시의 작업이 훨씬 간단합니다.- Enqueue시 각기 다른 old tail에 대한 소유권을 단 하나의 스레드만 가집니다.따라서, Tail 에 대한 CAS Loop 를 사용하지 않아도 됩니다. 1) Tail을 업데이트 하고(소유권 획득),2) 이전 노드의 Next를 업데이트 합니다.2)의 작업이 끝나야만 Consumer 가 관측이 가능합니다. 사용 케이스 Lock Convoying 을 회피하고, 동시에 Busy waiting 도 피하고 싶은 경우에 사용합니다.객체간 메시지 전달을 큐로 구현, 메시지 처리는 싱글 스레드가 하는 경우특히 Actor ..
컴퓨터시스템
- 가상 주소 변환 / TLB 가상 주소 변환 / TLB MMU (Memory Management Unit) 다중 프로세스 운영체제에서 프로세스는 저마다의 VMS (Virtual Memory Space) 를 가집니다.프로그램 수준에서의 명령어는 모두 가상주소 기반입니다.즉, Execution Unit 에서 사용되는 주소가 모두 가상 주소고,실제 물리주소로의 변환 및 접근은 MMU라는 장치가 담당하게 됩니다. CR3 레지스터와 변환 과정가상 주소에서 물리주소로 변환시 가장 먼저 사용되는 장치는 CR3 레지스터 입니다.운영체제는 컨텍스트 스위치시 이 CR3 레지스터의 값을 바꿉니다.이 CR3 레지스터의 값을 시작으로, 가상함수의 각 비트셋을 이용한 몇번의 테이블 참조가 이루어 집니다각 엔트리에서의 8바이트 내부에는 하위 엔트리의 주소를 ..
- 분기 예측 분기 예측파이프라이닝 프로세서 & 분기 예측 컴퓨터 프로그램에서 조건식은 매우 자주 등장합니다.프로세서의 파이프라인에서 이전 명령어의 처리 단계가 어떤 단계이던상관 없이 다음 명령어를 인출하는 것이 끊김 없이 진행되어야 하는데,후에 실행될 명령어의 지점을 알기 위해서는 조건식에 대한 연산을필연적으로 기다려야 하는 상황이 자주 발생할 수 있게 되는 것입니다. (컨트롤 해저드) 이런 상황에 대처하기 위해서 사용되는 방식이 분기 예측 (branch prediction) 입니다. 목적지가 바로 보이느냐 ? -> 직접 분기 & 간접 분기직접 분기 (Direct Branch)프로그램 명령어가 조건 분기 목적지를 직접 가리키는 경우입니다.즉, 명령어만 보고도 후의 선택지가 명료한 경우를 이야기 합니다.if / els..