ChrisOS Research ProjectOperating systems · language systems · graphics · machine emulation
DOCUMENTATION ARCHIVEMAIN BRANCH
ChrisOS/Processos, address spaces e system calls

Processos, address spaces e system calls

Abstração de processo

Processo agrupa identidade de execução, recursos e address space. Isolamento normalmente exige contexto de memória virtual protegido e entrada controlada no kernel.

Proc no ChrisOS registra uso/aliveness, estado, CR3, contabilização de memória, heap break, nome e páginas pertencentes ao processo.

Criação

proc_create procura slot livre e chama mm_clone_kernel_space. O novo CR3 recebe mappings de kernel necessários para execução privilegiada e uma porção de usuário distinta.

Uma stack de usuário é committed antes do sucesso. Se a inicialização falha, destruction desfaz os recursos já adquiridos. Isso é ownership: toda sequência de alocações precisa de unwind.

Mapping e ownership

Mapear página física e possuí-la são conceitos diferentes. Uma frame pode aparecer em vários mappings; unmap não determina automaticamente quem deve liberar a frame.

ChrisOS registra leaf frames de usuário no array do processo. proc_map_owned grava virtual/physical após mapping bem-sucedido e proc_destroy pode depois desfazer e liberar.

Troca de CR3

Switch de processo altera a raiz ativa de page tables. proc_switch atualiza identidade global e chama mm_switch.

A implementação atual possui invariante explícita: user process switching é BSP-only. Chamar em AP causa panic. É uma limitação arquitetural atual, não apenas otimização ausente.

Ponteiros de usuário

Ponteiro recebido de ring 3 não é automaticamente seguro. Pode estar fora da faixa, unmapped, sem bit USER, cruzar página ou não permitir escrita.

O código de syscall valida e traduz spans página a página em user_copy e acessa a frame pela região direta do kernel, evitando dereference cego de endereço fornecido pelo processo.

System calls

Syscall é uma transição controlada para serviço privilegiado. O contrato inclui mecanismo de entrada, número/argumentos, validação, ownership/permissão, erros e retorno ao user mode.

A instrução de transição é apenas parte da ABI.

Descritores e ownership

Slots de arquivos nativos guardam owner process. Teardown chama syscall_close_owner. O mesmo padrão aparece em sockets e outros recursos.

Contenção de faults

proc_record_fault registra PID, thread, CR2 e RIP e marca o processo afetado como não alive. O objetivo é conter falha de usuário em vez de transformar todo fault em kernel panic.

Escopo do scheduler

Timer pode indicar slice due, mas isso não equivale a scheduler preemptivo multiprocessador completo. Maturidade deve ser descrita pelos estados, caminhos de switch, restrições de CPU e testes reais.

Processos nativos e CLVM

ChrisOS possui contratos distintos. ELF nativo usa page tables e rings; aplicações ChrisC executam em slots CLVM e usam outra interface de syscalls. Seus modelos de memória e falha não devem ser misturados.

Registro do documento ID: processes-syscalls Reviewed source: da3df29cb397 Class: technical-chapter