목록2025/04 (40)
변수의 기록

유저 모드와 커널 모드, 그리고 인터럽트와 시스템 콜1. 유저 모드 vs 커널 모드모던 운영체제는 CPU의 실행 권한을 **유저 모드(User Mode)**와 **커널 모드(Kernel Mode)**로 나눔.이유는 운영체제와 시스템 자원을 보호하기 위함임.유저 모드애플리케이션(사용자 프로그램)이 실행되는 환경CPU는 제한된 명령어만 사용 가능직접 하드웨어 접근 불가 (예: 디스크, 메모리 제어, 네트워크 등)문제가 발생하더라도 시스템 전체에는 영향을 미치지 않음커널 모드운영체제의 핵심인 커널이 실행되는 환경CPU는 모든 명령어 실행 가능 (하드웨어 제어 포함)시스템 자원 관리 (메모리, CPU 스케줄링, 파일 시스템 등)모든 프로세스의 보호와 보안을 책임짐2. 모드 전환 (유저 모드 → 커널 모드)유저 ..

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), 세마포..