gpt4 book ai didi

operating-system - 谁能向我解释一下编程语言中的系统调用?

转载 作者:行者123 更新时间:2023-12-04 07:25:45 24 4
gpt4 key购买 nike

几天前我开始研究操作系统概念,但我已经遇到了一些问题。主要是我对系统调用很好奇。我了解到每个操作系统都提供自己的 API(比如Windows 为Windows API,Linux 为libc 等)

我开始感到困惑的是包装函数。例如 Linux 有一个 fork() 包装函数。这是否意味着此函数内的算法执行系统调用例程基于操作系统的系统调用表?而且我不明白它是用 C 编写的是什么意思。这是否意味着它正在使用 C 标准库?或者只是 C 编译器?此外,C 编译器如何编译它的标准库,即使有不同种类的编译器,如 GCC windows C 编译器等?我很好奇的是,C 标准库函数也调用系统调用对吗?但它可能必须调用不同的系统调用才能在不同的操作系统中获得相同的输出,对吧?这是否意味着,即使是相同的标准 C 函数,系统调用内部实现因每个操作系统而异?

我真的想要系统调用的好概念 plz :)

最佳答案

系统调用是由底层操作系统公开的功能。一种语言发出系统调用通常有明确定义的方式。例如,Intel x86 处理器有一个使用的syscall 指令,但您也可以使用其他方式,例如发出中断指令。

当进行系统调用时,会从用户空间过渡到内核空间,内核空间运行在更高的特权级别。系统调用的参数被复制到内核空间并进行验证以确保它们不会危及内核。但是,这些参数很可能也在用户空间中得到验证。在某些情况下,用户空间函数将是内核函数的薄包装,而在其他情况下,它们会在顶部提供额外的功能。

C 和 Unix 有着紧密的继承关系,这就是为什么很多系统调用名称与它们的 C 版本相同(例如 fork、execXXX)。然而,这只是一个惯例,并非所有地方都是如此。在 Windows 上,系统调用的名称与 Linux 中的名称完全不同。但是,平台上的底层 C 运行时实现向您隐藏了这一点,并进行正确的系统调用以实现 C 函数提供的功能。

通常像 Ruby 这样的高级语言不会直接发出系统调用。相反,他们使用以较低级别语言(例如 C 或 C++)编写的库,这些库将 Ruby 调用转换为对底层系统函数的调用。

关于operating-system - 谁能向我解释一下编程语言中的系统调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17874981/

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