

Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Um trabalho que fiz no 4º semestre de ciência da computação na USP-RP, na disciplina "Algoritmos e estruturas de dados II". IMPORTANTE: hoje, com mais conhecimento, entendo que escrevi algumas definições incorretas se tratando de bitmap e DataBlock e pretendo atualizar em breve.
Tipologia: Manuais, Projetos, Pesquisas
1 / 3
Esta página não é visível na pré-visualização
Não perca as partes importantes!


Para escrever um novo bloco de memória, o bitmap (que aloca blocos e relaciona-os com números de inode) e o inode bitmap também devem ser atualizados. Um inode (index node) é uma estrutura que tem metadados dos arquivos, tais como tipo, tamanho, permissões e última modificação. Dado um inumber (número de inode), você sabe em qual inode está localizado e, com isso, sabe em qual bloco o arquivo está. A tabela 1 mostra os casos onde uma (ou mais) dessas três estruturas deixam de ser escritas - o “sim” ou “não” indica se a estrutura foi, ou não, escrita no journal.
Inode Bitmap DataBlock Problema
não não sim O conteúdo é escrito em disco, mas não há inode apontando para
Tabela 1. Possíveis problemas pela falta de uma ou mais estruturas do arquivo
Para evitar essas inconsistências, antes de escrever as estruturas é escrito uma nota (no journal, ou “diário”) do que o sistema está prestes a fazer, além de um identificador da transação (transaction identifier - TID), que fica em um bloco chamado “transactionend block”. Por esse motivo, journaling também é chamado de “write-ahead logging”, ou seja, escrever, num arquivo (log) antes de efetuar as transações. Após feito esse processo, um “checkpoint” é alcançado, e agora as estruturas de dados usuais podem ser efetivamente escritas. Assim, é possível recuperar o que estava sendo feito e qual erro ocorreu. Seria ideal escrever todos os processos no journal de uma vez, mas isso não é seguro. Uma alternativa é escrever tudo no journal de uma vez, exceto pelo transactionend block, que é feito na próxima operação.
Se o computador for reiniciado (por exemplo) e for verificado que esse bloco de final de transação não está no journal, é possível diagnosticar alguns erros, da seguinte forma: Se um erro acontecer antes de colocar o transactionend block, a operação é cancelada. Caso contrário, o sistema irá recuperar transações já feitas, repeti-las em ordem e, depois, continuar a atualizar o arquivo de onde parou (processo chamado redo logging). O journal é liberado atualizando seu superbloco. Após o checkpoint, o conteúdo pode ser efetivamente escrito em disco.
aquele arquivo nem o bitmap pra dizer onde o bloco foi alocado. É como se nenhum conteúdo tivesse sido escrito.
sim não não Existe um inode para aquele arquivo, mas ele aponta para algum lixo, visto que o conteúdo não foi efetivamente escrito. É o chamado “file-system inconsistency”
não sim não O bitmap indica que um bloco foi alocado, mas não há conteúdo para esse arquivo nem inode apontando para ele. Isso forma um “space leak”, um espaço que não poderá ser utilizado pelo FS posteriormente.
sim sim não Um bloco foi alocado e tem um bitmap para ele, assim como um inode para esse arquivo. Entretanto, o conteúdo foi corrompido.
sim não sim Existe conteúdo escrito, para o qual um inode aponta para ele, mas o bitmap não aponta para a região desse novo bloco alocado.
não sim sim O bloco foi escrito e o bitmap indica qual bloco foi alocado, mas não é possível saber qual é o arquivo de referência para aquele conteúdo.