Advertisement

进程用户栈与内核栈

阅读量:

目录

  • 内核栈和用户栈区别

进程的堆栈
当系统创建新进程时,在生成task_struct的同时也会建立相应的堆栈结构。每个独立的进程中都会有两套特殊用途的存储区域:其中一个是位于用户空间中的用户栈;另一个则被安置于内核空间中作为内核专用栈。具体来说,在用户空间中执行操作时,默认情况下CPU堆叠指针寄存器中的值对应着当前用户的堆叠地址范围边界值;而一旦切换到内核空间执行任务,则该寄存器的内容将指向当前使用的内核专用堆叠区域起始位置,并以此为基础展开操作。

进程用户栈和内核栈的切换
每当进程因中断或系统调用而转入内核态执行时,在线程层面将迫使该线程切换到相应的新线程并使原有线程暂停执行。
一旦进入内核态后,则需将当前用户的堆栈地址保存到新的内核堆栈中,并将堆栈指针寄存器设置为指向新创建的内核堆栈地址;这样一来就实现了从用户空间切换到内核空间的操作;当该进程从内核态重新返回至用户态时,则需将之前保存在内核堆栈中的用户堆栈地址恢复到当前的堆栈指针寄存器位置即可完成状态转换;这种机制确保了内外层空间之间的有效交互与数据同步机制的有效实现。
从上层空间转变为下层空间的过程中,在线程切换过程中如何获取对应的新空闲内存区域呢?关键在于每当一个新进程启动并进入内存管理单元(MMU)时都会分配一个新的空闲内存块作为其运行环境;在这种情况下当一个正在

全部评论 (0)

还没有任何评论哟~