4.6 KiB
4.6 KiB
Decision Record - VM-Owned Byte Transfer Protocol
Status
Accepted
Contexto
O runtime precisa de um protocolo canonico para trafegar bytes entre host e userland sem:
- converter payload binario em
String; - devolver handles host-owned;
- inventar formatos ad hoc por dominio.
O estado atual relevante e:
- a heap ja possui
ObjectKind::Bytes; - o runtime ja consegue armazenar payload binario bruto na heap;
Valueainda nao possuiByte;- a spec de valores ainda nao reconhece
bytecomo valor primitivo; HostReturnainda modela apenas empilhar valores na stack;fse o futuro data bank precisarao trafegar bytes pela borda host <-> guest.
O projeto tambem ja fixou que:
- syscalls usam stack;
- o host nao devolve handles opacos;
- o host nao devolve memoria host-owned;
- banks de hardware trafegam IDs, nao bytes;
- nao ha backward compatibility.
Decisao
1. Tipo base
- O runtime passa a exigir
Value::Bytecomo valor primitivo real. - A spec de valores deve ser atualizada para incluir
byte.
2. Buffer canonico
- O buffer canonico de bytes da VM e
HeapRef(Byte). HeapRef(Byte)significa umHeapRefcujo objeto alvo eObjectKind::Bytes.- Nao sera introduzido mecanismo paralelo para buffer binario.
3. Nomes canonicos
src= origem dos bytes.dst= destino dos bytes.src_ref/dst_ref= handle VM-owned para buffer de bytes.src_offset/dst_offset= offset no buffer da VM.host_handle= identificador opaco do lado host.host_offset= offset do lado host.max_bytes= quantidade maxima pedida para a operacao.bytes_transferred= quantidade efetivamente transferida.
4. Domain ops iniciais
Os dois domain ops iniciais deste protocolo sao:
read: host -> VMwrite: VM -> host
5. Assinatura canonica de read
read deve seguir este formato:
read(host_handle, host_offset, dst_ref, dst_offset, max_bytes) -> (status, bytes_transferred, eof)
Regras:
statusebytes_transferredsao inteiros;eofe booleano;dst_refdeve apontar paraHeapRef(Byte);readparcial pode ser sucesso;eofrepresenta fim/exaustao observada no lado host.
6. Assinatura canonica de write
write deve seguir este formato:
write(host_handle, host_offset, src_ref, src_offset, max_bytes) -> (status, bytes_transferred)
Regras:
statusebytes_transferredsao inteiros;src_refdeve apontar paraHeapRef(Byte);writeparcial e falha.
7. Janela explicita de transferencia
Toda operacao atua sobre uma janela explicita da heap da VM:
readescreve emdst_ref[dst_offset .. dst_offset + max_bytes);writele desrc_ref[src_offset .. src_offset + max_bytes).
8. Politica de falha
- Esta decisao define o data plane de bytes, nao a taxonomia final de faults por dominio.
- Condicoes operacionais devem retornar
status. - Violacoes estruturais de chamada/ABI seguem
16ae a decisao de fault policy do dominio. - Para
fs, a classificacao normativa esta na decisao007-filesystem-fault-core-policy.md.
9. API minima necessaria na VM
Para suportar este protocolo, a VM precisa expor API canonica para:
- alocar buffer de bytes VM-owned;
- validar se um
HeapRefaponta paraObjectKind::Bytes; - expor comprimento/capacidade relevantes;
- escrever bytes em faixa valida;
- ler bytes em faixa valida.
Consequencias
Positivas
fse data bank passam a compartilhar o mesmo protocolo estrutural.- A borda host <-> guest deixa de depender de texto para payload binario.
- O host nao precisa alocar memoria propria para devolver bytes.
- O guest passa a controlar explicitamente buffer, janela e interpretacao do payload.
Custos
Valuee a spec de valores precisam mudar.- A heap precisa de API publica mais util para
Bytes. HostReturne a camada host-backed precisam acomodar o protocolo sem atalhos.- Dominios como
fsainda precisam decidir suas semanticas funcionais sobre este protocolo.
Fora de Escopo
- API funcional completa de
fs; - API funcional do data bank;
- listas e structs retornadas pelo host;
- transporte de banks graficos/sonoros para a VM;
- input/intrinsics.
Follow-up Obrigatorio
As seguintes agendas devem consumir esta decisao:
spec 08-save-memory-and-memcard.md(historico arquitetural emlearn/historical-game-memcard-slots-surface-and-semantics.md)014-app-home-filesystem-surface-and-semantics.md- discussoes futuras de data bank
As seguintes specs precisarao ser atualizadas:
02a-vm-values-and-calling-convention.md03-memory-stack-heap-and-allocation.md16-host-abi-and-syscalls.md