Câu trả lời của tôi được thu thập từ các câu hỏi SO khác với nội dung của tôi.
What's the difference between kernel stack and user stack?
Là một lập trình viên hạt nhân, bạn biết rằng hạt nhân phải bị hạn chế khỏi các chương trình người dùng có lỗi. Giả sử bạn giữ cùng một ngăn xếp cho cả nhân và không gian người dùng, thì segfault đơn giản trong ứng dụng người dùng sẽ làm hỏng nhân và cần khởi động lại.
Có một "ngăn xếp hạt nhân" trên mỗi CPU như ISR Stack và một "ngăn xếp hạt nhân" trên mỗi Quy trình. Có một "ngăn xếp người dùng" cho mỗi quy trình, mặc dù mỗi luồng có ngăn xếp riêng, bao gồm cả luồng người dùng và nhân.
http://linux.derkeiler.com/Mailing-Lists/Kernel/2004-10/3194.html
Why kernel stack is used?
Vì vậy, khi chúng ta ở chế độ hạt nhân, loại cơ chế ngăn xếp là cần thiết để xử lý các lệnh gọi hàm, các biến cục bộ tương tự như không gian người dùng.
http://www.kernel.org/doc/Documentation/x86/kernel-stacks
If a local variable is declared in an ISR, where it will be stored?
Nó sẽ được lưu trữ trong ngăn xếp ISR (IRQSTACKSIZE). ISR chỉ chạy trên một ngăn xếp ngắt riêng biệt nếu phần cứng hỗ trợ nó. Nếu không, các khung ngăn xếp ISR được đẩy lên ngăn xếp của luồng bị gián đoạn.
Không gian người dùng không biết và nói thẳng ra là không quan tâm đến việc ngắt được phục vụ trong ngăn xếp nhân của quy trình hiện tại hay ngăn xếp ISR riêng biệt. Vì ngắt đến trên mỗi cpu, do đó ngăn xếp ISR phải trên mỗi cpu.
Does each process has its own kernel stack ?
Đúng. Mỗi tiến trình có ngăn xếp hạt nhân riêng của nó.
Then how the process coordinates between both these stacks?
Câu trả lời của @ FrankH có vẻ tuyệt vời đối với tôi.