创建用户线程主体

    现在大概可以理解用户线程为何在中断时要从用户栈切换到内核栈了。如果不切换,内核的处理过程会留在用户栈上,使用用户程序可能访问到,这显然是很危险的。

    初始化内核栈

    用跟内核线程一样的方法进行线程栈上内容的初始化,注意切换过程总是在内核态执行的(无论是切换到 idle ,还是切换回来),因此栈上的内容要压到内核栈上。但是通过 返回时却要将

    设置为用户栈。

    现在我们的用户线程就创建完毕了。我们赶快把它跟我们之前创建的那些内核线程一起运行一下吧。

     创建用户线程

    创建进程 - 图2

    个内核线程之后,我们创建自己的用户线程:

    同时,我们要修改一下构建内核的 Makefile ,将用户程序链接进去,用之前提到的方法:

    现在我们 make run 运行一下试试看,发现内核线程与用户线程能够在一起很好的工作了!

    至今为止的所有代码可以在找到。