Hi all,There is no such thing as "the common kernel stack". Each process (represented by a task_struct in the kernel) has its own private data space to be used as a kernel stack when that process traps into the kernel. You can see where this per task_struct stack space is reserved in the definition of task_union. init_[task|thread]_union just defines the first task union in the system. Because of the way unions are laid out in memory, The kernel knows that when a process traps into kernel space, it just needs to round the current task pointer to the nearest 8k (prehaps 4k in 2.6) boundary, and thats the start of that processes kernel stack. Thats how the SAVE_ALL command avoids trampling registers.
I have not understood how the common kernel stack in the
init_thread_union(2.6 ,init_task_union in case of 2.4) works for all
the processes which run on the same processor. The scheduling is round
robin and yet the things on the stack (saved during SAVE_ALL) have to
be maintained after a switch without them getting erased. I am
familiar with only the i386 arch implementation.
Please help
regards,
Suthambhara
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/