• 进程的内核栈、用户栈


    今天在看Coursera的时候看到了用户栈,困惑不解,就从网上收集了一些资料,做一个总结。

    1.进程的堆栈

    内核在创建进程时,会为其创建相应的堆栈,分别是用户栈和内核栈

    用户栈:存在于用户空间

    内核栈:存在于内核空间

    当进程在用户空间运行时,CPU堆栈指针寄存器里面的内容是用户堆栈的地址,当前为使用用户栈。

    当进程在内核空间运行时,CPU堆栈指针寄存器里面的内容是内核栈空间地址,当前为使用内核栈。

    2.用户栈与内核栈之间的切换

    进程可以通过中断或者系统调用而陷入内核中,进程所使用的堆栈也要从用户栈转到内核栈。

    当进程陷入内核态以后,先把用户堆栈的地址保存在内核栈之中,通过设置堆栈指针寄存器的内容(将它指向内核栈的地址方可)来完成从用户栈到内核栈的转换;

    当进程从内核态转换到用户态时,在内核栈中的用户栈的地址恢复到堆栈指针寄存器即可。

    通过上述的操作,便实现了操作系统中的进程之间的内核态与用户态的转换。

    最后,我还有一点想要强调的就是

    进程从用户态转换到内核态时,内核栈总是空的!这是因为一旦进程从内核态返回到用户态以后,内核栈的信息就会失效,会被全部的恢复,所以每次进程从用户态陷入内核态的时候得到的内核栈都是空的。这样以来,在陷入内核态的过程中,我们可以通过把内核栈的栈顶指针给堆栈指针寄存器就可以了。

    By 一枝猪

  • 相关阅读:
    碰撞检测 :Polygon
    碰撞检测 :Line
    碰撞检测 :Rectangle
    碰撞检测:Point
    Canvas 绘制 1 px 直线模糊(非高清屏)的问题
    threading之线程的开始,暂停和退出
    win10利用hexo+gitee搭建博客
    Fullscreen API与DOM监听API
    <el-input>只能输入数字,保留两位小数
    谷歌浏览器查看gitee和github代码的插件
  • 原文地址:https://www.cnblogs.com/chunzhulovefeiyue/p/6591274.html
Copyright © 2020-2023  润新知