기아 상태 (Starvation) 발생 방지 - 희생자 횟수 제한

핵심 인사이트 (3줄 요약)

  1. 본질: 교착 상태를 복구(자원 뺏기)할 때 비용 공식(Min Cost)이 철저하게 최적화될수록, 매번 데드락이 터질 때마다 재수 없이 똑같이 싼 비용의 타겟 1명만 계속 핀포인트로 희생되어 영원히 자원을 못 잡고 굶어 죽어가는 **기아 역병(Starvation)**을 원천 차단하는 브레이크 메커니즘이다.
  2. 가치: "네가 싼놈이건 뭐건 아무튼 3번 이상 두들겨 팼으면 이젠 면제권 주고 VIP로 살려준다(희생 카운터 누적 룰)!"는 도덕적 수식을 추가하여, 전체 시스템의 데드락 이기주의로 인해 특정 스레드만 홀로 고독하게 프로세스 누수에 빠져 엿먹는 부작용을 막아낸다.
  3. 융합: 이는 데드락 자체의 해결책은 커녕 되려 희생 비용 단가 연산을 비싸게 오염시키는 잡음이지만, 멀티 태스킹 환경 공정성(Fairness)이라는 OS 최고 철학 달성을 위해 기존 Victim Selection 공식 안에 필수 가중치 보정값(Modifier) 파라미터로 철저하게 융합된다.

Ⅰ. 개요 및 필요성

너무 똑똑한 OS가 있다 치자. 교차로에서 4대가 멱살 잡고 데드락 떴을 때 최소 비용(Min Cost) 수식을 적용해 무조건 똥차(가벼운 프로세스)인 A를 강제로 후퇴(Rollback)시켰다. 차 빼준 A 때문에 고급 벤츠 B, C, D는 신나게 고속도로를 갈 길 간다. 어리둥절하게 후진했던 똥차 A는 다시 자기 차례를 노리고 교차로로 대가리를 밀었다. 근데 하필 타이밍이 X같아서 이번엔 E, F, G랑 또 4대가 얽혀 데드락이 터진다.

이때 똑똑한 OS 공식이 다시 뇌를 굴린다. "음 EFG는 벤츠네? A 똥차! 또 네 녀석이 여기서 비용 점수 제일 만만하다. 야 넌 뒤로 후퇴 롤백해 임마!" ... 이런 식으로 세상의 모든 데드락 십자포화를 혼자 독박 쓰고 A는 100년 내내 후퇴 롤백-재시작-롤백을 무한 루프 반복하며 평생 실행을 끝마치지 못하는 병, 이게 바로 **데드락 조치가 낳은 부작용 기아(Starvation)**다.

💡 비유: 교실의 불량배(데드락 락)가 돈(자원)을 뺏을 희망의 먹잇감을 찾을 때 "가장 안경 쓰고 작고 만만한 놈(최소 비용 희생양 타겟)"을 설정했다. 안경 쓴 철수는 월요일 삥 뜯기고(롤백 당함), 화요일도 지목당해 삥 뜯기고, 수요일도 타겟팅 당해 평생 빵집을 못 간다(기아 굶어죽음). 이 고리를 끊으려면 시스템(경찰)이 개입해서 "야 철수 3번 뜯겼으니 이젠 철수 건드리지 마!(기아 방지 카운터)" 쉴드를 쳐 줘야 한다.

┌────────────────────────────────────────────────────────────────┐
│         연쇄 롤백의 독, 기아(Starvation) 예방 쉴드 튜닝        │
├────────────────────────────────────────────────────────────────┤
│                                                                │
│  [기존의 비인간적 효율 1순위 비용 공식]                        │
│  Cost = α(여태까지 실행된 시간) + β(보유 자원량)               │
│  ▶ 문제: '실행된 시간'이 낮은 뉴비는 계속 채점 1등으로 죽어남. │
│                                                                │
│  [기아 방지 쉴드판이 융합된 진화 채점(Counter 추가)]           │
│  Cost = α(실행시간) + β(자원량) + γ(★지금까지 롤백당한 횟수)   │
│                                                                │
│  ▶ 결과 조율:                                                  │
│  OS: "야 쟤 방금 튼 뉴비라 싸니까 한 번 더 죽이자."            │
│  내면: "잠깐! 쟤(Rollback_Count 탑재)는 뉴비지만 벌써          │
│         5번이나 희생당해서 분노 게이지 카운터(γ) 점수가        │
│         엄청 커졌어! 이젠 죽방 비용이 남들보다 비싸!"          │
│  OS: "아 진짜? 쟤 많이 맞았구나. 미안, 이번 데드락에선         │
│       쟤는 면제, 딴 놈 잡아 족쳐!" (기적적인 회생, 기아 파괴)  │
└────────────────────────────────────────────────────────────────┘

