OS_Filesystem - um sistema de arquivos virtual (C ++)
Introdução
Este é um sistema de arquivos virtual que imita o Linux. O sistema é hospedado por um arquivo de disco virtual. Ele simula a leitura e a escrita do disco com a leitura e a escrita de arquivos sem envolver o driver subjacente.
Para escrever um sistema de arquivos Linux de imitação simples, você deve primeiro projetar uma estrutura básica que inclua inode, bloco, superblock, layout de disco virtual, alocação de espaço e outras informações. O início do sistema de arquivos é um superbloco que contém informações importantes sobre o sistema, incluindo o número e o tamanho do inode e os blocos. Para o inode, geralmente precisa ocupar um por cento do espaço do disco, mas esse é um sistema pequeno com um tamanho total de apenas 5m, portanto, há muito pouco espaço alocado para a área do inode, e a maior parte do espaço restante é a área do bloco.
O plano geral para este sistema de arquivos é o seguinte:

Como o tempo é apertado ao escrever o programa, eu o escrevi apenas por 4 dias antes de aceitá -lo, para que o código não tenha tempo para otimizá -lo, e alguns lugares parecerão redundantes, então não se surpreenda.
Embora o tempo seja limitado, também implementa a função de um editor VI. A escrita é relativamente simples e o código é muito confuso. Se você tiver tempo para melhorá -lo.
Em geral, o código ainda precisa ser otimizado. Bem -vindo a dar mais sugestões e encontrar mais falhas.
Como usar
Etapa 1: Baixe o projeto
git clone https://github.com/windcode/os_filesystem.git
Etapa 2: Abra o projeto com VC ++ 6.0
Clique duas vezes no arquivo mingos.dsw no diretório ou arraste o arquivo para a interface VC ++ 6.0.
Etapa 3: compilar, link, executar

ou
Etapa 1: Execute o arquivo mingos.exe diretamente na pasta /debug
característica
- Primeira execução, crie arquivos de disco virtual

O usuário padrão é root e a senha é root


- Adicionar, excluir, fazer login, fazer login (UserAdd, UserDel, Logout)

- Modificar permissões de arquivo ou diretório (CHMOD)

- Escrever e ler são restringidos por permissões

- Adicione e exclua arquivos/pastas (toque, rm, mkdir, rmdir)

- Visualizar informações do sistema (super, inode, bloco)

- Imite um VI Text Editor (VI)

Inode gerencia informações de arquivo e diretório
Use o método de vinculação do grupo para gerenciar a alocação de blocos ociosos
- Processo de alocação de bloco: quando um bloco precisa ser alocado, a parte superior da pilha de blocos livres retira um endereço de bloco ocioso como o bloco recém -alocado. Quando a pilha está vazia, a pilha no bloco livre representada pelo endereço da pilha inferior é usada como a nova pilha de blocos livres.
- Processo de reciclagem de bloco: Ao reciclar um bloco, verifique se a pilha está cheia. Se não estiver satisfeito, o ponteiro da pilha atual será movido para cima e o endereço do bloco a ser reciclado será colocado na parte superior da nova pilha. Se a pilha estiver cheia, o bloco a ser reciclado será usado como a nova pilha de blocos livres, e o endereço do elemento inferior dessa pilha de blocos livres será definido para a pilha de blocos livres agora.
- O bitmap de bloco e o Superblock precisam ser atualizados durante a alocação e reciclagem.
Distribuição/reciclagem de inode
- A alocação e reciclagem do inode é relativamente simples, e a alocação e a reciclagem sequenciais são adotadas.
- Quando for necessária alocação, encontre um inode ocioso no bitmap inode em ordem e encontre o número que retorna o inode com êxito.
- Ao reciclar, basta atualizar o bitmap inode.
- A alocação e a reciclagem requerem atualização do bitmap inode.
Perceber
- O ambiente de corrida é VC ++ 6.0