mkdir sob / cgroup cria arquivos junto com diretórios

1

Tudo isso enquanto eu penso que o mkdir só pode criar diretórios. Mas estou surpreso em ver que ele foi capaz de criar arquivos também sob algumas condições. Eu comecei recentemente a trabalhar com cgroups e quando eu executo o comando 'mkdir' em / cgroup, ele criou arquivos junto com diretórios.

[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.

Como o comando mkdir é capaz de criar arquivos junto com diretórios?

Eu posso ver que isso só acontece no cgroups. Como o SO distingue entre mkdir sob cgroup e mkdir em algum outro lugar?

Eu tentei encontrar a resposta on-line, mas não consegui encontrar nada realmente útil. Qualquer informação relevante será realmente apreciada.

    
por user3748432 16.03.2016 / 21:30

1 resposta

3

É um recurso do sistema de arquivos cgroup , não um recurso do comando mkdir . O comando mkdir apenas invoca a chamada do sistema mkdir . A chamada do sistema mkdir invoca a camada VFS no kernel, que executa algumas análises no comando e, em particular, determina em qual sistema de arquivos o diretório deve ser criado analisando a hierarquia dos pontos de montagem na árvore de diretórios. Em seguida, a camada VFS chama o código no driver para esse sistema de arquivos, que é o driver do sistema de arquivos cgroup .

O que um driver de sistema de arquivos faz para cada operação do sistema de arquivos (abrir, ler, gravar, criar diretório, remover diretório, etc.) depende do driver do sistema de arquivos. Um sistema de arquivos para armazenamento em disco modificará o conteúdo do disco para registrar a existência de um diretório conforme orientado. Um sistema de arquivos de rede enviará um comando pela rede. O sistema de arquivos proc reporta informações sobre processos e sobre o kernel , e o sistema de arquivos cgroup faz algo similar.

O comportamento do sistema de arquivos cgroup é descrito na documentação do kernel .

New cgroups are created using the mkdir system call or shell command. The properties of a cgroup, such as its flags, are modified by writing to the appropriate file in that cgroups directory, as listed above.

Quando o driver do sistema de arquivos cgroup recebe um comando mkdir nesse nível da hierarquia, ele interpreta que significa “criar um novo cgroup” com o nome dado. Quando ele recebe um comando readdir (a chamada do sistema que enumera entradas de diretório) em /cgroup/cpu0 , ele lista os cgroups nessa CPU. Quando recebe um comando readdir em /cgroup/cpu0/group0 , ele reporta um conjunto fixo de arquivos que refletem os parâmetros do cgroup como armazenados na memória. Quando recebe um comando read ou write nesses arquivos, ele relata ou modifica o parâmetro correspondente.

Os projetistas do cgroup optaram por controlá-lo totalmente através do sistema de arquivos, em vez de adicionar novas chamadas ao sistema. Isso facilita o uso sem ter que desenvolver muito código de biblioteca e muitos utilitários.

    
por 17.03.2016 / 00:42