Serena é um sistema operacional experimental baseado em princípios modernos de design com suporte para concorrência preventiva difundida e vários usuários. O kernel é orientado a objetos e projetado para ser uma plataforma cruzada e provas futuras. Ele é executado em sistemas Amiga com uma CPU 68030 ou melhor instalada.
Um aspecto que o diferencia do OSS tradicional baseado em rosquear é que ele é puramente construído em torno das filas de expedição um pouco semelhante ao grande despacho central da Apple. Não há suporte para criar tópicos no espaço do usuário nem no espaço do kernel. Em vez disso, o kernel implementa um conceito de processador virtual, onde gerencia dinamicamente um pool de processadores virtuais. O tamanho do pool é ajustado automaticamente com base nas necessidades das filas de despacho e os processadores virtuais são atribuídos aos processos conforme necessário. Toda a simultaneidade do kernel e do espaço do usuário é alcançada criando filas de expedição e enviando itens de trabalho para despachar filas. Os itens de trabalho são simplesmente fechamentos (uma função do estado associado) do ponto de vista do usuário.
Outro aspecto interessante é o manuseio de interrupções. O código que deseja reagir a uma interrupção pode registrar um semáforo de contagem com o controlador de interrupção para a interrupção que ele deseja manusear. O controlador de interrupção sinaliza o semáforo toda vez que a interrupção ocorre. O uso de um semáforo de contagem garante que o código interessado na interrupção não perca a ocorrência de uma interrupção. A vantagem de traduzir interrupções em sinais em um semáforo é que o código de manuseio de interrupções é executado em um contexto bem definido, que é o mesmo tipo de contexto em que qualquer outro tipo de código é executado. Ele também fornece o código de manuseio de interrupção mais flexibilidade, pois não precisa reagir imediatamente a uma interrupção. As informações que uma interrupção aconteceu nunca se perdeu, se o código do manipulador de interrupções estava ocupado com outras coisas no momento da interrupção ou não.
O kernel é geralmente reentrante. Isso significa que os processadores virtuais continuam sendo agendados e o contexto foi alterado preventivamente, mesmo enquanto a CPU está executando dentro do kernel. Além disso, um complemento completo das semáforos, variáveis de condição e APIs de bloqueio estão disponíveis dentro do kernel. A API desses objetos se assemelha ao que você encontraria em uma implementação de espaço do usuário de um sistema operacional tradicional.
Serena implementa uma estrutura de processos hierárquicos semelhante ao POSIX. Um processo pode gerar vários processos filhos e pode passar em uma linha de comando e variáveis de ambiente para seus filhos. Um processo acessa recursos de E/S via canais de E/S, que são semelhantes aos descritores de arquivos no POSIX.
Existem duas diferenças notáveis entre o modelo de processo do estilo Posix e o modelo Serena: primeiro em vez de usar o Fork () seguido pelo EXEC () para gerar um novo processo, você usa uma única função em Serena chamada Process_spawn (). Isso torna a geração de um processo muito mais rápido e significativamente menos propenso a erros.
Em segundo lugar, um processo infantil não herda os descritores de arquivos de seus pais por padrão. A única exceção são os descritores de arquivo 0, 1 e 2 que representam os fluxos de entrada e saída de terminais. Esse modelo é muito menos propenso a erros em comparação com o modelo POSIX, onde um processo deve ter cuidado para fechar os descritores de arquivos que ele não deseja passar para um processo filho antes de gerar uma criança. Fazer isso foi fácil nos primeiros dias do UNIX, quando os aplicativos eram praticamente independentes e quando não havia suporte para bibliotecas dinâmicas. Hoje é o contrário, porque os aplicativos são muito mais complexos e dependem de muitas bibliotecas de terceiros.
O formato de arquivo executável neste momento é o formato de arquivo Atari St Gemdos, que é um em relação ao formato executável de AOUT. Esse formato de arquivo será substituído por um formato de arquivo que poderá suportar bibliotecas dinâmicas. No entanto, por enquanto é bom o suficiente para fazer o trabalho.
O kernel implementa o Serenafs, que é um sistema de arquivos hierárquicos com permissões e informações de usuário e grupo. Um sistema de arquivos pode ser montado na parte superior de um diretório localizado em outro sistema de arquivos para expandir o espaço para nome de arquivos. Tudo isso funciona de maneira semelhante a como funciona nos sistemas POSIX. Um processo que deseja gerar um processo infantil pode especificar que o processo infantil deve ser confinado a uma sub-árvore do espaço para nome do sistema de arquivos global.
O sistema de arquivos de inicialização está atualmente baseado em RAM. A ROM contém uma imagem de disco criada com a ferramenta DiskImage e que serve como um modelo para o disco RAM. Esta imagem de disco ROM é copiada para a RAM no momento da inicialização.
O espaço do usuário possui suporte para LIBC, LibSystem, Libclap e o início da libm. Libsystem é uma biblioteca que implementa o lado do espaço do usuário da interface do kernel. Libclap é uma biblioteca que implementa o argumento que analisa os programas de interface da linha de comando.
O Serena OS vem com um shell que implementa uma linguagem de shell formalmente definida. Você pode encontrar o documento do shell aqui.
Os seguintes serviços do kernel são implementados no momento:
Os seguintes serviços de espaço do usuário estão disponíveis no momento:
Os seguintes programas espaciais do usuário estão disponíveis no momento:
O nível de integridade e correção dos vários módulos varia um pouco neste momento. As coisas estão planejadas genericamente para melhorar com o tempo :)
O hardware a seguir é suportado neste momento:
Definir o projeto para o desenvolvimento e executar o sistema operacional está um pouco envolvido. As instruções abaixo são para o Windows, mas devem funcionar praticamente o mesmo no Linux e MacOS.
A primeira coisa que você precisará é um emulador de computador Amiga. Estou usando winsae que você pode baixar em https://www.winuae.net/download
Faça o download do instalador da UNUAAE e execute -o. Isso colocará o emulador dentro do diretório 'Arquivos de programas' na sua unidade de inicialização.
Em seguida, faça o download e instale o compilador e o assembler VBCC necessário para criar o sistema operacional. Você pode encontrar a página inicial do projeto em http://www.compilers.de/vbcc.html e na página de download das ferramentas em http://sun.hasenbraten.de/vbcc.
A versão que estou usando para o meu desenvolvimento e que sei que funciona corretamente no Windows 11 é 0,9h. Certifique -se de adicionar uma variável de ambiente com o nome VBCC , que aponta para a pasta VBCC no seu disco e adicione a pasta vbccbin à variável do ambiente PATH .
Observe que você precisa instalar as ferramentas do Microsoft Visual Studio e da linha de comando porque o compilador Microsoft C é necessário para criar as ferramentas de construção no Windows.
Finalmente, instale o GNU para o Windows e verifique se está na variável do ambiente PATH . Uma maneira direta de fazer isso é executando o seguinte comando Winget em uma janela do shell: winget install GnuWin32.Make .
Você só precisa executar esta etapa uma vez e antes de tentar criar o sistema operacional. O objetivo desta etapa é criar algumas ferramentas necessárias para criar o kernel e as bibliotecas espaciais do usuário. Você pode encontrar documentação para essas ferramentas aqui.
Primeiro, abra um prompt de comando desenvolvedor no terminal do Windows e depois CD na pasta Serena/Tools . Digite o retorno e make o retorno. Isso criará todas as ferramentas necessárias e as colocará dentro de uma pasta Serena/build/tools . As ferramentas serão mantidas neste local, mesmo se você fizer uma limpeza completa do projeto do sistema operacional.
Abra a pasta Serena Project no Código do Visual Studio e selecione Build All na Run Build Task... menu. Isso construirá o kernel, libsystem, libc, libm e shell e gerará um único arquivo Serena.rom dentro da Serena/product/Kernel/ pasta. Este arquivo ROM contém o kernel, as bibliotecas de espaço do usuário e o shell.
Primeiro, você precisará criar uma configuração do AMIGA com pelo menos uma CPU 68030 (ou seja, Amiga 3000 ou 4000) em Urs, se você ainda não o fez. A maneira mais fácil de fazer isso é ir para o rápido e selecionar A4000 como modelo. Em seguida, vá para a página de hardware/ROM e atualize o campo de texto "Arquivo ROM principal", de modo que aponte para o arquivo Serena.rom dentro da pasta Serena/build/product/ no seu disco. Por fim, dê ao seu Amiga virtual pelo menos 1 MB de RAM rápida, acessando a página de hardware/RAM e definindo a entrada "lenta" para 1 MB. Salve esta configuração para que você não precise recriá -la na próxima vez que quiser executar o sistema operacional.
Carregue a configuração e pressione o botão Iniciar ou simplesmente clique duas vezes na configuração na página Configurações para executar o sistema operacional. O emulador deve abrir uma tela que mostre uma mensagem de inicialização e, em seguida, um shell prompt. Consulte a página do shell para obter uma lista de comandos suportados pelo shell.
Distribuído sob a licença do MIT. Consulte LICENSE.txt para obter mais informações.
Dietmar Planitzer - @linkedin
Link do projeto: https://github.com/dplanitzer/serena