SpinLocked
SpinLocked

Reputation: 71

How is time slice divided among the pthreads in a process?

Is the Linux kernel aware of pthreads in the user address space ( which i dont think it is..but i did not find any info abt that). How does the Instruction pointer change when thread switching takes place.. ??

Upvotes: 5

Views: 2872

Answers (3)

Brendan
Brendan

Reputation: 37214

The native NPTL (native posix thread library) used in Linux maps pthreads to "processes that share resources and therefore look like threads" in the kernel. In this way, the kernel's scheduler directly controls the scheduling of pthreads.

A "pthread switch" is done by the exact same code (in the kernel) that handles process switches. Simplified, this would be something like "store previous process state; if the next process uses a different virtual address space then switch virtual address spaces; load next process state;" (where "process state" includes the instruction pointer for the process/thread).

Upvotes: 5

Jesus Ramos
Jesus Ramos

Reputation: 23268

Well the Linux kernel doesn't know about user threads (pthread does in userspace, moreover the kernel doesn't really care about them except it just needs to know what to schedule).

The instruction pointer is changed in the kernel during what's called a context switch. During this switch the kernel essentially asks the scheduler what's next? the scheduler will hand it a task_struct which contains all the information about the thread and the interrupt handler for a context switch will go ahead and set the values on the CPU accordingly (page tables, instruction pointer, etc...) and when that code is done the CPU simply just starts executing from there.

Upvotes: 2

Avi
Avi

Reputation: 1336

1) The kernel doesn't know about user-level threads. However, NPTL isn't user level

2) This is a really broad question. You should look at an OS book. It will go into depth on that issue and all other involved in a context switch.

Upvotes: 1

Related Questions