Hi all, Currently I'm going through book 'development of Linux kernel' by Robert Love. In the chapter 'Process Management' I read below sentence "Linux has a unique implementation of threads: It does not differentiate between threads and processes. To Linux, a thread is just a special kind of process." In kernel everything is a just task represented by task_struct And from some other sources I understand that there is a one-one mapping between threads created by library API and kernel threads. 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(1,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? 2.Regarding the scheduling. Upon running the above program , the output is: I'm Main Thread I'm Thread 1 I'm Thread 2 I'm Main Thread I'm Thread 2 I'm Main Thread I'm Thread 2 I'm Main Thread I'm Thread 2 I'm Main Thread I'm Thread 2 Though Thread 1 is blocked Main Thread and Thread 2 are still running. That means different user-level threads are scheduled by kernel separately.Is this correct ? If this is correct how time slices will be allocated? Do please some body clarify my questions and also provide some good links as references Thank you all Regards, Ravikumar |