use*_*989 4 linux system-calls linux-kernel
假设一个进程进行了系统调用来打开一个文件,当Linux内核执行这个系统调用时,Linux内核应该将fd
打开的文件添加到进行fd
系统调用的进程表中。
当传递给系统调用的参数不包含 PID 时,Linux 内核如何知道哪个进程进行了这个系统调用?
内核系统调用在调用进程的上下文中执行,只是在不同的权限级别和不同的支持基础设施。Linux 内核有一个 per-CPU 变量来跟踪当前进程current_task
;它在需要知道当前进程是什么时使用它。在给定的 CPU 上,当前任务仅在调度程序决定时更改,上下文切换会注意保存所有必要的信息,以便内核可以跟踪正在发生的事情。
LWN 有几篇关于系统调用的有用文章,系统调用剖析第 1部分和第 2 部分。它们解释了系统调用是如何定义的以及它们是如何执行的,尽管可能没有足够的细节来实际回答您的问题,因为它们没有详细介绍从用户空间到内核空间的转换;但这“只是”在 CPU 上可用的任何基于陷阱的转换支持。