打开文件 open,这时候是如何调用内核的

 
  1. 用户空间调用:在用户程序中调用 open 函数时,会触发用户空间的库函数执行。

  2. 库函数处理:用户空间的库函数(如 C 标准库)会将 open 函数的参数进行封装,并将系统调用号(syscall number)传递给操作系统内核。

  3. 系统调用:操作系统内核接收到系统调用号后,会根据该号码确定要执行的系统调用函数(如 sys_open)。

  4. 内核空间处理:操作系统内核进入内核空间,并执行相应的系统调用函数。在这个例子中,会执行 sys_open 函数。

  5. 执行系统调用函数:sys_open 函数会执行实际的文件打开操作,包括权限检查、文件描述符分配等。如果一切正常,它会返回一个文件描述符(file descriptor)作为结果。

  6. 返回结果:内核将文件描述符返回给用户空间的库函数。

  7. 库函数返回:库函数将文件描述符返回给用户程序,作为 open 函数的返回值。

在这个过程中,涉及到用户空间和内核空间之间的切换。用户空间的程序通过系统调用将请求传递给内核空间,内核空间执行相应的操作后再将结果返回给用户空间。这种切换涉及到一定的开销,因此系统调用的频繁调用可能会导致性能下降。