use*_*432 2 linux cgroups linux-kernel
所有这一切,而我一直认为 mkdir 只能创建目录。但是我很惊讶地发现它也能够在某些条件下创建文件。我最近开始使用 cgroups,当我在 /cgroup 下运行“mkdir”命令时,它创建了文件和目录。
[abc@master ~]$ which mkdir
/bin/mkdir
[abc@master ~]$ mkdir /cgroup/cpu/group0
[abc@master ~]$ ls /cgroup/cpu/group0/
cgroup.event_control cpu.cfs_period_us cpu.rt_period_us cpu.shares
notify_on_release cgroup.procs cpu.cfs_quota_us cpu.rt_runtime_us
cpu.stat tasks.
Run Code Online (Sandbox Code Playgroud)
该mkdir命令如何能够创建文件和目录?
我可以看到这只发生在 cgroups 下。操作系统如何区分cgroup下的mkdir和别处的mkdir?
我试图在网上找到答案,但找不到任何真正有用的东西。任何相关信息将不胜感激。
这是cgroup文件系统的一个特性,而不是mkdir命令的一个特性。该mkdir命令只是调用mkdir系统调用。的mkdir系统调用调用VFS在内核中,目录是由在目录树分析挂载点的分级结构来创建,其对所述命令和特别确定一些分析上什么文件系统层。然后 VFS 层调用该文件系统的驱动程序中的代码,即文件cgroup系统驱动程序。
文件系统驱动程序为每个文件系统操作(打开文件、读取、写入、创建目录、删除目录等)做什么取决于该文件系统驱动程序。用于磁盘存储的文件系统将修改磁盘内容以按照指示记录目录的存在。网络文件系统将通过网络发送命令。在proc文件系统报告有关的过程和有关内核和文件系统的cgroup的做类似的事情。
cgroup 文件系统的行为在内核文档中进行了描述。
使用 mkdir 系统调用或 shell 命令创建新的 cgroup。cgroup 的属性(例如其标志)通过写入该 cgroups 目录中的相应文件来修改,如上所列。
当 cgroup 文件系统驱动程序mkdir在层次结构的该级别收到命令时,它会将其解释为“创建一个具有给定名称的新 cgroup”。当它在 中接收到readdir命令(枚举目录条目的系统调用)时/cgroup/cpu0,它会列出该 CPU 上的 cgroup。当它在 中接收到readdir命令时/cgroup/cpu0/group0,它会报告一组固定的文件,这些文件反映了存储在内存中的 cgroup 参数。当它收到对这些文件的read或write命令时,它会报告或修改相应的参数。
cgroup 的设计者选择通过文件系统完全控制它,而不是添加新的系统调用。这使得它易于使用,而无需开发大量库代码和许多实用程序。