To confirm again,
Since kernel thread by kernel_thread() is created by do_fork() in the kernel, pthread_create() uses clone() system call which eventually calls do_fork() in the kernel, and fork() in user space calls eventually do_fork() as well, all threads/process are manged by task_struct with different configuration(flags). Is this correct?
If then, is my understanding that the implementation of do_fork() is by NPTL in linux 2.6 correct?
If so, there is no heavy process in the linux in typical. Right?
Best Regards,
Daniel (Youngwhan) Song
On Fri, Jan 15, 2010 at 8:28 PM, Mulyadi Santosa <mulyadi.santosa@xxxxxxxxx> wrote:
Hi Daniel...
Here comes my thoughts....
Yes. A bit OOT, in Windows, there's a lighter form than thread called
On Sat, Jan 16, 2010 at 8:24 AM, Daniel (Youngwhan) Song
<breadncup@xxxxxxxxx> wrote:
> 1. It seems that the concept of thread in the linux kernel is lightweight
> process. Is this right?
fiber. But in Linux, thread (NPTL, if we want to be specific) is the
actualization of LWP.
IMHO, LWP (Light Weight Process) is a concept which can be applied in
> 1-1 If it is right, are both kernel thread and user-space thread (pthread)
> lightweight process? Or does the lightweight process mean only to kernel
> thread?
both space. However, there is correlation between user space thread
and kernel space thread. IIRC, in NPTL, the relationship is 1:1 thus
one user space thread is running on top of one kernel thread. (sorry
if I use wrong words, but hopefully you get it)
Other threading implementation could do it differently e.g many user
space threads inside one thread group are multiplexed on top of one
kernel space thread
Correct
> 2. I guess the instance from fork() is a process in user application, and
> the instance from pthread_create() is a thread.
Right, with additionaly note: pthread_create eventually calls clone()
>The former process is heavy
> weight process having copy-on-write feature and the later thread is managed
> by pthread library handled in user mode. Is this right?
with CLONE_VM and CLONE_THREAD flags IIRC. fork() calls clone() too
but without those two flags. So you can say, both essentially some
similar operations (e.g creating new task structs) but the rest is
different (one is creating whole address space, the other is not).
Hopefully it makes things clearer :)
> Any help would be appreciated. Thanks,
--
regards,
Mulyadi Santosa
Freelance Linux trainer and consultant
blog: the-hydra.blogspot.com
training: mulyaditraining.blogspot.com