Não é claro, sem contexto adicional, determinar se Stalling está falando sobre a tabela de inodes na memória ou as tabelas com no sistema de arquivos. Emprestei uma edição muito anterior do livro a alguém, mas nunca a recuperei; então eu não consigo pesquisar o contexto.
Existem três "tabelas de arquivos", mas a que está sendo discutida aqui é mais comumente chamada de " tabela de inode na memória "; o segundo é comumente chamado de " tabela de arquivos abertos " e existe por processo. Ambas as tabelas estão na memória do kernel e não são acessíveis a um programa. A terceira "tabela" é realmente dois conjuntos de tabelas dentro do sistema de arquivos (em disco), a primeira é a tabela de inodes em disco e a segunda são os próprios blocos de dados (nota: essa discussão se refere ao gerenciamento tradicional de sistemas de arquivos UNIX, os sistemas mais novos podem organizações diferentes). As entradas na tabela de inodes possuem sequências de referências em blocos de dados que contêm blocos de referência indiretos ou dados reais. A chave para um arquivono sistema de arquivos está o inode, não os próprios blocos de dados. Quando Stalling está falando sobre uma "tabela de arquivos" em disco, geralmente será a tabela "menor" no disco que indica arquivos, como a tabela de inodes ou a tabela de definição de blocos nos sistemas FAT.
Em termos da tabela de inodes na memória, o inode é carregado no sistema de arquivos, seu valor st_nlink é incrementado e, em seguida, tornado acessível ao restante do sistema, quando os dados do inode são gravados no disco, o st_ctime é atualizado. Se o inode não for mais necessário na memória, o valor st_nlink será diminuído e a entrada na tabela será marcada como livre. Cada processo terá início com referências a cerca de três ou cinco entradas no inode tabela em memória: os inodes de stdin
, stdout
, stderr
- estas são muitas vezes um arquivo de dispositivo (tty) - e, em seguida, as referências ao diretório atual e o diretório raiz. Um inode residirá na tabela apenas uma vez, portanto, pode haver várias referências a um único inode na tabela.
A tabela de arquivos abertos é mantida por processo e contém referências na tabela de inodos da memória, além de ponteiros para buffers e informações de estado (como fseek(2)
valor e sinalizadores de open(2)
. O descritor de arquivo é literalmente um índice da tabela de arquivos abertos; mas a maioria as pessoas se referem à entrada na tabela de arquivos abertos ao falar sobre o "descritor de arquivos".
Quando um arquivo é aberto usando open(2)
, é encontrada uma entrada disponível na tabela de arquivos abertos, o inode da referência de arquivo pelo nome do caminho é determinado, esse inode é carregado na tabela de inodes da memória, se ainda não estiver carregado, a contagem de st_nlink é aumentada e a entrada do inode é referenciada no descritor de arquivo, os sinalizadores são configurados e os buffers são alocados. Quando fechado, ocorre o inverso.
As rotinas no kernel são chamadas de " sistema de gerenciamento de arquivos " e o " sistema de arquivos " é a organização em disco. Atualmente, existem vários módulos 'plugáveis' que podem ser carregados ( modprobe(8)
) no sistema de gerenciamento de arquivos para diferentes organizações em disco. Por exemplo, existem tipos de sistema de arquivos ext2 / ext3 / ext4, e cada um deles possui um módulo diferente no sistema de gerenciamento de arquivos do kernel; o mesmo com ntfs, sbfs, nfs, vfat, jfs, etc.
Isso é um pouco mais demorado do que eu pretendia, então vou parar por aqui.