I know that stacks are per thread, but registers are limited,like on IA32,only 8 registers.
So how are registers shared among threads?
I know that stacks are per thread, but registers are limited,like on IA32,only 8 registers.
So how are registers shared among threads?
For clarification, technically threads within a single process share a different portion of the process' address space. Each have their own state (it's set of registers, a stack, etc.) and it's all allocated within the process' address space. They don't have their own address space.
When the operating system performs a context switch, it saves all the general purpose registers onto some known location (the context). Then the process that will be using the CPU next will have its saved registers restored so it may execute. This happens every time a new process needs control of the CPU, switch out and switch in.
Registers are used by the CPU when it's currently running a particular thread. When the OS decides to switch from one thread to another, the OS saves the current values of all the register into a private memory area specific to the first thread. Before the second thread starts running, the OS loads the values of all the registers from its saved area. This is called a context switch.