FrancisBFTC / KiddieOS_Development

O KiddieOS é um sistema operacional open-source básico em desenvolvimento pelo curso gratuito D.S.O.S [Desenvolvendo Sistemas Operacionais Simples]. A intenção deste sistema será: Criar, editar ou excluir arquivos, codificar em uma linguagem própria do sistema, criar objetos visuais e automatizados (desenhos) através desta linguagem, utilizar uma interface simples e intuitiva, criar novas interfaces gráficas, como: Janelas, botões, campos, etc... e estimular crianças, jovens e adultos a programar numa linguagem simples dentro do sistema operacional KiddieOS. A intenção do curso D.S.O.S é dá início ao desenvolvimento de sistemas operacionais utilizando a linguagem Assembly e entender a fundo sobre diversos conceitos internos deste tipo de sistema. Aqui neste repositório serão armazenados arquivos de APIs do KiddieOS, a imagem de disco para teste e futuramente - todo o sistema operacional completo. Visite o link abaixo para nos acompanhar no curso do Youtube, se inscreva neste canal para se manter atualizado e siga-me no GitHub. Vejo vocês lá:
MIT License
46 stars 5 forks source link

KiddieOS_v1.3.6: Processamento de caminhos completos #6

Closed FrancisBFTC closed 7 months ago

FrancisBFTC commented 1 year ago

Recursos/correções

Uma grande adaptação no Shell foi realizada, refatorando todo o código do Editor da CLI, excluindo várias partes desnecessárias e criando novas rotinas:

  1. Rotina Format_Command_Line é uma nova rotina que substitui basicamente 70% das rotinas antigas. Esta rotina é responsável por realizar a formatação de dados digitados da CLI, diferentemente de antes que a formatação era em tempo de digitação, atualmente esta formatação está em tempo de execução, isto é, minimizando o máximo possível de erros durante a escrita.

  2. O Format_Command_Line conta com uma série de rotinas adicionais para possibilitar o seu funcionamento:

A rotina Format_Command_Line é chamada em 2 comandos: READ e CD; Também é chamada pela rotina SearchToFileExec, onde nesta última a formatação de dados da CLI é essencial para adaptar toda a cadeia de diretórios para execução de programas. Cada nome de pasta ou arquivo formatado na cadeia, segue o padrão 8.3 e são preenchidos de espaços de forma dinâmica para o reconhecimento das entradas do FAT.

  1. Uma rotina chamada AssignDriveLetter também foi implementada com o objetivo de trabalhar indiretamente com o comando Assign, comando que altera a letra de unidade de disco na CLI. Antes da implementação, o comando Assign só poderia alterar a letra de unidade enquanto o sistema operacional estivesse executando, então após a reinicialização ou desligamento, a letra era resetada. Para possibilitar o armazenamento fixo da alteração da letra de unidade de disco, foi implementado a escrita em disco na rotina do comando Assign. No entanto, na inicialização do KiddieOS, era necessário uma nova funcionalidade que pudesse ler esta letra salva no disco para atribuir a uma variável do Shell, esta função é a AssignDriveLetter, que é processada tanto no OS_Inter_Shell (Interpretação originária de fora do Shell) quanto também na PrintAccess (Durante Inicialização da Interface do Shell).

  2. Foi implementado no comando CD a leitura encadeada de diretórios, possibilitando a leitura de cada pasta (caso houver) no buffer formatado até o encontro do arquivo. As adaptações do comando CD foram:

A leitura de diretórios encadeados não é somente útil para processar caminhos completos pelo comando CD, mas também para processar caminhos completos em diversos comandos e até mesmo, fora da execução de comandos, como uma mera execução de processos. Para esta finalidade foi implementada uma nova rotina explicada a seguir.

  1. A rotina Load_File_Path foi uma ótima maneira de generalizar a mesma execução da leitura de diretórios do comando CD, diversificando para outras rotinas. Segue uma forma mais dinâmica e menos estática, podendo até mesmo carregar um arquivo na memória no final da leitura encadeada de diretórios para o comando READ e pode até ignorar a leitura do arquivo final, quando a chamada de Load_File_Path for originado da rotina de execução de processos SearchFileToExec. O Load_File_Path também pode escolher ignorar o processamento de diretórios e saltar diretamente para o carregamento do arquivo, caso este se encontre disponível ou for chamado em um comando READ.

