É possível oferecer suporte a vários processos sem suporte à memória virtual?

8

É possível oferecer suporte a vários processos sem suporte à memória virtual? Eu gostaria de saber mais sobre isso, se sim.

Sen
fonte
Possivelmente fora de tópico? A menos que seja apenas sobre sistemas UNIX.
Maciej Piechotka

Respostas:

10

Você pode executar um sistema operacional com vários processos, mesmo sem suporte de hardware (sem MMU ), com todos os ponteiros representando um endereço físico. No entanto, você perde vários recursos principais geralmente fornecidos por meio da MMU:

  • Como um ponteiro sempre aponta para um local específico na RAM, você não pode trocar (ou apenas de uma maneira muito limitada). Normalmente, o MMU gera uma exceção quando não consegue encontrar uma página física para um determinado endereço virtual, e o manipulador de exceção fornecido pelo sistema operacional busca a página da troca.
  • Como um ponteiro é desreferenciado sem verificação, todo processo pode acessar a memória de outros processos e a memória do kernel. Normalmente, a MMU gera uma exceção quando não consegue encontrar uma página física para um determinado endereço virtual e o manipulador de exceções fornecido pelo sistema operacional encerra o processo para tentar um acesso inválido.
  • Como o mesmo ponteiro tem o mesmo significado em diferentes processos, você não pode implementar facilmente o fork . Normalmente, o efeito de forké fazer uma cópia da memória física do processo e criar um novo mapa de memória virtual a partir dos mesmos endereços virtuais para os novos endereços físicos.

Existem sistemas operacionais do tipo unix que funcionam em sistemas sem MMU.

¹ Em unices modernos, isso geralmente é feito preguiçosamente (copy-on-write), que por sua vez depende da MMU levantar uma exceção quando não consegue encontrar uma página física.

Gilles 'SO- parar de ser mau'
fonte
No segundo ponto "quando não é possível encontrar uma página física para um determinado endereço virtual", deve ser algo como "quando o acesso à página correspondente ao endereço virtual especificado deve ser negado". A página de propriedade do kernel provavelmente é residente.
Ruslan
@Ruslan Quando uma página não é mapeada em um processo, a MMU geralmente contém informações que não são mapeadas para uma página física. Pode acontecer que o MMU contenha o endereço de uma página física à qual o processo não tem acesso, mas essa é a exceção, e não a regra, usada para a memória do kernel se o kernel usar esse recurso do MMU (o que o Linux faz) .
Gilles 'SO- stop be evil' '
2

Certamente é possível com algumas restrições, como proteção de memória, o que seria um problema, como já mencionado. Por exemplo, o µClinux http://www.uclinux.org/ suporta múltiplos processos sem implementar memória virtual. Observe que algumas CPUs, como pelo menos o Analog Devices Blackfin, fornecem uma MPU (Unidade de proteção de memória) http://docs.blackfin.uclinux.org/doku.php?id=bfin:mpu . Isso permite que a memória virtual menos sistemas operacionais ainda permita a partição da memória.

jlliagre
fonte
0

Isso depende de como você define processo versus threads em termos de memória.

Uma das funções da memória virtual é o particionamento. Embora seja possível executar vários processos sem particionamento, seria mais como executar vários threads do que processos - compartilhando o mesmo espaço de endereço.

sybreon
fonte
Sim e não. É possível impor a separação de memória sem memória virtual. Alguns microcontroladores têm proteção de memória de hardware, mas não memória virtual (consulte a resposta do jlliagre ). E mesmo sem o suporte de hardware, você pode impor a separação de memória por meio de análise estática (não é fácil, mas é factível).
Gilles 'SO- stop be evil'