【问题标题】:How the kernel functions work?内核函数如何工作?
【发布时间】:2015-08-21 14:09:45
【问题描述】:

通常在函数调用期间,函数会被压入进程的堆栈部分,调用函数会等待。但是程序堆栈需要一个进程对吗?但是内核不是任何进程的一部分(我所说的内核是指执行文件管理和进程间通信的部分)。但我认为即使是内核也使用某些函数来完成各种事情。那么如果不使用进程,内核中的这些函数是如何组织的呢??

【问题讨论】:

  • 是的,它确实使用了函数。您可以阅读(部分)来源。 (记住它是开源的!)从子目录 mm 开始。
  • 我读到内核本身不是一个进程。我想知道内核如何在不成为进程的情况下自行执行。
  • 它自己不执行,它由引导程序调用,并连续运行(如果由系统调用或中断调用)并且它不需要进程号,因为它不是进程。初始化后,内核只调用一个进程:init (pid=1) 所有其他进程都是 init 的子或孙。
  • 您可以将内核视为一个巨大的共享库,它将您的程序连接到硬件并处理进程调度。

标签: linux-kernel kernel


【解决方案1】:

你混淆了不同类型的东西。基本上堆栈是内存中的一个区域和一些硬件支持(用于保存堆栈顶部的寄存器 - esp 和用于保存当前堆栈帧基 ebp 和 push、pop、call、ret 指令的寄存器。我的意思是 x86)。当你建立了这个 esp 并为堆栈分配了内存 - 你完成了,你可以使用它。因此,要使用堆栈,您不需要使用“进程”。过程是不同顺序的概念。换句话说,没有什么能阻止内核为自己分配堆栈...

【讨论】:

    【解决方案2】:

    相关,在 x86 Linux here 上如何进行“系统调用”(非内核进程调用“进入”内核的机制)有一个很好的总结。简短的故事是,调用进程生成一个带有0x80 INT instruction...的中断,然后内核处理中断(这是内核非常擅长的,需要处理来自外围设备和芯片组的硬件中断以及喜欢)。有关内核如何确定谁创建了中断以及他们想要什么的详细信息,请参阅这篇文章。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 2023-01-19
      • 2014-05-21
      • 2015-07-12
      • 1970-01-01
      相关资源
      最近更新 更多