Por que alguns sistemas de arquivos por aí têm imaps para imaps para imaps (vários imaps)?

1

Parece que o objetivo de um imap é manter pontos em inodes individuais para que as gravações possam ser feitas de maneira realmente rápida (alguém pode explicar como isso funciona também?), mas eu estava me perguntando qual seria o ponto de ter imaps que contêm ponteiros para outros imaps foi. Não só isso, mas eles existem em vários níveis também ...

    
por Kaitlyn Mcmordie 26.10.2011 / 21:06

2 respostas

2

Um Mapa do iNode (às vezes desconfigurado para o imap, embora o IMAP seja um protocolo de e-mail), é um ponteiro para um iNode (parece que você já tem isso). Isso é usado no journaling (principalmente Log File Systems) como uma camada de abstração. Basicamente, quando você deseja procurar um iNode do File System, uma camada de conversão procura os Mapas de iNode para esse local e retorna o iNode atual para o qual o sistema de arquivos deve estar apontando. Esta localização é então lida para encontrar o arquivo.

Alguns sistemas de arquivos podem empilhá-los. Quando um único iNode lógico do sistema de arquivos é gravado várias vezes sem liberar o diário / log, cada gravação usará um novo local físico no disco, incluindo um iNode apontando para esse local. Cada Mapa desatualizado do iNode é atualizado para apontar para o novo Mapa do iNode e, eventualmente, para o iNode atual.

O raciocínio por trás disso não é velocidade, mas consistência. Durante uma gravação, um novo local é selecionado no disco, a gravação está sendo feita e, em seguida, o local antigo é atualizado para apontar para o novo local. Quando o diário / log é consolidado, o sistema de arquivos é atualizado para apontar para o local mais recente e os locais antigos são liberados. Desta forma, se houver uma falha de energia a qualquer momento, você nunca perderá dados, ou o Sistema de Arquivos aponta para a versão antiga do arquivo ou para a nova, mas nunca mais (como meio arquivo gravado, ou dados corrompidos, ou a grama).

    
por 26.10.2011 / 21:18
1

É uma maneira bastante típica de lidar com estruturas que apontam para outras estruturas e podem variar radicalmente de tamanho. O sistema de arquivos já está gerenciando blocos de tamanho fixo de espaço de armazenamento na partição. Então você geralmente usa esse tamanho (ou um múltiplo dele) como tamanho da sua unidade.

Se você tiver poucos objetos suficientes para mantê-los em um bloco, faça isso. Se um bloco estourar, você substitui um item desse bloco por um ponteiro para um bloco recém-alocado que contém o ponteiro que você substituiu e o novo ponteiro.

Este método é escolhido porque:

  1. Funciona muito bem com o cache. Os blocos de nível mais alto tendem a ser muito acessados e ficam em cache.

  2. Requer apenas o rastreamento de espaço livre em unidades de tamanho de bloco, portanto, funciona bem com o gerenciamento de espaço livre baseado em bitmap.

  3. Ele se adapta bem, com um tempo médio de pesquisa aproximadamente proporcional ao log do número de elementos. (Teoricamente, se você armazenar 32 ponteiros em um bloco, poderá acessar 32 ^ n apontadores com n pesquisas.)

  4. Ele equilibra bem dinamicamente. À medida que você adiciona ou remove ponteiros, operações bastante simples podem ser executadas para manter a árvore equilibrada. (Você não quer ter uma árvore longa e magra. Você quer manter a gordura e a gordura. Isso é realmente muito fácil de fazer.)

por 26.10.2011 / 21:57