O Chengcheng OS (CCOS) é um sistema operacional de 64 bits. Estou escrevendo no x86, porque gosto de tristeza e miséria. Este projeto ainda estava em desenvolvimento. Sou iniciante no design do sistema operacional. Muitos dos conceitos de design que implementei são inspirados pelo Windows NT, como CCLDR (OS Loader for Chengcheng OS) e Memory Manager. E há muito mais cursos que eu preciso aprender nos meses de partida. Portanto, não vou atualizar o projeto com frequência.

Uefi
O CCOS usa o UEFI para inicializar o CCOSKRNL. A UEFI facilita muito o desenvolvimento do carregador do sistema operacional. O desenvolvedor pode chamar diretamente as interfaces fornecidas pelo UEFI (use o idioma C em vez de montagem). Há uma coisa a ser observada aqui, que os CCOs ainda precisam de CCLDR (outro arquivo executável binário) para carregar o CCOSKRNL. É um pouco como "um carregador de inicialização do segundo estágio". Mas, de fato, o bootx64.Efi simplesmente divide o espaço do kernel e procura um espaço de memória física adequado para o carregamento da imagem do CCOSKRNL. Em seguida, o CCLDR mapeará o espaço do kernel no endereço alto do espaço de endereço virtual e definirá o GDT (Tabela Global Descritor, uma estrutura significativa para a arquitetura x86.)
Multiprocessadores
O suporte de multiprocessadores é um enorme desafio para mim. Não garanto uma boa implementação do sistema de multiprocessadores. Por enquanto, os CCOs podem ativar corretamente outros processadores de aplicativos. Não é como outra demonstração do sistema operacional, o CCOS coloca a rotina de inicialização do processador de aplicativos em um arquivo binário isolado e carrega -o no primeiro MIB da memória física e constrói separadamente a tabela de páginas para o espaço de memória. Antes dos processadores de aplicativos em execução, os CCOs corrigirão a citação do endereço relativo do programa binário. Eu tenho que admitir, este é um design tolo.
Apic
O APIC (Controlador de interrupção programável avançado) é um componente crítico no sistema de computador moderno. Ele fornece a possibilidade de sistema de multiprocessadores e suporta prioridade de interrupção multinível no nível do hardware. Infelizmente, o APIC é complicado. Como para entender completamente as necessidades apicadas de bom conhecimento do sistema de computador, implemento apenas o driver básico do APIC.
TrueType
O CCOS exibe caracteres na tela através da renderização de fontes TrueType (a fonte padrão no CCOS é a fonte do Adobe Han Sans SC VF ). Não vale a pena produzir caracteres usando a renderização do TrueType. Para o desenvolvimento inicial do sistema operacional, o uso da fonte Bitmap é o método mais recomendado da saída dos caracteres.
Provavelmente, a melhor coisa sobre o armazenamento de personagens como esboços é que apenas um esboço por personagem é necessário para produzir todos os tamanhos desse personagem que o sistema operacional precisará. Um único contorno pode ser dimensionado para uma enorme gama de tamanhos diferentes, alguns dos quais são ilustrados abaixo. Isso permite que o mesmo personagem seja exibido em monitores de diferentes resoluções e seja impresso em um grande número de tamanhos diferentes. Escalar um esboço de um personagem é uma operação matemática simples, como de fato são outras transformações, como rotação e reflexões.
A estrutura do TrueType é complexa, implementei apenas o rasterizador de fontes sem sugerir o TrueType. Discutir está no coração de TrueType. Seus inventores, atentos à diversidade de opinião sobre a maneira "correta" de sugerir o tipo, decidiu que não havia um paradigma de sugerimento que eles imporiam aos desenvolvedores do tipo. Em vez disso, eles vincularam um rasterizador relativamente simples a uma nova linguagem de programação interpretada. Para a legibilidade da fonte, no entanto, isso é suficiente.
Estes são um Issus cirtical aqui, que é que a pré -forma de saída de texto dos CCOs é muito pool. O desempenho ruim desacelerará seriamente o funcionamento dos CCOs. Não sei como otimizar a função porque o desenho da fonte é um processo relativamente complexo. Outro método é usar a fonte Bitmap para, em vez disso, a fonte TrueType.
Amplo char
O CCOS oferece dois tipos de caracteres, "char" e "wch_t" (amplo char, 4 bytes), para armazenar todos os personagens. Independentemente do tipo de caractere, os CCOs sempre convertem WCH_T primeiro, depois produz uma string ampla. De fato, o TrueType Parser no CCOS usa apenas "Unicode 2.0 e semântica em diante", qual plataforma ID = 0 e ID de codificação = 3 no CMAP (CMAP - caractere para a tabela de mapeamento de índices de glifos, uma truta no TrueType.). Portanto, suporta exclusivamente caracteres de plano multilíngue básico Unicode (U+0000 para U+FFFF).
Gerenciador de memória
As idéias de design do gerenciamento de memória são inspiradas no Window NT, que contém banco de dados PFN, lookside, esquema de auto-mapeamento de diretores de página, gerenciamento de pool de memória de laminação e assim por diante, mas não todos.
Saída gráfica com múltiplas janelas
O CCOS suporta várias janelas, o que significa que pode gerar texto em uma janela diferente na tela. É muito difícil depurar multiprocessadores através da janela de saída de texto para cada processador. Mesmo que não tenha driver de mouse, o usuário também pode usar o teclado para selecionar qual janela precisa inserir caracteres.
Correção de bug: adicione spinlock para evitar conflitos de múltiplas saídas do Windows
Gerenciador de memória dinâmica com detecção de vazamentos de memória
Gerenciamento de PTE do sistema
Gerenciamento de PCIe
Driver nvme
Driver de teclado (não urgente)
Qemu com 2 gib ram ou superior
Eu apenas divido aproximadamente o espaço de memória, de modo que o espaço do kernel use apenas o quarto da RAM disponível. Mas um problema precisa notar que a rotina getMemoryMap () retornou as informações incorretas do mapa de memória ao tentar alocar RAM mais alta (maior que 2 gib) para qemu. Não estou tentando outro firmware OVMF, então acho que esse erro pode resultar do meu OVMF.
X86_64 CPU (Intel ou AMD) com conjunto de instruções AVX
Existem pequenas diferenças na programação da arquitetura x86_64 entre Intel 64 e AMD64. Estou desenvolvendo CCOs com base na CPU da AMD, mas use os manuais do Developer Intel® 64 e IA-32 Architecture Software como meu manual de referência da Architechure X86_64. Por enquanto, porém, qualquer que seja o fornecedor da CPU.
Para instalação, consulte a compilação CCOSKRNL
A Biblioteca de Matemática (reflibs/libm.a) foi fornecida por @estrella
Sem licença.
E-mail: [email protected]
Chengcheng OS: https://github.com/ccoskrnl/ccoskrnl
Intel® 64 e IA-32 Arquiteturas Developer Manuals Developers
Manual do Programador de Arquitetura AMD64 Volume 2: Programação do Sistema
A linguagem de programação C
Osdev Wiki
Especificação ACPI
Especificação UEFI