Linux 内核如何处理对 procfs 的多次读取/写入?例如,如果两个进程同时写入 procfs,是一个进程排队(即内核陷阱实际上阻塞了其中一个进程),还是每个内核都有一个内核线程在运行?
问题是如果您在函数中使用了缓冲区(对于全局空间来说是静态的),您是否必须保护它或者代码是否会按顺序运行?
Linux 内核如何处理对 procfs 的多次读取/写入?例如,如果两个进程同时写入 procfs,是一个进程排队(即内核陷阱实际上阻塞了其中一个进程),还是每个内核都有一个内核线程在运行?
问题是如果您在函数中使用了缓冲区(对于全局空间来说是静态的),您是否必须保护它或者代码是否会按顺序运行?
这取决于每个 procfs 文件的实现。甚至没有人能给你一个明确的答案,因为每个驱动程序都可以实现自己的 procfs 文件夹和文件(你没有指定任何特定的文件。在http://lxr.free-electrons.com/source/fs/proc中快速浏览/表明某些文件确实使用了锁)。
无论哪种方式,您都不能使用全局缓冲区,因为总是会发生上下文切换,如果不在内核中,那么它可以在完成读取系统调用之后和开始处理读取数据之前立即捕获您的读取器线程。