What is the need of using two different stacks in same program? How does trap change the current stack of program from user stack to kernel stack? How does it come back to user
It's operating system dependent. The reason to have it is basic security of the operating system. It's by careful design of the operating system itself. For instance some processors have Kernel, Executive, Supervisor and User stacks.
Renee
The context of a process (psw, state of registers,pc...) is saved in the PCB of the process, in the kernel space of memory, not in the stack. Yes, there is one stack for each user process and more, one stack for each thread in the user space memory. In the kernel, the data structures are shared by the multiples codes of the function in the kernel. The stack is used for the call of procedure and for the local variables, not for saving the context.
There are 2 stacks because there are 2 CPU execution contexts. The user mode stack will cater to your program with respect to creating stack frames for functions, local variables, return addresses etc. When the CPU switches context to kernel mode, for instance during system call execution, it needs access to kernel memory and data structures and so switches to using it's kernel stack. And yes, Unix I believe uses a per process kernel stack.
I am learning OS in university, and our project is based on OS/161 built by Harvard. So my answer is all based on this OS.
In OS/161, every thread has 2 stacks - one for user/application program, one for kernel program.
1. What is the need of using two different stacks in same program?Say we only use stack in application mode. Since the memory space is shared by multiple threads, if some other thread accidently overwrite the address used by kernel, then kernel might be crashed, which leads to a very vulnerable OS.
2. How does trap change the current stack of program from user stack to kernel stack?in OS/161, trap is used to transfer from an application program to kernel.There are three mechanisms that could invoke trap: System calls, Exceptions, and Interrupts. The trap frame in kernel stack is used to save current thread context.
Following is the detailed process(from lecture note of UWaterloo CS350):
When one of above mechanism occurs, the hardware switches the CPU into privileged mode and transfers control to a predefined location, at which a kernel handler should be located.
The kernel handler creates a trap frame and uses it to saves the application thread context so that the handler code can be executed on the CPU.
Just before the kernel handler finishes executing, it restores the application thread context from the trap frame, before returning control to the application.
The process above explains clearly on this question as well.
One of the reasons for having a separate kernel stack is that the kernel needs a place to store information where user-mode code can't touch it. That prevents user-mode code running in a different thread/process from accidentally or maliciously affecting execution of the kernel.
what is the need of using two different stacks in same program
I've never heard of both a kernel and user stack in terms of a single process, though it may be extremely common. It's discussed here.
The kernel stack must be isolated from the user mode stack. Otherwise, user mode code could corrupt the kernel stack, causing a kernel crash.
how does trap changes the current stack of program from user stack to kernel stack
You may want to look for something like the Intel Software Developer's Manuals.
does each process has kernel and user stack
I assume this varies with operating system design, though perhaps it's fairly universal. The links I provided above indicate that Linux uses two (or more) stacks per process. I haven't heard of Windows using a per-process kernel-mode stack.