Em todas as formas de carregamento de arquivos e diretórios na memória, seja por qualquer comando, um processamento de códigos de erros pode ser chamado caso houver algum erro na leitura, o processamento é dado por 2 implementações:

Load_File_Path consegue processar caminhos completos, Retornando ou Avançando em diretórios, acessando cadeias completamente distintas e apresentar mensagens de erro caso houver erros na leitura. Pode ser invocado após a formatação dos comandos e diretórios pela rotina Format_Command_Line.

  1. Exec.SearchToFileExec é a rotina de execução de programas/processos. Atualmente ela pode executar programas KXE e MZ do DOS, onde o KXE tem uma estrutura muito básica no início, no entanto não contém um formato conhecido, apenas uma sessão de memória protegida virtual dada pela diretiva section para organizar os endereços do programa. O MZ ainda está passivo de explorações para a melhor maneira de alocação dos dados, como também a implementação possível do PE e do ELF em 32 bits. Nas implementações atuais, a Rotina SearchToFileExec apenas foi readaptada para as novas atualizações, que é a execução do Format_Command_Line + Load_File_Path, desta forma, foi preciso atualizar o código de SearchToFileExec afim de simplificar sua execução e melhorar sua legibilidade para futuras manutenções.

  2. Os_Inter_Shell que foi adicionado há alguns meses, porém não foi implementado 100%, então desta vez o trabalho foi mais otimizado, focando na execução de comandos e executáveis fora da CLI do Shell. Isto pode ser em um programa do usuário dada a String do comando, ou pode ser até mesmo na inicialização do sistema operacional, onde vários comandos pode ser executados em ordens subsequentes, muito similar ao processamento em lote do Windows ou do ShellScript, como também da maior parte dos sistemas operacionais antigos e modernos. As implementações atuais, por mais que não sejam suficientes, introduzem o conceito inicial de Execução de Scripts em Lote.

A respeito disso, a nova rotina Copy_Buffers foi adicionada para copiar os dados da String que está fora do Shell para um Buffer padrão de comandos e argumentos que está dentro do Shell, ou seja, nós temos uma mesma execução que minimiza os conflitos, por não necessitar utilizar Buffers diferentes. Em relação a isto, nós temos temos 2 Buffers principais de tamanho limitado no Shell:

  1. Todo o sistema operacional passou por um processo de Reorganização da memória RAM, onde a memória foi dividida e planejada em várias partes, sendo: MBR, VBR, FAT (Tabela), Entrada Raíz (Diretório), Entradas de Arquivos, Dados de arquivos, Código de processos/programas e kernel em 32 bits. Mesmo que a pilha e o segmento em modo real do Kernel, como melhor organização de endereçamento no carregamento de arquivos e do FAT tenha sido alternados/atualizados, fornecendo um maior controle em cada parte, isso não é o suficiente para o gerenciamento de memória, pois algumas operações de mapeamento de memória e configurações da GDT são necessárias, como também alocações e realocações dinâmicas. No entanto, algumas anotações e organizações já foram feitas para possibilitar este desenvolvendo, incluindo o início da Criação de um driver chamado memx86.drv que será responsável por realizar o gerenciamento e configurações iniciais da memória RAM. Mais detalhes sobre memória será abordado nas próximas atualizações.

  2. O Driver de teclado PS/2 também foi mais trabalhado, efetuando inicialização e configuração do teclado. Uma nova forma de inicialização do kernel também foi atribuída, imprimindo Strings de inicialização de cada Driver e sistema, afim de que o usuário possa acompanhar o que de fato está sendo carregando no sistema operacional, processos também podem ser executados e isso nos possibilitará configurar no futuro um arquivo chamado Autorun.ini onde poderíamos escolher como carregar Drivers, ícones, associações e programas na inicialização.

TODO: Próximas atribuições

FrancisBFTC commented 1 year ago

Wooohoo!! new features are coming soon... 🍡