목록전체 글 (121)
변수의 기록

CPU 스케줄러와 디스패처, 그리고 스케줄링 알고리즘 총정리 CPU 스케줄러란?역할: CPU를 어떤 프로세스가 사용할지 선택동작: Ready 상태에 있는 프로세스들 중 하나를 선택하여 CPU에 할당대상: Ready Queue에 있는 프로세스들예: Ready Queue: P1, P2, P3 스케줄러가 P2를 선택 → 실행 준비 완료 디스패처(Dispatcher)란?역할: 스케줄러가 선택한 프로세스를 실제 CPU에 할당하고 실행세부 기능:컨텍스트 스위칭 수행사용자 모드로 전환 (커널 → 유저 모드)프로그램 카운터와 레지스터 설정예: P2를 스케줄러가 선택함 → 디스패처가 CPU에 할당 → P2 실행 시작 선점(Preemptive) vs 비선점(Non-Preemptive) 비선점 (Non-Preemp..
1. 스레드 덤프란?스레드 덤프는 실행 중인 자바 애플리케이션의 모든 스레드 상태를 출력한 스냅샷이다.서버에서 응답 지연, 무한 대기, CPU 사용률 급증, 데드락 등이 발생했을 때, 그 원인을 파악하기 위한 주요 도구로 사용된다.스레드 덤프를 분석하면 다음을 확인할 수 있다:현재 어떤 스레드가 실행 중인지어떤 스레드가 락을 점유하고 있는지, 어떤 스레드가 락을 기다리고 있는지데드락 여부 및 락 경합 병목 구간2. 스레드 덤프 생성 방법2.1 jstack 명령어 (권장)jps # 현재 실행 중인 Java 프로세스 ID 확인jstack # 스레드 덤프 출력jstack > threaddump.txt # 파일로 저장2.2 kill -3 (Linux/UNIX/macOS)kill -3 ..

자바 스레드의 상태 – OS 프로세스와 어떻게 다를까?멀티스레드 프로그래밍을 하다 보면, Runnable, Blocked, Waiting 같은 자바 스레드 상태들이 헷갈릴 수 있습니다.운영체제(OS)의 프로세스 상태와도 비슷한 듯 다른 이 구조, 이번 글에서 명확하게 정리해보겠습니다.1. OS의 프로세스 상태 (Process States in OS)운영체제에서 프로세스는 기본적으로 다음과 같은 상태를 가집니다: 상태설명New프로세스가 막 생성됨 (아직 실행 준비 X)Ready실행 준비 완료, CPU 할당을 기다림RunningCPU에서 실행 중Waiting (Blocked)I/O 등 외부 자원을 기다리며 대기Terminated실행 완료 후 종료됨 특징:CPU 중심적인 상태 변화실행 준비 / 실행 중 / ..

데드락(Deadlock) 정리 – 원인과 해결 방법**데드락(교착 상태)**은 둘 이상의 프로세스나 스레드가 서로가 점유한 리소스를 기다리며 무한 대기하는 상태를 말합니다. 이런 상황은 시스템 자원을 병렬로 사용하는 환경에서 자주 발생할 수 있어, OS 수준의 제어가 필요합니다. 도로는 리소스 차는 프로세스 조건1.각 차들은 2개의 도로(숫자) 리소스를 가져야함.가지려다가 두번쨰 사진처럼 교착상태를 마주하게 됨. 이것이 데드락. 🧩 데드락 발생의 4가지 조건데드락은 아래 4가지 조건이 모두 충족될 때 발생합니다. 하나라도 깨지면 데드락은 발생하지 않습니다. 조건설명예시1. Mutual Exclusion (상호배제)리소스는 하나의 프로세스만 점유 가능(공유x)프린터, 락(lock)2. Hold..

1. 모니터(Monitor)란?정의: 모니터는 **상호배제(Mutual Exclusion)**와 **조건 동기화(Conditional Synchronization)**를 제공하는 고수준 동기화 추상화.주요 구성 요소:뮤텍스 락(Mutex Lock): 임계 구역(Critical Section)에 동시에 하나의 스레드만 들어갈 수 있도록 함.엔트리 큐(Entry Queue): 락을 얻기 위해 대기 중인 스레드들이 대기.컨디션 변수(Condition Variable): 특정 조건을 기다리는 스레드들이 대기하는 공간.웨이팅 큐(Waiting Queue): 컨디션 변수를 통해 조건을 기다리는 스레드들이 들어감. 상황 1 - producer 에서 item을 넣어주고 consumer에서는 꺼내 씀조건 - 1. bu..
Redis 이관 작업 중 발생한 이슈 회고최근 진행한 Redis 이관(eos) 작업 중 예상치 못한 큰 이슈를 겪었다. 인프라 구조 변경과 관련된 중요한 경험이었기에 회고를 통해 공유하고자 한다.🧩 상황 배경우리 시스템에서 Redis 클러스터를 새 서버로 이관하는 작업을 진행했다. 이관 작업 전, 인프라 관리자와의 의사소통 오류로 기존 데이터를 복제하지 않고 새로운 Redis 서버로 전환하는 치명적인 실수가 발생했다.즉, 단순히 Redis 클러스터의 IP만 변경하고 시스템을 실행한 것이다. 그 결과, 기존에 Redis에 저장되어 있던 데이터들은 새 클러스터에는 없었고, 정상적으로 조회되어야 할 값들이 모두 null로 반환되는 심각한 장애가 발생했다.🔥 문제의 전개데이터 복제가 안 된 상태에서 이관Re..
2025년 04월 7일LOCK 동기화 공부 ✅ 1. 레이스 컨디션 (Race Condition)여러 스레드(또는 프로세스)가 동시에 공유 자원에 접근할 때,실행 순서에 따라 결과가 달라지는 예측 불가능한 상황📌 예시 (공유 변수 증가):int counter = 0; Thread A: counter++;Thread B: counter++; 두 스레드가 거의 동시에 counter++를 실행하면,실제 결과는 1이 될 수도 있음 (정상은 2여야 함)➡ 데이터의 일관성, 정확성이 깨짐✅ 2. 동기화 (Synchronization)여러 스레드나 프로세스가 공유 자원에 올바른 순서로 접근하도록 제어하는 것레이스 컨디션을 방지하기 위한 필수 메커니즘올바른 동기화 없이는 공유 자원 보호 불가능➡ 락(lock), 세마포..

✅ [1] Spinlock (스핀락)🔹 개념락이 풀릴 때까지 계속 루프 돌며 기다리는 방식test_and_set() 같은 원자적(atomic) 명령어 사용CPU가 제공하는 하드웨어 수준의 atomic 연산을 통해 동기화가 이뤄짐🔹 핵심 특징빠르게 락이 풀릴 거라고 예상될 때 유리락이 오래 걸리면 busy-waiting으로 CPU 낭비 심함멀티코어 환경에서만 유리 🔹 Java에서?Java는 직접적인 스핀락 지원은 없음→ AtomicBoolean + 루프로 유사하게 구현 가능 → 또는 LockSupport.park() + CAS 활용으로 구현 ✅ [2] Mutex (뮤텍스)🔹 개념상호배제를 위한 소유권 있는 락락을 얻은 스레드만 해제할 수 있음Java에선 ReentrantLock, synchroni..