RE: Kernel stack

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> 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

As far as I know, Kernel do not have any common stack for all the
processes running over it. Whenever we enter the kernel mode thru system
calls, we go thru system gate or descriptor (0x80 entry) in IDT. This
entry contains the index of the descriptor in GDT (normally it points to
Kernel CS Segment Descriptor in GDT) and the offset (pointer) to the
code to be executed in kernel mode (which is system_call() function in
Kernel).

Now the descriptor entry in GDT pointed out by the system gate entry in
IDT, contains 2 bit field known as DPL (Desired Privelege Level). If
this DPL is less than the CPL (Current Prevelege Level) of CPU then CPU
switches to the process specific kernel stack segement by refferring the
TSS of current running process. This stack switch is automatic by CPUand
there is no assembly intruction required for it.

This stack switch is done at the time when we enter from user space to
the kernel space, this is done because we can not trust and share the
user process stack (stack used by user process in user mode). That is
why every process has atleast two and can even have four stacks. In each
process, stack for every CPU level (ring level) is defined. So whenever
the process runs in user mode (ring 3), its user mode stack is used, but
when it enters the kernel mode (ring 0) its stack is switched to the
kernel stack of that process. All the stacks of a process for different
levels of CPU are tracked thru TSS defined for that process.

To read more on IDT, GDT, TSS and System Calls invocation, refer to the
Intels System Programmer's Guide. Her is the Link:
ftp://download.intel.com/design/PentiumII/manuals/24319202.pdf

Correct me if I am wrong somewhere.

Cheers !!
Gaurav


-----Original Message-----
From: kernelnewbies-bounce@xxxxxxxxxxxx
[mailto:kernelnewbies-bounce@xxxxxxxxxxxx] On Behalf Of suthambhara
nagaraj
Sent: Tuesday, October 12, 2004 10:31 AM
To: kernel
Subject: Kernel stack

Hi all,

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

--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive:       http://mail.nl.linux.org/kernelnewbies/
FAQ:           http://kernelnewbies.org/faq/



--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive:       http://mail.nl.linux.org/kernelnewbies/
FAQ:           http://kernelnewbies.org/faq/



[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux