A tabela de arquivos está no sistema de arquivos ou na memória?

8

No contexto das tabelas de controle do sistema operacional, o termo "tabelas de arquivos" refere-se a uma estrutura de dados que faz parte do sistema de arquivos, ou que está na memória principal (e, nesse caso, suponho que teria apenas referências a Abrir arquivos)? Meu livro 1 diz

The tables provide information about the existence of files, their location on secondary memory, their current status, and other attributes. Much, if not all, of this information may be maintained and used by a file management system, in which case the OS has little or no knowledge of files.

Além disso, o que é um sistema de gerenciamento de arquivos? Isso significa o sistema de arquivos?

1 Stallings, Sistemas Operacionais , 7 th ed., p. 127

    
por Kazark 23.09.2011 / 22:55

1 resposta

20

Não está claro sem contexto adicional para determinar se o Stalling está falando sobre a tabela inode in-memory ou sobre as tabelas no sistema de arquivos. Eu emprestei uma edição muito anterior do livro para alguém, mas nunca consegui de volta; então eu não posso procurar o contexto sozinho.

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 estão acessíveis para um programa. A terceira "tabela" é realmente dois conjuntos de tabelas dentro do sistema de arquivos (no disco), o primeiro é a tabela de inodes no disco e o segundo são os próprios blocos de dados (note: Gerenciamento do sistema de arquivos UNIX, os sistemas mais novos podem ter organizações diferentes). As entradas na tabela de inode possuem sequências de referências em blocos de dados que contêm blocos de referência indireta ou dados reais. A chave para um arquivo no sistema de arquivos é 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 denota arquivos, como a tabela de inode ou a tabela de definição de bloco em sistemas FAT.

Em termos da tabela inode in-memory, o inode é carregado a partir do sistema de arquivos, seu valor st_nlink é incrementado e, em seguida, disponibilizado para o restante do sistema, quando os dados do inode são gravados em disco, st_ctime é Atualizada. 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. Todo processo começará com referências a cerca de três ou cinco entradas na tabela de inode da memória: os inodes de stdin , stdout , stderr - estes são geralmente um arquivo de dispositivo (tty) - e então referências à diretório atual e o diretório raiz. Um inode residirá apenas na tabela 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 inode da memória, bem como ponteiros para buffers e informações de estado (como fseek(2) value e sinalizadores de open(2) . O descritor de arquivo é literalmente um indexar na tabela de arquivos abertos, mas a maioria das pessoas se refere à entrada na tabela de arquivos abertos ao falar sobre o "descritor de arquivos".

Quando um arquivo é aberto usando open(2) , uma entrada disponível na tabela de arquivos abertos é encontrada, o inode da referência do arquivo pelo nome do caminho é determinado, esse inode é carregado na tabela de inode da memória, se não já carregada, a contagem st_nlink é aumentada e a entrada do inode é referenciada no descritor de arquivo, os flags são definidos e os buffers são alocados. Quando fechado, ocorre o inverso.

As rotinas dentro do kernel são chamadas de " sistema de gerenciamento de arquivos " e o " sistema de arquivos " é a organização no disco. Atualmente, há vários módulos 'plugáveis' que podem ser carregados ( modprobe(8) ) no sistema de gerenciamento de arquivos para diferentes organizações no 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 longo do que eu pretendia, então vou parar por aqui.

    
por 24.09.2011 / 02:28