YAFFS - YAFFS

YAFFS
Desenvolvedor (s) Charles Manning
Nome completo Mais um sistema de arquivos Flash
Outro
Sistemas operacionais suportados Android , Firefox OS , Linux , Windows CE , pSOS , RTEMS , eCos , ThreadX

Yaffs ( Yet Another Flash File System ) é um sistema de arquivos projetado e escrito por Charles Manning para a empresa Aleph One.

Yaffs1 foi a primeira versão deste sistema de arquivos e foi projetado para os chips NAND atuais com tamanho de página de 512 bytes (área sobressalente de + 16 bytes (OOB; Out-Of-Band)). O trabalho começou em 2002 e foi lançado pela primeira vez no mesmo ano. O trabalho inicial foi patrocinado por Toby Churchill Ltd e Brightstar Engineering.

Esses chips mais antigos geralmente permitem 2 ou 3 ciclos de gravação por página. O YAFFS tira vantagem disso: as páginas sujas são marcadas ao gravar em um byte de área sobressalente específico. Os chips flash NAND mais recentes têm páginas maiores, as primeiras 2K páginas (+ 64 bytes OOB), depois 4K, com requisitos de gravação mais rígidos. Cada página em um bloco de apagamento (128 kilobytes) deve ser gravada em ordem sequencial e cada página deve ser gravada apenas uma vez.

Projetar um sistema de armazenamento que impõe uma "regra de gravação única" ("propriedade de gravação única") tem várias vantagens.

O YAFFS2 foi projetado para acomodar esses chips mais recentes. Ele foi baseado no código-fonte YAFFS1, com a principal diferença sendo que as estruturas internas não são fixas para assumir o tamanho de 512 bytes e um número de sequência de bloco é colocado em cada página escrita. Desta forma, as páginas mais antigas podem ser substituídas logicamente sem violar a regra "escrever uma vez". Foi lançado no final de 2003.

YAFFS é um sistema de arquivos estruturado em log robusto que mantém a integridade dos dados como alta prioridade. Uma meta secundária do YAFFS é o alto desempenho. O YAFFS normalmente supera a maioria das alternativas. Ele também foi projetado para ser portátil e foi usado em Linux , WinCE , pSOS , RTEMS , eCos , ThreadX e vários sistemas operacionais para fins especiais. Uma variante 'YAFFS / Direct' é usada em situações onde não há SO, SOs embutidos ou bootloaders: tem o mesmo sistema de arquivos principal, mas interface mais simples para o código de nível superior e inferior e o hardware NAND flash.

A base de código YAFFS é licenciada tanto pela GPL quanto pelas licenças por produto disponíveis no Aleph One.

YAFFS1

Não há nenhum procedimento especial para inicializar um sistema de arquivos YAFFS além de simplesmente apagar a memória flash. Quando um bloco inválido é encontrado, o YAFFS segue o esquema de mídia inteligente de marcar o quinto byte da área sobressalente do bloco. Os blocos marcados como tal permanecem não alocados a partir de então.

Para gravar dados de arquivo, YAFFS inicialmente grava uma página inteira (pedaço na terminologia YAFFS) que descreve os metadados do arquivo , como carimbos de data / hora , nome, caminho, etc. O novo arquivo recebe um número de ID de objeto exclusivo; cada bloco de dados dentro do arquivo conterá esse ID de objeto exclusivo dentro da área sobressalente. O YAFFS mantém uma estrutura em árvore na RAM da localização física desses pedaços. Quando um pedaço não é mais válido (o arquivo é excluído ou partes do arquivo são sobrescritas), o YAFFS marca um byte específico na área sobressalente do pedaço como 'sujo'. Quando um bloco inteiro (32 páginas) é marcado como sujo, YAFFS pode apagar o bloco e recuperar o espaço. Quando o espaço livre do sistema de arquivos é baixo, YAFFS consolida um grupo de boas páginas em um novo bloco. O YAFFS então recupera o espaço usado pelas páginas sujas dentro de cada um dos blocos originais.

Quando um sistema YAFFS monta um dispositivo flash NAND , ele deve visitar cada bloco para verificar se há dados válidos examinando sua área sobressalente. Com essas informações, ele reconstitui a estrutura de dados da árvore residente na memória.

YAFFS2

YAFFS2 é semelhante em conceito ao YAFFS1 e compartilha muito do mesmo código; a base de código YAFFS2 suporta formatos de dados YAFFS1 por meio de compatibilidade com versões anteriores. A principal diferença é que o YAFFS2 precisa superar obstáculos significativos para atender ao requisito de "gravar uma vez" do flash NAND moderno.

YAFFS2 marca cada bloco recém-escrito com um número de sequência que aumenta monotonicamente . A sequência dos blocos pode ser inferida a partir do número da sequência do bloco e do deslocamento do bloco dentro do bloco. Assim, quando o YAFFS2 varre o flash e detecta vários blocos que têm ObjectIDs e ChunkNumbers idênticos, ele pode escolher qual usar tomando o maior número de sequência. Por razões de eficiência, o YAFFS2 também introduz o conceito de cabeçotes de redução. Por exemplo, quando um arquivo é redimensionado para um tamanho menor, YAFFS1 marcará todos os fragmentos afetados como sujos - YAFFS2 não pode fazer isso devido à regra "gravar uma vez". Em vez disso, YAFFS2 grava um "cabeçalho de redução", que indica que um certo número de páginas antes desse ponto é inválido. Isso permite que o YAFFS2 reconstrua o estado final do sistema de arquivos quando o sistema for reinicializado.

YAFFS2 usa uma definição mais abstrata do flash NAND, permitindo que ele seja usado com uma variedade mais ampla de peças de flash com diferentes geometrias, regras de manuseio de blocos defeituosos etc.

Posteriormente, o YAFFS2 adicionou suporte para pontos de verificação , que contornam a varredura de montagem normal, permitindo tempos de montagem muito rápidos. O desempenho pode variar, mas tempos de montagem de 3 segundos para 2 GB foram relatados.

Veja também

Referências

links externos