Como o Linux resolve os nomes de caminho com a ajuda do cache dentry?

4
Ao lidar com o sistema de arquivos virtual do Linux, eu me deparei com um pequeno problema de entender como os nomes de caminhos são resolvidos se eles já estão em cache como dentries no cache do dentry. Eu sei que os diferentes dentries são organizados em uma tabela de hash para acelerar futuras pesquisas de nomes de caminho já resolvidos. O livro que estou lendo no momento está dizendo o seguinte:

d_hash(dentry, name)
Creates a hash value; this function is a filesystem-specific hash function for the dentry hash table. The dentry parameter identifies the directory containing the component. The name parameter points to a structure containing both the pathname component to be looked up and the value produced by the hash function.
...
The hash table is implemented by means of a dentry_hashtable array. Each element is a pointer to a list of dentries that hash to the same hash table value. The array's size usually depends on the amount of RAM installed in the system; the default value is 256 entries per megabyte of RAM. The d_hash field of the dentry object contains pointers to the adjacent elements in the list associated with a single hash value. The hash function produces its value from both the dentry object of the directory and the filename.

Understanding the Linux Kernel

Vamos supor que temos o seguinte caminho "/ home / test / file". Agora o VFS cria dentries para "/", "home", "test" e "file".
Agora eu não entendo como o valor de hash correspondente para cada dentry é calculado e como o VFS procura um nome de caminho através dessas dentries em cache na tabela de hash. No meu entendimento, o VFS faz o seguinte:

  1. Calcule o valor de hash de dentry para "/" e nome de arquivo "home"
  2. Procurar valor de hash para dentry correspondente de "home" na tabela de hash
  3. Calcule o valor de hash do dentry para "home" e nome do arquivo "test"
  4. Procurar valor de hash para dentry correspondente de "teste" na tabela de hash
  5. Calcule o valor de hash do dentry para "teste" e nome do arquivo "arquivo"
  6. Consultar o valor de hash do dentry correspondente de "arquivo" na tabela de hash

Mas em alguns sites na Internet parece que o VFS apenas hashes o nome do caminho completo de uma só vez e procura o dentry correspondente com o valor de hash resultante.

Então seria ótimo se alguém trouxesse alguma luz para a escuridão.

    
por idlmn89 03.04.2018 / 04:36

0 respostas

Tags