2012-06-16 8 views
1

"need_resched 플래그는 다른 프로세스가 실행해야하기 때문에 스케줄러를 가능한 한 빨리 호출해야한다는 메시지입니다."그러나 몇 가지 사항이 누락되었습니다. :need_resched infos (linux kernel 2.6.30)

누가이 플래그를 검사합니까? 커널 프로세스가 특별하니? 결국, 내가하고 싶은 유일한 질문은 플래그가 설정된 후 커널이 가능한 빨리 schedule()을 호출하는 것입니다. 그렇게하는 것이 안전하고 플래그가 설정되어있는 경우 schedule를 호출 할 때마다 내가 명확했다 희망

,

스테파노는

답변

1

일반적으로이 플래그는 인터럽트 및 syscall 리턴 경로에서 검사됩니다 - 인터럽트 또는 시스템 호출에서 복귀 할 때 설정되고 (인터럽트의 경우) 커널이 선점 가능한 경우 커널은 다시 스케줄 중 하나를 호출합니다 반환하기 전에 함수. arch/x86/kernel/entry_32.S 예를 들면

: TI_flags의 비트 플래그이다 need_resched 및 _TIF_WORK_MASK가 need_resched 대한 것을 포함하여 대부분 TI_flags 비트를 포함

358 ENTRY(resume_userspace) 
359  LOCKDEP_SYS_EXIT 
360  DISABLE_INTERRUPTS(CLBR_ANY) # make sure we don't miss an interrupt 
361          # setting need_resched or sigpending 
362          # between sampling and the iret 
363  TRACE_IRQS_OFF 
364  movl TI_flags(%ebp), %ecx 
365  andl $_TIF_WORK_MASK, %ecx  # is there any work to be done on 
366          # int/exception return? 
367  jne work_pending 
368  jmp restore_all 
369 END(ret_from_exception) 

참고. 다른 많은 유사한 검사가 있으며, 커널로 복귀 경로에는 명시적인 검사도 있습니다.

0

커널 코드는 명시 적으로이 플래그를 확인합니다. 선결제가 아니고 자발적으로 CPU를 양보 할 수있는 코드를 다룰 목적이므로 외부 프로세스 나 비동기 메커니즘으로는 확인할 수 없습니다.

관련 문제