Sistema MACH

Sistema MACH

O sistema Mach foi construído de forma que outros sistema operacionais como UNIX ou DOS pudessem ser emulados em cima. Um dos objetivos também era fazer com que ele suportasse multiprocessadores e ainda assim fosse portável. A emulação de outros sistemas operacional é realizada através de uma arquitetura de camadas. Assim, o emulador funciona como uma camada fora do kernel e roda independentemente das outras aplicações. Outro fato que deve ser notado é que vários servidores podem estar rodando simultaneamente na mesma máquina, o que permite que o usuário rode programas 4.3BSD, System V e MS-DOS ao mesmo tempo. 




Assim como outros sistemas microkernel, o sistema Mach apenas provê serviços básicos como gerenciamento de processos e memória, comunicação e serviços de I/O. Outros serviços que antes residiam no espaço do kernel, foram transformados em processos de usuário, tais como o sistema de arquivos e diretórios. 

São 5 os recursos gerenciados pelo microkernel:


• processos

• threads

• objetos de memória

• portas

• mensagens  

A estrutura básica no sistema Mach é o processo. Cada processo é um ambiente onde a execução acontece e possui um espaço de memória a ele associado para guardar dados e código (text) e uma ou mais pilhas. Da mesma forma, um canal de comunicação (ou porta) é alocada a um processo. Uma thread é uma entidade de execução e a ela estão associadas um contador de programa e um conjunto de registradores. Além disso, cada thread é associada e um processo, mas um processo pode conter várias threads. Um processo com uma única thread no Mach pode ser comparado a um processo comum do UNIX.

Assim, um processo no Mach consiste, basicamente, de um espaço de endereçamento e uma coleção de threads que executam nesse espaço. A idéia de processos como uma entidade ativa não existe no Mach. A execução (ou atividade) é exclusiva das threads. Assim, processos são usados apenas para alocação de recursos relacionados a um conjunto de threads.

Além do conjunto de threads e do espaço de endereçamento, aos processos também são associadas algumas portas de comunicação. Algumas portas são especiais e todos os processos as possuem:

• process port: é usada para fazer a comunicação do kernel com o processo. Os serviços do kernel são requisitados por essa porta apenas mandando uma mensagem a ela. Isso reduz o número de "system calls" a uma quantidade bastante pequena.

• bootstrap port: realiza a inicialização do processo quando esse é carregado. Através dessa porta o processo fica sabendo o nome da porta do sistema, e também se comunicar com o seu servidor (no caso de processos UNIX emulados).

• exception port: é usada para reportar exceções causadas pelo processo. Exceções típicas são divisão por zero e execução ilegal de instruções. Programas de depuração também usam essa porta para realizar seu trabalho.

• registered ports: são portas normalmente associadas a processos padrão do sistema, tal como o servidor de nomes, por exemplo.

O processo ainda possui a propriedade de estar habilitado a executar ou bloqueado. Essa última opção faz com que suas threads fiquem bloqueadas independentemente de seus estados individuais. Pode-se ainda escolher em qual processador uma thread irá executar e ainda qual sua prioridade.

No caso de processos emulados, especifica-se em que região do espaço de endereçamento encontram-se os tratadores de chamadas de função. Assim, os processos filhos dos emuladores herdam essas características e todas suas chamadas de sistema são direcionadas ao emulador e não ao kernel do Mach.

Além disso, cada processo possui registradores estatísticos que contabilizam, por exemplo, a quantidade de memória consumida e o tempo de execução das threads. Um processo que esteja interessado nessas informações pode obtê-las enviando uma mensagem à porta de processo.

Nenhum comentário:

Postar um comentário