kernel thread 예제

우리가 스레드를 만들 때마다, 그것은 누군가에 의해 망가워야합니다. 그래서 관리는 아래와 같이 다음과 같습니다. 이 유형에서 커널은 이러한 스레드를 인식하지 않습니다. 모든 것은 사용자 스레드 라이브러리에 의해 유지 관리됩니다. 해당 스레드 라이브러리에는 스레드를 만들고 파괴하고, 스레드 간에 메시지와 데이터를 전달하고, 스레드 실행을 예약하고, 스레드 컨텍스트를 저장 및 복원하기 위한 코드가 포함되어 있습니다. 그래서 모든 사용자 공간에있을 것입니다. 방금 장치 드라이버코딩을 시작하고 스레딩을 새로 시작했으며 스레드에 대한 아이디어를 얻기 위해 많은 문서를 통과했습니다. 나는 아직도 몇 가지 의심이 있다. 두 프로세스 (만들기 및 시작)를 수행하는 또 다른 함수가 있습니다. 즉, kthread_run()입니다.

이 함수를 사용하여 kthread_create 및 wake_up_process를 모두 바꿀 수 있습니다. 각 스레드에는 자체 로컬 변수, .data 또는 Linux 실행 의 .bss 섹션의 일부인 스레드의 공유 전역 변수를 사용할 수 있도록 자체 스택이 있습니다. 스레드는 전역 변수를 공유하기 때문에 즉 다중 스레드 응용 프로그램에서 전역 변수에 액세스/수정하려는 경우 mutex와 같은 동기화 메커니즘을 사용합니다. 로컬 변수는 스레드 개별 스택의 일부이므로 동기화가 필요하지 않습니다. 커널 수준 스레드는 OS에서 관리되므로 스레드 작업이 커널 코드에서 구현됩니다. 응용 프로그램 영역에 스레드 관리 코드가 없습니다. 내 스레드 함수에서 매 분마다 무언가를 인쇄 할 수 있으며 연속 프로세스입니다. 따라서 매번 kthread_should_stop을 확인할 수 있습니다. 이해하려면 아래 스니펫을 참조하십시오. 커널 모듈을 삽입하면 커널 스레드가 시작됩니다.

그것은 매 초마다 뭔가를 인쇄합니다. 우리가 모듈을 제거 하면 그 시간 그것은 커널 스레드를 중지 합니다. 소스 코드를 살펴보겠습니다. kthread_stop을 사용하여 커널 스레드를 중지할 수 있습니다. 중지하려면 아래 스니펫을 사용합니다. 또한 한 스레드가 특수 함수(일반적으로 yield라고 함)를 호출할 때까지 실행되는 협동 사용자 랜드 스레드도 있으며 위의 SIGALRM과 비슷한 방식으로 다른 스레드로 전환합니다. 여기서 장점은 프로그램이 완전히 제어된다는 것입니다. 또한 스레드 안전에 대해 크게 신경 쓸 필요가 없습니다.

가장 큰 단점은 한 번에 하나의 스레드만 실행할 수 있다는 것입니다. 스레드의 장점 중 일부는 프로세스 내의 모든 스레드가 동일한 주소 공간을 공유하기 때문에 스레드 간의 통신이 프로세스에 비해 훨씬 쉽고 시간이 덜 소요된다는 것입니다. 이 방법은 한 가지 단점도 있습니다. 여러 동시성 문제가 발생하며 동기화 메커니즘을 사용하여 동일한 문제를 처리해야 합니다. 따라서 현재로서는 스레드 함수를 실행할 수 있습니다. 이제 kthread_create를 사용하여 커널 스레드를 만들고 wake_up_process를 사용하여 커널 스레드를 시작합니다. 스레드를 만들고 시작하는 편리한 기능도 있습니다.

Posted in Uncategorised