Foi lançado o primeiro release do sistema operacional QSOE, projetado no estilo QNX e fornecido com dois microkernels intercambiáveis: 'Skimmer' e 'seL4'. No nível do núcleo, apenas o sistema de distribuição de recursos, o mecanismo de troca de mensagens síncronas (QNX IPC) e um núcleo minimalista são executados, enquanto todos os outros componentes são implementados no espaço do usuário. Suporta operação em CPUs de 64 bits com arquitetura RISC-V. O SO foi testado na placa SiFive HiFive Unmatched e no QEMU. O código do projeto foi escrito na linguagem C e é distribuído sob a licença Apache 2.0.
Estão disponíveis opções: QSOE/N com seu próprio microkernel Skimmer e QSOE/L baseado no microkernel seL4, que possui verificação formal de confiabilidade para a arquitetura RISC-V. Além disso, está sendo desenvolvido o carregador mr-bml baseado no GRUB 2.13, a biblioteca padrão libc e um conjunto de programas quser. O conjunto de programas inclui o shell de comando qsh baseado no mksh, sistema de inicialização e um conjunto de utilitários unix típicos, como ls, cat, ps, lspci e login.
O microkernel Skimmer utiliza uma implementação de threads leves no núcleo (LWKT, Light Weight Kernel Threads) adquirida do projeto DragonFly BSD, com filas de trabalho atreladas a CPUs e primitivas de troca de mensagens msgport. O QSOE permite o uso de diferentes núcleos com um único ambiente de usuário e um conjunto de drivers que não muda com a troca de núcleo. Apenas o gerenciador de tarefas (taskman) e a biblioteca libc, que atua como um wrapper sobre as APIs semelhantes ao QNX fornecidas pelos microkernels, são compilados em relação aos núcleos.
┌──────────────────────────────────────────────────────────┐
│ qsh + drivers + utils (vinculados dinamicamente) │
├──────────────────────────────────────────────────────────┤
│ libc.so (corpo compartilhado; costura específica do LQ em lq/libc/) │
│ rtld (derivado do FreeBSD; BSD-2-Clause) │
├──────────────────────────────────────────────────────────┤
│ taskman gerente de processos / memória / caminhos │
│ libtaskman corpo portátil do taskman (caminho / cred / │
│ syscfg / sync / reloc / cpio / elf) │
├──────────────────────────────────────────────────────────┤
│ microkernel seL4 (RISC-V Sv39, verificado formalmente) │
│ elfloader (carrega núcleo + taskman) │
└──────────────────────────────────────────────────────────┘
A primeira versão do QSOE é notável pela conquista da capacidade de inicializar e acessar o shell em uma placa SiFive Unmatched (FU740) com um armazenamento NVMe. A inicialização bem-sucedida foi implementada para configurações com ambos os núcleos (QSOE/L e QSOE/N).
Fonte: opennet.ru
