On May 17, 2005 11:54 PM, Jeff Dike wrote:

>> In UML,when the kernel_thread was called,the UML kernel thread P will 
>> be created in copy_process. And the corresponding host thread Q will 
>> be create in copy_thread_tt. Then the host thread Q will run its 
>> SIGUSR1 signal handler new_thread_handler,which will call 
>> run_kernel_thread function and exited at last. But I think it should 
>> be the UML kernel thread P that call run_kernel_thread function, any 
>> problems?

> P and Q are the same thing, so it makes no sense to say the handler should
be run in one rather than the other.

But P and Q are different threads and they will be scheduled
differently,right?

Another question:
when a kernel thread is created in UML, in the function outer_tramp the temp
thread A will clone the corresponding host thread B and then wait for it to
stop. The code is following:

        t->pid = clone(t->tramp, (void *) t->temp_stack + page_size()/2,
                       t->flags, t->tramp_data);
        if(t->pid > 0) wait_for_stop(t->pid, SIGSTOP, PTRACE_CONT, NULL);

And once the host thread B is created it will run new_thread_proc,in the
function the thread send the signal SIGUSR1 to itself:

        os_usr1_process(os_getpid());
        change_sig(SIGUSR1, 1);
        return(0);

But I found the thread B will be blocked in the function change_sig(SIGUSR1,
1). Why?
And in the function outer_tramp, the thread A see the thread B was stopped
with a SIGSTOP signal. Why? Since the thread B is blocked by the signal
SIGUSR1...

Thanks a lot!

Alex




-------------------------------------------------------
This SF.Net email is sponsored by Oracle Space Sweepstakes
Want to be the first software developer in space?
Enter now for the Oracle Space Sweepstakes!
http://ads.osdn.com/?ad_idt12&alloc_id344&op=click
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

Reply via email to