通常在函数调用期间,函数被推入进程的堆栈部分并且调用函数等待。但是程序堆栈需要一个流程吗?但是内核不是任何进程的一部分(内核我指的是进行文件管理和进程间通信的部分)。但我认为即使内核使用某些功能来完成各种事情。那么如果不使用进程,那么内核中的那些函数是如何组织的呢???
答案 0 :(得分:2)
你混淆了另一种东西。基本上堆栈是内存中的一个区域和一些硬件支持(注册以保持堆栈顶部 - 尤其是注册以保持当前堆栈帧基本ebp和push,pop,call,ret指令。我的意思是x86)。当你为堆栈建立了这个esp并分配了内存 - 你就完成了,你可以使用它。因此,要使用堆栈,您不需要使用“进程”。过程是不同顺序的概念。换句话说,没有任何内容可以为自己分配堆栈...
答案 1 :(得分:1)
相关的,有一个很好的总结,说明如何在x86 Linux here上创建“系统调用”(非内核进程调用“内核”的机制)。简而言之,调用进程生成一个带有0x80 INT instruction的中断...然后内核处理中断(这是内核非常擅长的东西,需要处理来自外设和芯片组的硬件中断的内容)等等)。请参阅文章,了解内核如何确定创建中断的人及其想要的内容。