유저 공간에서 생성된 프로세스는 여러 개 쓰레드를 생성합니다. 이 쓰레드들이 같은 디바이스 노드에 접근해서 시스템 콜을 발생하며 커널과 통신합니다. fork() 라는 함수를 유저 공간에서 시스템 콜로 호출하면 유저 공간에서 sys_clone()이란 함수 호출로 프로세스를 생성합니다. 유저 공간에서 open(), write() 그리고 ioctl() 이란 함수를 호출하면 이에 대응하는 시스템 콜을 호출해서 커널 공간과 통신합니다. 이번에는 시스템 콜 관련 함수에서 발생한 레이스 컨디션을 확인합니다. 먼저 패치 코드를 소개하겠습니다.1 diff --git a/kernel/exit.c b/kernel/exit.c2 --- a/kernel/exit.c3 +++ b/kernel/exit.c4 @@ -760,10 +