On Tue, Oct 12, 2004 at 12:21:37 +0530, suthambhara nagaraj wrote: > Hi, > The problem is each process does not have a TSS of its own.Only one > TSSper processor is present and the process dependant features (Like > esp) are stored > in another structure( struct thread_struct ).A kernel stack of size 8k > (By default) > is actully shared by processes running on a processor. There is a func named > load_tss (or something similiar) which loads the TSS from the > thread_struct structure during task switch . Yes. Thus each process has it's own TSS. It is just stored differently when the process is not scheduled. It comes out of that, that the stack is NOT shared among different processes, because it is replaced whenever a different process is scheduled on a CPU. > A Process does not have an SS entry in its thread_struct but only an > esp (and esp0) entry. This made me believe that the stack base is the > same. There is no SS entry, because SS does not specify the stack. It is siply a segment in which the stack lives. Any segment, that covers all address space will do! IIRC in kernel SS == DS. The base of the stack does not have to be stored either, because it is AT FIXED OFFSET from the task_struct! If you don't believe me, look at definition of the current macro. It says just (%esp & ~8195) (it says it in assembly, because you can't directly access registers from C, and it uses some macros that mean "two pages" instead of 8195). The kernel stack is allocated together with the task_struct. Two pages are allocated and task_struct is placed at the start while the stack is placed at the end and grows down towards the task_struct. ------------------------------------------------------------------------------- Jan 'Bulb' Hudec <bulb@xxxxxx>
Attachment:
signature.asc
Description: Digital signature