小弟新人,开发过程中,突然发现对这几个栈作用不明确,相互之间有什么关联,不同的栈压入的都是些什么东西,还请高手解答。
不同的工作模式用不同的栈。
任务切换,上下文切换的时候用任务栈。
进入中断用中断栈
系统工作模式下,有系统栈
就是不同的存储空间,分几个栈是为了相互不影响,比如应用程序的运行不会破坏系统运行。
这是根据系统不同的情形进行的一种保护操作
系统栈就是专门问系统服务,栈指针此时是指向系统区,当然,这个区的地址是你自己定义的
IRQ是专为中断设计的,也就是中断程序的数据开销维护在中断栈内,当然,这个栈指针是指向中断设置的stack区
任务栈是每个创建的任务独享的栈区,这个栈区一般是全局的数组,当任务调用时,程序的局部数据都在此数组内操作
如果是linux,叫内核栈,当你的内核栈配置成4K的时候,当中断发生时,会有专门的irq栈;
如果配置成8K,则irq用当前进程人内核栈。
每一个应用程序自已的运行时,需要一个栈,这个栈是用来存放你的局部变量的;
而操作系统有一个重要任务就是:任务管理和调度,也就是说你一个应用程序运行时,操作系统也会给你
分配一块资源,这块资源不是给你应用程序里面的代码使用的,而是为了管理你,它管理你,也需要
内存,也需要局部变量,当然,这些管理代码就内核代码的一部分,那它也需要栈,这个栈就是内核栈;
中断会不可预知的到来,当中断到来时,它的处理代码也需要栈,就是上面我所说。
想单方面搞清楚这些问题是不可能,必须要深入学习一下操作系统原理,并看相应的源码。