thread에 대한 질문입니다. (40:45지점)
저도 아는 게 없지만 공부할 겸 이리저리 찾아서 적어봅니다 ... 혹여나 잘못된 점이 있다면 지적해주세요 ! (1) kernel mode, user mode 는 CPU( 프로세서 ) 의 동작 모드입니다 . CPU 상에서 OS 가 처리될 땐 , 즉 CPU 가 OS 관련 code 를 처리할 땐 , CPU 가 kernel mode 로 동작하여 모든 리소스에 대한 권한이 제공됩니다 . 반대로 CPU 상에서 사용자 프로그램이 처리될 땐 , 즉 CPU 가 user 가 작성한 code 를 처리할 땐 , CPU 가 user mode 로 동작하여 리소스에 대해 제한된 권한이 부여됩니다 . 사용자 프로그램이 system call 을 요청하면 CPU 가 user mode 에서 kernel mode 로 넘어가서 , 즉 CPU 상에서 OS 가 처리되어 OS 가 사용자 프로그램의 system call 을 처리합니다 . 사용자 프로그램이 system call 을 하지 않더라도 , timer interrupt 를 통해 주기적으로 user mode 에서 kernel mode 로 전환되어 OS 가 scheduling 또는 context switching 등의 관리를 수행합니다 . (2) kernel thread 는 OS 에 의해 생성 / 관리되는 thread 이고 , user thread 는 사용자 프로그램이 자체적으로 생성 / 관리하는 thread 입니다 . kernel thread 의 경우 , 생성 주체가 kernel 이기 때문에 CPU scheduler 가 그 존재를 알고 있으며 kernel thread 단위로 scheduling 도 가능합니다 . 반면 , CPU scheduler 입장에서 user thread 는 존재하지 않는 것처럼 보일 것입니다 . CPU 는 단지 메모리 상에 올라와 있는 사용자 프로그램을 처리할 뿐이며 , 이 때 이 사용자 프로그램은 “ 하나의 single-threaded process” 으로 간주될 것입니다 . ( 물론 이 때 CPU 는 user mode 겠지요 .) 따라서 , user thread 가 multi-thread 의 진정한 효과를 보기 위해선 kernel thread 와의 mapping 이 요구됩니다 . CPU scheduler 가 인식할 수 있는 kernel thread 를 여러 개 생성해놓은 뒤 thread pool 에 보관하면 , 사용자 프로그램의 요청에 따라 user thread 와 kernel thread 의 mapping 이 이루어집니다 . (3) 쟁점은 결국 , kernel thread 가 kernel mode 냐 하는 것 같습니다 . 제가 이해한 것은 , kernel mode 는 CPU 가 OS code 를 실행할 때를 의미하고 , user mode 는 CPU 가 user code 를 실행함을 의미합니다 . https://www.quora.com/Why-are-user-threads-mapped-to-kernel-threads 여기에 나온 답변이 맞는지는 모르겠지만 , user thread 가 kernel thread 에 mapping 된 후 실행될 때 , 실행에 필요한 code 와 data 를 kernel thread 에게 넘긴다고 합니다 . 따라서 kernel thread 에 담긴 것은 user code 가 되므로 CPU 는 user mode 에서 동작할 것이라 생각합니다 . 제가 이해한 바에 따르면 , kernel thread 라는 용어는 생성 주체가 kernel 임을 의미할 뿐 , kernel mode 와는 무관하다고 생각됩니다 . 또, 동작을 마친 kernel thread는 삭제되지 않고 다시 thread pool로 되돌아 갑니다. 이렇게 보면 kernel thread는 일종의 그릇 역할인 듯 합니다... (4) kernel thread와 user thread의 구분은 https://www.youtube.com/watch?v=sOt80Kw0Ols 위 영상을 참조하시면 도움이 되실 것 같습니다.