programing

커널 스레드란?

muds 2023. 10. 23. 22:11
반응형

커널 스레드란?

저는 장치 드라이버 코딩을 막 시작했고 스레드를 처음 접했고 스레드에 대한 아이디어를 얻기 위해 많은 문서를 검토했습니다.저는 아직도 약간의 의심이 듭니다.

  1. 커널 스레드란 무엇입니까?
  2. 사용자 스레드와 어떻게 다릅니까?
  3. 두 실 사이의 관계는 무엇입니까?
  4. 커널 스레드를 구현하려면 어떻게 해야 합니까?
  5. 구현 결과를 어디서 볼 수 있습니까?

누가 나를 도와줄 수 있나요?감사해요.

  1. 커널 스레드는task_struct사용자 공간 구성 요소가 없습니다.
  2. 사용자 공간이 부족한 것 외에도 조상이 다릅니다 (kthreadd대신 커널 스레드initprocess) 및 커널 전용 API에 의해 생성됩니다.clone부터fork/exec시스템 호출.
  3. 두 개의 커널 스레드가kthreadd부모로서에도 커널 는 사용자 공간을 서로 누리고 .그 외에도 커널 스레드는 사용자 공간 프로세스와 동일한 "독립성"을 서로 누리고 있습니다.
  4. 을 합니다.kthread_runkthread에서 function/macro.h header 이 함수를 호출하려면 커널 모듈을 작성해야 할 것이므로 Linux Device Drivers를 살펴봐야 합니다.
  5. 구현의 텍스트 출력을 참조하는 경우 다음을 통해printkcalls), 당신은 커널 로그에서 이 출력을 볼 수 있습니다.dmesg지휘.

커널 스레드는 커널 모드에서만 실행되는 커널 작업이며, 일반적으로 다음에 의해 생성되지 않습니다.fork()아니면clone()시스템 호출.예를 들자면kworker아니면kswapd.

커널 스레드가 무엇인지 모르는 경우에는 커널 스레드를 구현하지 않는 것이 좋습니다.

구글은 커널 스레드에 관한 많은 페이지를 제공합니다.프레이의 페이지.

사용자 스레드 & 스택:

각 스레드에는 고유한 스택이 있으므로 자체 로컬 변수, .data 또는 .bss 실행 파일의 .bss 섹션에 속하는 스레드의 공유 글로벌 변수를 사용할 수 있습니다.스레드는 전역 변수를 공유하므로 다중 스레드 응용 프로그램에서 전역 변수에 액세스/수정하려는 경우 뮤텍스와 같은 동기화 메커니즘을 사용합니다.로컬 변수는 스레드 개별 스택의 일부이므로 동기화할 필요가 없습니다.

커널 스레드 커널 스레드는 프로세스 컨텍스트에서 커널 코드를 실행할 필요성에서 비롯되었습니다.커널 스레드는 워크큐 메커니즘의 기본입니다.기본적으로 스레드 커널은 커널 모드에서만 실행되는 스레드이며 사용자 주소 공간이나 기타 사용자 속성이 없습니다.

스레드 커널을 만들려면 kthread_create():

#include <linux/kthread.h>

structure task_struct *kthread_create(int (*threadfn)(void *data),
                                      void *data, const char namefmt[], ...);

커널 스레드 & 스택: 커널 스레드는 pdf 플러시 스레드, workq 스레드 등과 같은 커널에 대한 후처리 작업을 수행하는 데 사용됩니다.커널 스레드는 기본적으로 주소 공간이 없는 새로운 프로세스이며(필요한 플래그가 있는 클론() 호출을 사용하여 생성할 수 있음) 사용자 공간으로 전환할 수 없습니다.커널 스레드는 일반 프로세스처럼 예약 가능하고 선점 가능합니다.

커널 스레드는 로컬 정보를 관리하는 데 사용되는 자체 스택을 가지고 있습니다.

커널 스택에 대한 자세한 내용: - https://www.kernel.org/doc/Documentation/x86/kernel-stacks

커널 스레드와 사용자[랜드] 스레드를 비교하는 것이므로 다음과 같은 의미가 있다고 생각합니다.

요즘 스레드를 구현하는 일반적인 방법은 커널에서 스레드를 구현하는 것이므로 이러한 스레드는 "정상적인" 스레드로 간주될 수 있습니다.그러나 SIGALRM과 같은 신호를 사용하여 사용자 랜드에서 수행할 수도 있습니다. SIGALRM과 같은 신호는 핸들러가 현재 프로세스 상태(대부분 레지스터)를 저장하고 이전에 저장된 다른 프로세스 상태로 변경합니다.여러 OS에서 적절한 커널 스레드 지원을 받기 전에 스레드를 구현하기 위한 방법으로 이를 사용했습니다.커널 모드로 전환할 필요가 없기 때문에 속도가 더 빠를 수 있지만 실제로는 그 기능이 사라졌습니다.

하나의 스레드가 특수 함수(일반적으로 수율이라고 함)를 호출할 때까지 실행되는 협력 사용자 랜드 스레드도 있습니다. 그런 다음 위의 SIGALRM과 유사한 방식으로 다른 스레드로 전환됩니다.여기서의 장점은 프로그램이 완전한 제어 상태에 있다는 것이며, 이는 타이밍 문제(예를 들어 게임)가 있을 때 유용할 수 있습니다.실 안전에 대해서도 크게 신경 쓸 필요가 없습니다.큰 단점은 한 번에 하나의 스레드만 실행할 수 있다는 것입니다. 따라서 프로세서에 여러 코어가 있기 때문에 이 방법도 흔하지 않습니다.

커널 스레드는 커널에 구현됩니다.사용법을 말씀하신 건가요?가장 일반적인 방법은 전화하는 것입니다.pthread_create.

언급URL : https://stackoverflow.com/questions/9481055/what-is-a-kernel-thread

반응형