Como a multitarefa do UNIX funciona sem memória virtual? [fechadas]

7

Como a multitarefa do UNIX funciona sem memória virtual? Os aplicativos ainda não precisariam de seu próprio espaço de memória? Ou os aplicativos precisavam saber que agora toda a memória visível espaçada é deles?

(Nota para evitar confusão: Por "memória virtual" quero dizer memória virtualizada, NÃO o arquivo de troca.)

    
por Andrew J. Brehm 10.08.2011 / 21:21

2 respostas

2

Multitarefa e multiprocessamento podem ser realizados em computadores que não possuem uma unidade de gerenciamento de memória (MMU) para fornecer memória virtual. Existem muitos sistemas operacionais que suportam multitarefa e / ou multiprocessamento para processadores que não possuem uma MMU. Eu não sei quando o Unix utilizou memória virtual.

Existem outros requisitos de hardware além da memória virtual que o Unix precisa para implementar seus recursos de multiprocessamento. Key é o modo protegido ou supervisor da CPU, ou seja, o modo kernel versus o modo de usuário.

Are there current Unix systems that don't use virtual memory?

Eu assumo que todas as versões modernas do Unix utilizam uma MMU.

O uClinux é uma versão do Linux que não requer uma MMU e não usa memória virtual. Mas não espere o mesmo nível de segurança entre os processos que o Linux real. É um sistema operacional para dispositivos embarcados para executar programas de aplicativos confiáveis.

Does the C runtime even support that?

A linguagem de programação C não está vinculada ao Unix ou Linux. Nem requer memória virtual. C pode ser usado para programar microcontroladores de 8 bits. Uma biblioteca de tempo de execução é específica para uma versão de um sistema operacional e um compilador. Existem versões da biblioteca de tempo de execução C para o uClinix para processadores que não possuem uma MMU.

    
por 11.08.2011 / 04:39
4

Versões antigas do Unix multitarefas por troca. Quando uma tarefa atingiu um ponto de bloqueio (esperando por uma leitura, por exemplo), ela seria trocada para o disco e outra tarefa seria trocado.

Basicamente, uma tarefa por vez pode estar na memória e todas foram mapeadas para o mesmo conjunto de locais de memória.

"Bifurcação" (iniciar nova subtarefa) foi realizada simplesmente trocando a tarefa atual, depois atribuindo uma nova ID de tarefa à imagem da tarefa ainda na memória e permitindo que ela continue sendo executada (como a subtarefa "bifurcada").

Essa abordagem (o original Bell Unix) era simples e funcionava muito bem em hardware primitivo, mas o Berkley Unix aproveitou o hardware de mapeamento de memória em processadores mais recentes para permitir que várias tarefas estivessem na memória simultaneamente, transformando-se em um virtual esquema de memória.

(não sei qual esquema o Linux usa).

    
por 11.08.2011 / 06:01