Prática de Implementação: MY Micro File System (mymfs)

Lesandro Ponciano ORCID iD

27 de dezembro de 2024 (última atualização)

Objetivos

São dois os objetivos gerais desta prática:

  1. Exercitar conhecimentos de conceitos e algoritmos estudados associados a sistemas de arquivos;
  2. Implementar mecanismos e políticas fundamentais para o funcionamento de sistemas operacionais, incluindo controle e gerência de recursos.

O que deve ser feito

Deve-se implementar um sistema de arquivos virtual chamado mymfs, que executa em uma camada acima do sistema de arquivos local da máquina. A implementação deve ser feita em linguagem C ou C++. Pode-se usar bibliotecas C e C++.

O mymfs deve seguir as seguintes restrições associadas à sua construção:

  1. Ele executa em um conjunto de unidades de armazenamento. Esse conjunto tem no mínimo 3 e no máximo N unidades. Cada unidade é uma pendrive independente. O conjunto de unidades é aqui definido como unidade RAID X. Na prática, X é um RAID 5.
  2. Internamente e de forma transparente ao usuário, o mymfs é capaz de manipular arquivos de tamanho máximo de 500KB. Ou seja, internamente, e de forma transparente, dentro da unidade RAID X não pode existir nenhum arquivo com tamanho superior a 500KB.
  3. Todo e qualquer dado que precise ser armazenado pelo mymfs deve ser armazenado na unidade RAID X. A única exceção é o arquivo mymfs.temp que pode estar em uma pasta temp da máquina e neste arquivo pode conter apenas os nomes das unidades que compõem a unidade RAID X.
  4. Todos os dados de controle usados pelo mymfs (exceto o especificado no item acima) devem ficar dentro da unidade RAID X, em um único arquivo chamado mymfs.config, e em formato texto; esse arquivo deve ter tamanho máximo de 50KB.
  5. O arquivo de código executável deve ter nome mymfs.

O mymfs deve prover ao usuário as seguintes funcionalidades: config, import, listall, export, nlines, remove, removeall, grep, head100 e tail100. Cada uma dessas funcionalidades são executadas de forma parametrizada na chamada do executável. Seguir a especificação a seguir:

config

  • Exemplo de comando de execução: mymfs.exe X config D E F
  • Pré-condição: Não existe nenhum arquivo nas unidades D, E e F. Não existe um sistema de arquivos RAID X mymfs nas unidades D, E, F. (note que D, E e F é apenas um exemplo, podem ser outros nomes e quantidade maior que 3)
  • Pós-condição: Existe um sistema de arquivos mymfs na unidade RAID X, que é composta das unidades D, E, F. No terminal, confirmação da configuração ou erro associado à pré-condição.

import

  • Exemplo de comando de execução: mymfs.exe X import file.txt
  • Pré-condição: Existe um arquivo file.txt no local indicado fora do mymfs. Existe um sistema de arquivos mymfs na unidade RAID X. Não existe um arquivo file.txt, pelo mymfs, dentro da unidade RAID X.
  • Pós-condição: O arquivo file.txt está pelo mymfs dentro da unidade RAID X. No terminal, confirmação da importação ou erro associado à pré-condição.

listall

  • Exemplo de comando de execução: mymfs.exe X listall
  • Pré-condição: Existe um sistema de arquivos mymfs na unidade RAID X.
  • Pós-condição: Os nomes dos arquivos existentes na unidade RAID X, pelo mymfs, estão listados no terminal, um por linha. (Note que são os arquivos percebidos pelo usuário). O estado da unidade RAID X pelo mymfs não foi alterado.

export

  • Exemplo de comando de execução: mymfs.exe X export file.txt C:/file.txt
  • Pré-condição: Existe um sistema de arquivos mymfs na unidade raid X. O arquivo file.txt está, pelo mymfs, dentro da unidade RAID X. Não há um arquivo C:/file.txt.
  • Pós-condição: O estado da unidade RAID X pelo mymfs não foi alterado. O arquivo file.txt está em “C:” No terminal, confirmação da exportação ou erro associado à pré-condição.

remove

  • Exemplo de comando de execução: mymfs.exe X remove file.txt
  • Pré-condição: Existe um sistema de arquivos mymfs na unidade RAID X. O arquivo file.txt está, pelo mymfs, dentro da unidade RAID X.
  • Pós-condição: Remove o arquivo file.txt da unidade RAID X. O estado da unidade RAID X pelo mymfs foi alterado.

removeall

  • Exemplo de comando de execução: mymfs.exe X removeall
  • Pré-condição: Existe um sistema de arquivos mymfs na unidade raid X.
  • Pós-condição: Remove todos os arquivos que estão, pelo mymfs, na unidade RAID X. O estado da unidade RAID X pelo mymfs foi alterado. No terminal, confirmação da remoção ou erro associado à pré-condição.

head100

  • Exemplo de comando de execução: mymfs.exe X read100 file.txt
  • Pré-condição: Existe um sistema de arquivos mymfs na unidade RAID X. O arquivo file.txt está, pelo mymfs, dentro da unidade RAID X.
  • Pós-condição: No terminal, as 100 primeiras linhas do arquivo file.txt estão exibidas ou está exibido erro associado à pré-condição. O estado da unidade RAID X, pelo mymfs, não foi alterado.

tail100

  • Exemplo de comando de execução: mymfs.exe X tail100 file.txt
  • Pré-condição: Existe um sistema de arquivos mymfs na unidade RAID X. O arquivo file.txt está, pelo mymfs, dentro da unidade RAID X.
  • Pós-condição: No terminal, as 100 últimas linhas do arquivo file.txt estão exibidas ou está exibido erro associado à pré-condição. O estado da unidade RAID X, pelo mymfs, não foi alterado.

grep

  • Exemplo de comando de execução: mymfs.exe X grep word file.txt
  • Pré-condição: Existe um sistema de arquivos mymfs na unidade RAID X. O arquivo file.txt está, pelo mymfs, dentro da unidade RAID X.
  • Pós-condição: Se existe word no arquivo file.txt, está escrito no terminal “Encontrado” seguido do número da primeira linha do arquivo no qual word foi encontrado. Se não existe word no arquivo, está escrito no terminal apenas “Não encontrado”. Se alguma pré-condição não foi satisfeita, um erro está exibido no terminal. O estado da unidade RAID X, pelo mymfs, não foi alterado.

Confiabilidade e Desempenho

Na prática, X é um RAID 5, que tolera falha em até 1 das unidades que o compõe. Ou seja, pode-se remover 1 pendrive e nenhum dado será perdido, pois há redundância de acordo com o definido do RAID 5. No entanto, em vez de bit de paridade por setor, nossa versão simplificada do RAID funciona com compactação zip por arquivo interno do mymfs.

O RAID 5 também implementa desempenho por meio de paralelismo, então deve-se implementar um esquema multithread que faz leitura e escrita simultânea nas diversas unidades que compõe o RAID.

Material de Apoio