内核栈空间和用户栈空间

在Linux系统中,每个线程都拥有独立的用户栈和内核栈空间。用户栈用于线程的正常执行,而内核栈在进行特权操作时使用,以确保安全性。内核栈不信任用户栈,因此在切换到内核模式时会使用自己控制的栈。中断服务例程中的局部变量将存储在内核栈上。每个线程的栈空间都是独立的,调度和协调由操作系统负责,而进程可以通过多种方式影响线程的调度和上下文。
摘要由CSDN通过智能技术生成

内核栈空间和用户栈空间 kernel stack and user space stack

简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
同一个进程的多个子线程在进程的共享内存中分配独立的栈空间
栈:是个线程独有的,保存其运行状态和局部自动变量的。栈在线程开始的时候初始化,每个线程的栈互相独立,因此,栈是thread safe的。每个C++对象的数据成员也存在在栈中,每个函数都有自己的栈,栈被用来在函数之间传递参数。操作系统在切换线程的时候会自动的切换栈,就是切换SS/ESP寄存器。栈空间不需要在高级语言里面显式的分配和释放。
在Linux系统上每一个线程,实际上都有独立的2个栈空间,用户栈空间和内核栈空间。(注意是每个线程一个)
进程和线程在Linux上的唯一区别就是同一个进程的不同线程共享进程的地址空间,仅此而已。

http://stackoverflow.com/questions/12911841/kernel-stack-and-user-space-stack

What’s the difference between kernel stack and user stack ? In short,
nothing - apart from using a different location in memory (and hence a
different

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值