UZIX Zilog Inside
Implementação de UNIX para MSX

[UZIX] [UZIX 2.0] [Status] [TCP/IP] [WWW] [Telas] [Docs] [Downloads]

Dados técnicos do UZIX 2.0

Como funciona:

      O UZIX usa a memória mapeada do MSX2/2+/TR para obter multiprocessamento. O UZIX propriamente dito ocupa 64kB do espaço de endereçamento, dividido em duas partes: 48kB para a parte transiente do kernel e 16kB para a parte residente. A parte residente é a interface entre as aplicações a o resto do kernel. Durante as chamadas de sistema ou interrupções, a parte transiente do kernel é mapeada como qualquer outro processo. As aplicações ocupam um mínimo de 16kB e um máximo de 48kB do espaço de endereçamento (dependendo do seu tamanho).
      O UZIX necessita de algum suporte adicional de hardware. Primeiro, o UZIX usa o temporizador do sistema para prover uma interrupção periódica. Também, a implementação corrente usa um relógio de tempo real adicional para obter a data e hora para arquivos, etc. O driver de TTY corrente assume um teclado com buffer por polling, o qual existe na maioria dos sistemas.

Como o UZIX é diferente do UNIX real:

      O UZIX implementa quase todas as funcionalidades da 7ª Edição. Todas as operações de E/S de arquivos, diretórios, sistema de arquivos montável, usuários e grupos, pipes e dispositivos de E/S aplicáveis são suportados. O controle de processos (fork(), execve(), signal(), kill(), pause(), alarm() e wait()) é totalmente suportado. O número de processos é limitado apenas pelo espaço de troca disponível, num máximo de 252 processos (num total de 4096kB de memória). Como mencionado, o UZIX implementa o UNIX bem o suficiente para executar a Bourne Shell em toda a sua funcionalidade. As únicas modificações feitas no código-fonte da shell foram para satisfazer as limitações do compilador C.

      Aqui está uma (possivelmente incompleta) lista de funcionalidades faltantes e limitações:
  • As chamadas de sistema relacionadas a debug e profile não existem.
  • Os números dos inodes são 16 bits. Logo, os sistemas de arquivos têm 32Mb ou menos.
  • A hora e data dos arquivos não está no formato padrão. Ao invés disso, elas se parecem com aquelas usadas pelo MS-DOS.
  • A chamada execve() do BSD 4.2 foi implementada. Outra variantes do exec() são suportadas pela biblioteca.
  • Os semáforos e mecaniscos de trancamento necessários para implementar E/S de disco reentrante não estão aqui. Isso tornaria difícil implementar E/S de disco controlada por interrupção sem espera.