gpt4 book ai didi

c - 应用程序代码如何与内核代码通信?

转载 作者:太空狗 更新时间:2023-10-29 11:29:26 24 4
gpt4 key购买 nike

令我困扰的是,在我搜索这个问题的任何地方都没有任何解释,所以这是我所知道的:

软件应用程序在执行时加载到内存中应用程序将使用内核的系统调用,例如分配内存如果软件应用程序被转换为二进制,内核也是,两者都在内存中,它们在低级别如何相互通信?

我的知识肯定有很多差距,所以我可以假设应用程序被编译为内核可以理解的代码,而不是直接转换为机器代码。有足够的知识来解释这个吗?

最佳答案

细节在很大程度上取决于您所询问的特定操作系统和体系结构,但一般来说,用户空间应用程序可以通过执行一些导致 CPU 中断的特定操作来进行系统调用,从而导致执行跳转到核心。应用程序将在寄存器或堆栈中存储一些数据,指示所需的系统调用和参数是什么,并在系统调用完成时以类似方式传回结果。

例如,对于32位的x86 Linux系统,执行系统调用的指定操作是int 0x80。当应用程序要执行系统调用时,它会将系统调用的 ID 放在 eax 中,并在 ebxecx 中存储最多六个参数code>、edxesiediebp(按此顺序)。系统调用完成后,其结果将存储在 eax 中。

在大多数情况下,进行系统调用的代码存储在内存顶部附近由内核映射的特殊数据页中。此页面包含可由 libc 调用的优化代码。 (因此,您的代码永远不需要直接调用内核 — 这全部由包装系统调用的 libc 函数处理,例如 read()write()。 ) 有关详细信息,请参阅 "What are vdso and vsyscall" .

关于c - 应用程序代码如何与内核代码通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23588500/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com