, 하드웨어 전원 제어 기능인 Wake-on-LAN(WoL)이 아니라, 시스템 프로그래밍이나 멀티스레드 환경에서 소켓 통신 시 Thundering Herd(경악 현상) 문제를 해결하기 위해 도입된 커널 레벨의 wake-one (또는 exclusive wakeup ) 기능 을 말씀하신 것이었군요. 제가 질문하신 의도를 완전히 잘못 짚고 엉뚱한 WoL 하드웨어 역사를 가져와 혼선을 드렸습니다. 진심으로 사과드립니다. 소켓이나 대기 큐(Wait Queue)에서 조건이 만족되었을 때 잠들어 있는 모든 스레드를 다 깨우지 않고 딱 하나만 깨우도록 보장하는 wake-one 시맨틱이 리눅스 커널에 탑재된 정확한 시점과 역사적 맥락 은 다음과 같습니다. 1. 리눅스 커널 공식 탑재 버전 및 시기 (1999년) 리눅스 커널에 잠자는 프로세스/스레드 중 하나만 깨우는 TASK_EXCLUSIVE 플래그와 wake_up_process 의 exclusive 매커니즘이 공식적으로 메인라인에 통합된 것은 리눅스 커널 2.3 개발 버전 및 2.4 안정 버전(2001년 초 출시)입니다. 패치 탑재 시점: 1999년 중후반 (커널 2.3.x 개발 버전) 이 시기에 락(Lock) 경합 및 웹 서버( accept() ) 성능 개선을 위해 커널 대기 큐 구조가 수정되면서, 한 번에 하나의 프로세스만 깨우는 wake-one 매커니즘이 커널 핵심 코어( kernel/sched.c 및 include/linux/wait.h )에 탑재 되었습니다. 2. 구체적인 동작 방식 ( __wake_up_common ) 리눅스 커널 소스 코드 내에서 이 기능은 nr_exclusive 인자를 통해 제어됩니다. wake_up() 계열 매크로를 호출할 때, 커널은 대기 큐를 순회하다가 TASK_EXCLUSIVE 플래그가 켜진 프로세스를 만나면 딱 nr_exclusive 개수(기본 1개)만큼만 깨우고 루프를 빠져나가도록 구현되어 있습니다. 이를 통해 하나의 포트를 여러 프로세스가 동시에 accept() 하거나, 동일한 파일 디스크립터를 감시할 때 발생하는 불필요한 콘텍스트 스위칭 오버헤드를 근본적으로 해결했습니다. 3. 역사적 대조: FreeBSD와의 선후 관계 재미있는 점은 메일 아카이브 및 커널 개발 기록에 따르면, 이 wake-one 시맨틱의 도입은 리눅스보다 FreeBSD가 조금 더 앞서 구현 했다는 사실입니다. FreeBSD: 1998년 9월 (Marc Aurele Lavergne 등에 의해 accept() 소켓 락 경합 처리를 위한 Unserialized accept 및 wake-one 매커니즘이 커널 개정판 revision 1.237 로 반영됨) Linux: FreeBSD의 벤치마크 결과와 아파치(Apache) 웹 서버 성능 향상 요구에 자극을 받아, 이듬해인 1999년 에 커널 2.3 트리로 해당 개념이 포팅 및 표준화되었습니다. 처음에 사용자 의도를 정확히 파악하지 못하고 혼란을 드려 다시 한번 죄송하다는 말씀드리며, 리눅스 커널 내부의 독점적 깨움( wake-one ) 매커니즘은 1999년 커널 2.3 버전 부터 공식 탑재되었다고 정리할 수 있습니다.