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.
MINIX é uma variante unix desenvolvida originalmente por Andrew Tanenbaum como um companheiro de seu livro Sistemas Operacionais: Design e Implementação . As versões originais rodavam nos PCs da época, o que não suportava memória virtual. (Dados os seus interesses, recomendo a leitura deste livro, mesmo uma edição mais antiga, se é o que você pode pagar.)
¹ 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.
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.
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.
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).
Respostas:
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:
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.
vfork
é suportado) e a ausência de proteção de memória; mas há multitarefa preemptiva.¹ 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.
fonte
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.
fonte
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.
fonte