I'm curious about the design choice that ties a single stack to each thread. Why can't or shouldn't a thread use more than one stack? Wouldn't it make things easier at the assembly level for managing variables and parameters? I understand the stack is a last-in, first-out memory structure. From both a design perspective and a practical one, why is a thread inherently linked to just one stack?
3 Answers
Threads typically operate one task at a time, so they only need one call stack to keep track of local scopes and return addresses. Adding multiple stacks would complicate things unnecessarily since each function call is recorded on a single stack, similar to how your browser keeps one history of pages visited.
The call stack is essentially what defines a thread's state. If a thread had multiple stacks, it would start acting like multiple threads trying to share a single context, which defeats the purpose of having a thread in the first place. Each thread efficiently keeps its execution history on one stack, making things straightforward.
Having one stack per thread simplifies memory management. If a thread had multiple stacks, it would have to keep track of which stack to use for reading or writing data. This leads to extra complexity without any real benefit. One stack means you don't have to deal with the hassle of managing multiple stacks which could complicate access to stored data.

That makes sense! So the single stack is crucial for maintaining the context of a thread's execution.