Sangman Kim wrote:
Hi Ravikumar,
**
And from some other sources I understand that there is a one-one
mapping between threads created by library API and kernel threads.
I think kernel threads here do not seem to indicate conventional
kernel threads. There are kernel thread which handle interrupts, and
there is user-context kernel code on behalf of user threads. I think
what you are mentioning here is the latter, which is not regarded as
kernel "thread," even though they are part of kernel.
Now my questions are :
1. I have Program and I've created two threads say T1 and T2
using Posix Thread Library. see below
*void* function2()
{
while(1)
{
printf("I'm Thread 2\n");
sleep(1);
}
}
void* function1()
{
printf("I'm Thread 1\n");
char buf[1024];
read(0,buf,1023); // Thread 1 will block here
}
int main(int argc,char *argv[])
{
pthread_t pid1,pid2;
pthread_create(&pid1,NULL,function1,NULL);
pthread_create(&pid2,NULL,function2,NULL);
while(1)
{
printf("I'm Main Thread\n");
sleep(1);
}
}
*
According my understanding there will be three tasks will be
created in the kernel after I ran this program. One is for main
process say P and other two for T1 and T2.
And T1 & T2 share the address space of P. Is my understanding is
correct?
Yeah, that's correct. pthread_create() calls create_thread
<http://www.google.com/codesearch/p?hl=en#5ge3gHPB4K4/gnu/glibc/glibc-2.3.4.tar.bz2%7CTTlJV-niWY8/glibc-2.3.4/nptl/sysdeps/pthread/createthread.c&q=create_thread&exact_package=http://ftp.gnu.org/gnu/glibc/glibc-2.3.4.tar.bz2>()
in glibc, and the clone flag contains CLONE_VM flag in calling do_clone().
2.Regarding the scheduling.
*read(0,buf,1023); // Thread 1 will block here
*The integer 1 for fd means reading standard output of itself, which
usually does not make sense.
Even reading from stdin should stall at this point because it is
synchronous read.
Yes your correct 1 is for STDOUT , but I just wanted to block that
thread and just wanted to know how threads will be scheduled.
Thank you for valuable answers. Could you/somebody please share how
user level thread scheduling will be done in the above example
Sangman
Thanks
Ravikumar