关于c程序的执行,我知道编译器将代码转换为机器语言然后执行。但我想知道操作系统提供哪些服务来实现它。如果我使用fopen函数,请解释我操作系统如何处理它,即。从硬盘读取文件到加载到内存等等。对于所有这些操作,内部调用哪些系统调用?如何将fopen,printf等显式函数转换为系统调用? 如果可以在c编程的上下文中查看内部系统调用,请让我知道要查看它们的路径?
答案 0 :(得分:1)
语言通常有自己的API作为其运行时支持的一部分(例如C标准库中的fopen()
)。这些是语言的一部分,而不是操作系统本身的一部分。
语言的运行时使用操作系统的低级API。例如,fopen()
可能使用内核API的open()
函数(Linux);但它可能是DLL中的createfile()
函数,而不是内核中的任何东西(Windows)。在某些情况下,它不是那样的,更像是发送到不同进程的消息(微内核常见)。
无论它到底在哪里(以及如何),它可能会找到某种“虚拟文件系统”层,并且取决于它是否在VFS的缓存中,它可能会也可能不会从那里转发到代码负责处理文件系统,该文件系统可能会或可能不会将其转发到某种存储设备驱动程序(例如USB闪存设备驱动程序),而后者又可能将其转发给其他设备驱动程序(例如USB控制器驱动程序)。 p>
大多数情况下,对于不同的操作系统来说可能会有很大差异,因此没有一个答案对所有操作系统都是正确的。