커 널 스 레 드 생 성,사용,종료 및 지연 매크로 에 대한 추가 설명
kthread_create():커 널 스 레 드
struct task_struct *kthread_create(int (*threadfn)(void *data), void *data, const char namefmt[], ...); kernel thread kernel_thread , daemonize init , completion 。 , kthread_create。
스 레 드 를 만 든 후 바로 실행 되 지 않 고 kthread 를create()돌아 오 는 taskstruct 포인터 wakeup_process(),그리고 이 함 수 를 통 해 스 레 드 를 실행 합 니 다. kthread_run():스 레 드 를 만 들 고 시작 하 는 함수 입 니 다.
struct task_struct *kthread_run(int (*threadfn)(void *data),void *data,const char *namefmt, ...); , kthread_create() wake_up_process() 。
그것 은 실제로 매크로 입 니 다.kthreadcreate()와 wakeup_process()구성.4567913) kthread_stop():스 레 드 에 신 호 를 보 내 서 종료 합 니 다.
#define kthread_run(threadfn, data, namefmt, ...) /
({ /
struct task_struct *__k /
= kthread_create(threadfn, data, namefmt, ## __VA_ARGS__); /
if (!IS_ERR(__k)) /
wake_up_process(__k); /
__k; /
})
스 레 드 가 시작 되면 이 스 레 드 가 자발적으로 do 를 호출 하지 않 는 한 계속 실 행 됩 니 다.exit 함수 또는 다른 프로 세 스 호출 kthreadstop 함수,라인 의 운행 을 끝 냅 니 다.그러나 스 레 드 함수 가 매우 중요 한 임 무 를 처리 하고 있다 면 중단 되 지 않 을 것 입 니 다.물론 스 레 드 함수 가 영원히 돌아 오지 않 고 신 호 를 검사 하지 않 으 면 영원히 멈 추 지 않 을 것 입 니 다.동시에,kthread 호출stop 함수 시 스 레 드 함수 가 실행 이 끝 났 을 수 없습니다.그렇지 않 으 면 kthreadstop 함 수 는 계속 기다 릴 것 입 니 다.
커 널 스 레 드 일반 프레임 워 크
int threadfunc(void *data){
…
while(1){
set_current_state(TASK_UNINTERRUPTIBLE);
if(kthread_should_stop()) break;
if(){/조건 은 진짜
//업무 처 리 를 하 다
}
else{/조건 은 가짜
//CPU 가 다른 라인 을 실행 하도록 내 보 내 고 지 정 된 시간 내 에 다시 스케줄 링 됨
schedule_timeout(HZ);
}
}
…
return 0;
}
스 레 드 관련 테스트 명령
top 명령 을 사용 하여 스 레 드(커 널 스 레 드 포함)의 CPU 이 용 률 을 볼 수 있 습 니 다.명령 은 다음 과 같 습 니 다.
top Cp 스 레 드 번호
다음 명령 을 사용 하여 스 레 드 번 호 를 찾 을 수 있 습 니 다:
ps aux|grep 스 레 드 이름
예제 프로그램:모듈 을 사용 하여 커 널 스 레 드 를 불 러 오고 1s 마다 커 널 에 문 자 를 인쇄 합 니 다.
(Makefile 생략,이전 박문 과 같은 문법.)
int kthread_stop(struct task_struct *thread);
보충 설명:이 지연 매크로 는 일부 상황 에서 커 널 스 레 드 CPU 의 점용 률 이 너무 높 은 상황 을 초래 할 수 있다.대 scheduletimeout()소스 코드 에 대한 분석 은 주기 적 으로 스 레 드 를 TASK 로 만 듭 니 다.RUNNING 상태 에서 이 라인 은 진정한 수면 을 취하 지 않 았 다.해결 방법:while 순환 의 시작 부분 에 set 추가current_state(TASK_INTERRUPTIBLE)이면 됩 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
커 널 스 레 드 우선 순위 설정 방법 소개개인 적 으로 커 널 스 레 드 와 프로 세 스 는 같 습 니 다.전 자 는 POSIX 스 레 드(pthread)와 큰 차이 가 있 습 니 다.따라서 커 널 의 프로 세 스 스케줄 링 전략 과 시스템 호출 도 커 널...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.