linux用户栈和内核栈
来源:互联网 发布:淘宝详情图片格式 编辑:程序博客网 时间:2024/06/07 20:49
进程是正在执行中的程序,每个进程都有自己的堆栈。在进程初始化申请task_structure的时候也会申请堆栈空间,共有两个堆栈,内核堆栈和用户堆栈。内核堆栈指向内核地址空间,用户堆栈指向用户地址空间。当运行在用户态的时候cpu的栈指针指向的是用户堆栈,而当cpu运行在内核态的时候,cpu的栈指针指向的是内核栈。
其中用户堆栈就是在进程执行中存放变量和函数参数等的堆栈。当进程由于中断或系统调用从用户态转换到内核态时,进程所使用的栈也要从用户栈切换到内核栈。系统调用实质就是通过指令产生中断,称为软中断。进程因为中断(软中断或硬件产生中断),使得CPU切换到特权工作模式,此时进程陷入内核态,进程进入内核态后,首先把用户态的堆栈地址保存在内核堆栈中,然后设置堆栈指针寄存器的地址为内核栈地址,这样就完成了用户栈向内核栈的切换。
在进程转入内核态之后,执行的代码是内核代码,但执行路径未必相同,导致数据压栈的顺序和内容不同。另外数据不能保存在用户空间,这样容易被覆盖和修改,这时就需要为每个进程专门准备一套内核栈。
当中断执行完成时,会将内核态执行的结果返回给用户态(例如系统调用),然后健用户堆栈的地址返回给堆栈指针寄存器。
0 0
- linux 进程用户栈和内核栈
- linux 进程用户栈和内核栈
- linux用户栈和内核栈
- linux内核栈和用户栈
- linux内核栈和用户栈解析
- linux用户栈和内核栈解析
- Linux内核-进程内核栈、用户栈
- Linux 内核:进程内核栈、用户栈
- Linux 2.6 内核栈和用户栈的区别
- linux内核栈和用户栈(二)
- 内核栈和用户栈
- 内核栈和用户栈
- Linux内核中用户空间栈和内核栈的区别
- Linux内核中用户空间栈和内核栈的区别
- linux用户和内核交互
- linux内核和用户通信
- linux内核栈与用户栈
- linux内核栈与用户栈
- Lock
- HUD 3461 codelock 纯题意解释,不含思想
- oil deposits
- Java异常处理(try、catch、finally使用)
- 一个自定义注释的例子
- linux用户栈和内核栈
- POJ 3036 Honeycomb Walk(DP)
- 【leetcode】two-sum
- Python要self的理由
- poj 2533 Longest Ordered Subsequence
- 使用Dom4j解析xml文件---DomReader方式
- 数据结构——顺序栈与链栈的C++实现
- 黑马程序员——Java泛型通配符的总结
- strcpy函数的实现