📢 섹션 요약 비유: 오로지 '효율 최적화 공리주의'만 쫓던 인공지능이 "계속 희생당한 저 불쌍한 사람에게 도의적인 딱지 보너스 점수(카운터)를 얹어주어 한 번쯤은 살려 보내주는 감성적 공정(Fairness)"을 부여하는 고퀄리티 채점 튜닝입니다.


Ⅱ. 아키텍처 및 핵심 원리

Victim 횟수 카운터 기반 가중치 부여 (Max-Retries Limit)

OS와 DBMS의 스케줄러 락 대기 모듈 깊숙이 Rollback Count 변수가 이식되어 있다.

  1. Rollback Counter 적립 (PCB / Transaction ID): 특정 스레드가 교착 복구를 위한 Victim(희생자 선점 타겟)으로 지명되어 롤백당할 때마다, 그 스레드의 메타데이터인 카운터 블락 숫자를 1씩 징벌적으로 증가(++)시켜 준다.
  2. Cost Function 교란 방어선 (Threshold Aging):
    • 데드락 피해 평가 시, 원래 자원이 가장 적고 어려서 10점(제일 쌈=죽임)인 타겟이라도 이 카운터 숫자가 X값 오버 플로우되면 가산점이 부여돼 100만 점(죽이면 안 됨 VIP)으로 둔갑한다. 흔히 에이징(Aging) 기법의 변형판 튜닝이다.
  3. 무사 탈출 시 카운터 초기화: 천신만고 끝에 데드락을 뚫고 연산을 마쳐 자원을 뱉어내면, 이 억울함 카운터는 0으로 리셋되며 소멸한다.

📢 섹션 요약 비유: 너무 많이 맞아서 맷집 게이지(카운터 포인트)가 꽉 차서 붉은 아우라가 도는 유닛은 데드락 복구 머신조차도 다시는 때리지 못하도록, 수식에 무적 쉴드 파라미터 변수(Rollback Count)를 붙여 시스템 약자를 보호합니다.


Ⅲ. 융합 비교 및 다각도 분석

상태 및 징후교착 상태 (Deadlock)기아 상태 (Starvation)
발생의 근원여러 프로세스가 원을 그려 뻗음(구조적 참몰)데드락 조치하려고 한 놈만 팼더니 생김 (부작용)
피해 범위 구분여러 개의 스레드 집단 전체가 동시 마비됨운 나쁜 딱 특정(1개) 프로세스 하나만 영원히 잠수 탐
해결 열쇠 지점OS가 하나 죽이거나, 뺏거나 (복구 파괴술)타겟 공식에 희생당한 카운터(Aging) 더하기

📢 섹션 요약 비유: 데드락은 "다들 차가 엉켜 움직이지 못하는 집단 마비 교통사고" 이고, 기아 상태는 경찰관 교통지도가 이상해서 "내 차 딱 하나만 맨날 양보해야 해서 영원히 집으로 못 가는 소외 현상"입니다. 방어의 타깃 포인트가 아예 다릅니다.


Ⅳ. 실무 적용 및 기술사적 판단

실무 시나리오:

  1. RDBMS InnoDB 데드락 재시도 큐 관리 (Retry Backoff): 트랜잭션 롤백 카운터 로직까지 DB 내부에 덕지덕지 바르면 커널 오버헤드가 좀 커진다 판단하여, 현대 앱 서버(Spring 프레임워크) 단에서 재시도할 때 이 개념을 차용한다. 한 세션이 데드락 희생자로 선정되어 튕겨(Rollback) 나왔다? 다시 재시도 찌를 때 Thread Sleep(5ms * Count) 방식을 주거나 지수 백오프(Exponential Backoff)로 아예 다른 타이밍 우주 좌표계로 프로세스 진입 시간을 비틀어 밀어 넣어 애초에 동일 데드락 놈들과 다시 멱살을 잡지 못하게 우회 기폭 시켜 기아를 뜯어낸다.

