我有一个问题,但不确定它是否相关(也许我错过了一些东西)。
说在 Linux 上一切都是文件意味着:
1 - 与模块和进程的通信正在写入文件:正确吗
2 - 如果正确,这些文件存储在硬盘上?
3 - 如果正确,读/写硬盘是否需要时间?
答案1
一切都可能是文件,但并非一切都是文件真实的。
考虑 的内容/proc
。在我的Linux系统上,有一个文件/proc/uptime
,其当前内容是:
831801.89 1241295.64
如果我再次查看cat
该文件,它将包含不同的数字。我的硬盘驱动器是以只读方式安装的,因此不可能出现每隔几分之一秒就将这些数字写入磁盘的情况。事实上,/proc
磁盘上没有任何内容。由于procfs
.
然后是临时文件。有可能,您的/tmp
已安装tmpfs
,这意味着它的内容存储在 RAM 中而不是磁盘上。
另一个有趣的地方是/dev/tcp
,用于与网络通信。在某些系统上,它甚至只存在于bash
其他 shell 下,但不存在,因此它不可能位于这些系统的磁盘上。
这些例子都表明文件系统和硬盘驱动器是分开的,并且“一切都是文件”的理念不会因为I/O速度而影响性能。
答案2
不,我不会说 I/O 方面有惩罚。
也许这个短语过于简单化了。但在内核设备、文件中,一切都可以用文件描述符来引用,并且所有描述符都映射到虚拟文件系统上,就像文件系统一样,人们可以引用特定的文件系统。文件有名称(句柄)。
因此,内核不一定会/proc/vmstat
通过磁盘文件系统传递数据,但是您不必执行任何特殊操作来读取统计信息,您可以使用命令读取数据cat
。
尝试
watch head /proc/vmstat
您会看到数字每个时间间隔都会发生变化。
显然,某些文件具有特殊特征,可能需要比简单的打开/关闭/读/写/查找进行进一步的操作来操作,例如在串行设备上设置波特率是有意义的,但在磁盘上的文件上设置波特率则不然。