Considering the Linux case, where we have a kernel stack for each user stack, from what I know, whenever a context switch happens, we switch to kernel mode of the current process.
Here we save the current status, registers, program data etc. of the current process and then the scheduler (not sure if it runs in this kernel) saves the PCB and loads the PCB of the next process to be scheduled.
Now the first question is if the explanation above seems to make sense for you, considering a context switch where each process has also a "dedicated" kernel stack.
And the other part of my question is, how would a context switch happen if we had a single kernel stack for all the processes?