안티패턴:

  • 비용 공식을 카운터만능주의로 지배(오버 웨이팅): 기아 방지하겠다고 "네가 비록 10만 개 자원을 잡은 대지주 트랜잭션이라도 무조건 한 번 데드락 롤백 터졌으니 너 보호해(Aging Priority) 줌!" 이라 세팅해놓으면? 그 대규모 쓰레기가 똥고집을 부리게 되어 나머지 전체 서버 자원 스케줄링이 그놈 하나 살리자고 꽉 막히는 기형적(Utilization 박살) 역순환이 벌어진다. 모든 건 조율(Tuning)이다.

📢 섹션 요약 비유: 너무 약자를 보호한답시고 (한번 롤백 터진 애 무조건 생존), 반대로 걔가 고집부리며 다른 정상인 100만 명 앞길 막는 똥차(병목)로 변신하게 놔둔다면 그건 또 다른 전체 시스템 범죄입니다. 점수 파라미터는 저울 위의 칼등처럼 맞춰 둬야 합니다.


Ⅴ. 기대효과 및 결론

기준Victim Selection 단독 운용Victim Selection + 카운터(기아 쉴드) 기법 융합
철학의 완성도차가운 공리주의 최적화 (가장 싼 놈아 영원히 죽어)공정성(Fairness)을 포섭한 완강한 동시성 제어 생태계
성능적 함의롤백 비용 수치가 가장 가벼워 시스템 오버헤드는 거의 0횟수를 트래킹할 메타 데이터 증폭, 간접적 오버헤드

기아 상태(Starvation)는 아이러니하게도 데드락을 스마트하고 효율적으로 풀려던 'Victim Selection 최적 공식'의 결벽증이 스스로 낳은 골치 아픈 변종 바이러스였다. 하지만 엔지니어들은 이마저도 **희생 카운팅 임계치 배리어(Aging Threshold)**라는 고도화된 점수 융합 변수를 다시 찔러 넣으면서, 가장 가벼운 희생양의 죽음이라는 최소 손실과 누구나 언젠간 기회를 얻어 끝마칠 수 있다는 완벽한 평등성 모두를 지배하는 스케줄링 예술로 승화시켜냈다.


📌 관련 개념 맵

개념관계
에이징 (Aging 기법)기아 상태(Starvation)를 격파하는 컴퓨터 공학의 절대 반지. 늙어갈수록 대기 횟수가 높을수록 가점 팍팍 충전!
희생자 선택 (Victim Selection)왜 애초에 아무 데드락 죄도 없는 철수가 기아에 걸리도록 한 놈만 패는지 원흉을 만든 최소 비용 수학 공식
스케줄러 공정성 (Fairness)OS가 시스템 쓰루풋(효율) 만큼이나 반드시 챙겨야 할 "모든 쓰레드는 차별 치 말고 언젠간 끝마치게 해라"는 종속 법안

👶 어린이를 위한 3줄 비유 설명

  1. 얽힌 애들 4명 중에 덩치가 가장 작고 만만한 막내(최소 비용 타깃)를 골라 과자를 뺏어서 문제를 풀다 보니, 매번 싸움 날 때마다 그 억울한 막내만 계속 뺏겨 밥을 한 끼도 못 먹게 생겼어요(기아 발생).
  2. 그래서 선생님이 "규칙 추가! 아무리 작고 만만혀도 막내가 이미 3번이나 과자를 뺏겼으면, 얘는 불쌍하니까 무적 면제권 방패 씌워주고 절대 건들지 마라!"고 혼 내줍니다. (횟수 제한 방어).
  3. 이렇게 억울한 패널티 점수표를 추가해서 계산하면, 만만한 막내도 다음번에는 안 뺏기고 당당히 맛있는 과자(자원)를 먹고 만세 춤을 출 수 있게 모두가 평등해진답니다!