ti-enxame.com

Você acha que os sistemas operacionais gerenciados são uma boa ideia?

Sistemas operacionais gerenciados como Microsoft Singularity e JNode são um conceito bastante interessante. Essencialmente, o sistema operacional é inicializado com código escrito em uma linguagem de baixo nível (C/C++/Assembly), que essencialmente implementa uma máquina virtual. O resto do sistema operacional (e todos os aplicativos do espaço do usuário) são executados na máquina virtual. Existem algumas coisas boas sobre isso. Por exemplo, você repentinamente torna obsoletos os ponteiros arbitrários. E, se bem escrito, você se livra de uma tonelada de lixo legado que a maioria dos sistemas operacionais modernos possui.

No entanto, como desvantagem, você está muito mais longe do hardware e, como desenvolvedor, perde a capacidade de cair para um nível inferior de abstração e sujar as mãos.

Quais são suas opiniões sobre isso?

15
Chinmay Kanchi

Acho que este é outro caso em que "depende".

Se você está escrevendo aplicativos como navegadores da web, processadores de texto, etc., nos quais o desempenho extremamente rápido não é necessariamente um problema, essa abordagem tem seus méritos. Ao usar essa abordagem, você pode oferecer a seus clientes uma experiência mais segura e controlada. Você não está apenas limitando os danos que podem ser causados ​​por malware, mas também está executando em um ambiente mais consistente.

É como a diferença entre jogos de console e jogos de PC. Os primeiros sabem exatamente com que hardware precisam trabalhar, para que possam fazer uso desse conhecimento, enquanto os últimos devem ser capazes de lidar com uma variedade maior de placas gráficas, placas de som, velocidades de disco rígido, etc.

No entanto, haverá aplicativos (como jogos!) Que requerem o acesso de baixo nível e ainda precisam ser executados "nativamente".

Como os idiomas gerenciados, você terá que usar a ferramenta apropriada para o trabalho.

8
ChrisF

Eu acho que os benefícios de um sistema operacional totalmente gerenciado são enormes e esse poderia realmente ser o futuro, mas levará muitos anos para chegar.

Um bom sistema operacional gerenciado fornecerá a você todo o ponto de entrada gerenciado de que você precisa para fazer todas as coisas de baixo nível necessárias, independentemente de ser gerenciado: captura de interrupções e execução de E/S com dispositivos. C # também permite código inseguro (lidar com ponteiros), mas será permitido apenas nos "drivers de dispositivo" (que serão apenas outro tipo de processo isolado de software).

Os benefícios em segurança, uniformidade, portabilidade e principalmente confiabilidade certamente excederão qualquer desvantagem de desempenho. Assim, um sistema totalmente gerenciado é surpreendentemente rápido, pois não há mais necessidade de alternar o contexto.

3
Wizard79

Geralmente eu acho que eles são uma boa ideia, mas como não há muitos deles por aí ou perto de serem totalmente preparados, é muito difícil dizer como eles se sairiam no mundo real. Eu gostaria que a MS tivesse atualizado o projeto Singularity para que pudéssemos ver onde isso estava indo, mas meu palpite é que parte dele está sendo trabalhado em alguma versão do Windows

3
Walter

Os sistemas operacionais gerenciados são provavelmente como microkernels - você sacrifica o desempenho em nome da segurança.

Pode haver problemas semelhantes, pois requer a divisão do código em 2 partes:

  • Kernel de baixo nível escrito em C/assembler
  • Kernel de alto nível escrito em linguagem gerenciada

Dependendo do custo de entrada/saída segura da linguagem HL, isso pode impor problemas semelhantes aos dos microkernels - possivelmente um pouco mais rápido (sair do HL é mais rápido do que a troca de contexto completo, mas o IIRC, por exemplo, o JNI é bastante caro).

O aplicativo do usuário provavelmente também precisaria de contextos separados, visto que muitos aplicativos são escritos em outras plataformas (digamos C, Java ou .Net). Nos mesmos casos, os aplicativos podem ser limitados pela CPU (compiladores, conversores de música etc. .) e precisa até mesmo de otimização em assembler para funcionar com velocidade suficiente. Além disso - a proteção MMU implementada em linguagem HL provavelmente não será tão rápida quanto a de hardware, mesmo que seja muito mais ajustada .

Além disso, a linguagem HL não é proficiente nas operações de baixo nível. Embora o software seja geralmente projetado com "boas" práticas de codificação, os drivers não são necessários. Eu não acho que eles irão proteger contra pelo menos alguns erros, já que os kernels às vezes requerem o gerenciamento manual de memória.

Finalmente, não acho que esse sistema operacional exigiria uma VM completa. Uma vez que o sistema operacional não pode ser construído com as linguagens HL de compilação-uma-vez-em-todo-lugar (mesmo com GC e co.), Seria um candidato melhor.

Por exemplo, você repentinamente torna obsoletos os ponteiros arbitrários.

O sistema operacional é inerentemente de baixo nível. Você passa para o hardware não apenas um 'ponteiro arbitrário', mas provavelmente um endereço físico em vez de um virtual. Alguns DMA podem manipular apenas os primeiros 16MiB de memória. Embora tal sistema operacional possa simplificar muito, ele não eliminará os endereços.

E, se bem escrito, você se livra de uma tonelada de lixo legado que a maioria dos sistemas operacionais modernos possui.

  1. Existem muitos hardwares legados. Muito mais do que em software. Você primeiro inicia no modo real, depois ativa a porta A20 (não pergunte), pule para o modo protegido e depois para o modo longo.
  2. A compatibilidade API/ABI é boa. Digamos que eles tenham escrito esse sistema operacional - o que você executaria nele? Firefox - não (C e C++ usando WinAPI). Java - provavelmente precisava ser portado ou teve alguns problemas menores via ikvm - a menos que tenha acontecido com o uso de JNI. Acho que MSSQL (e com certeza Oracle, MySQL, Postgresql ...) não é escrito em linguagem gerenciada, portanto, não seria adequado para o servidor.
  3. Até mesmo a compatibilidade de bug é "boa". AFAIK MS gasta muito tempo apenas testando e verificando se algum software não está usando a API de maneira inteligente (leia-se incorreta). Como o problema de usar o ponteiro após free quando o Windows realmente começou a liberar memória.

Acho que vai ganhar popularidade na mesma época que os microkernels.

2
Maciej Piechotka

Pessoalmente, acho que a ideia de um sistema operacional gerenciado é um pouco como o comunismo: boa em teoria, mas impraticável de implementar.

O problema é que eu simplesmente não vejo nenhuma maneira de trazer o sistema operacional gerenciado sem reescrever completamente o sistema operacional do zero (e espero que alguém possa provar que estou errado nesta parte). Além disso, como você faz décadas de código não gerenciado caber em um sistema operacional gerenciado?

Os kernels dos sistemas operacionais mais populares que existem são testados em batalha e amadureceram ao longo de algumas décadas. Você não os reescreve simplesmente por capricho. Sem mencionar que a história está cheia de exemplos de designs de processador e arquiteturas de kernel que eram inegavelmente melhores, mas nunca foram capazes de convencer ninguém de que valia o custo de mudá-los.

Por último, como uma empresa como a Microsoft ou a Apple vai vender um sistema operacional gerenciado aos clientes? O usuário médio de computador se importará se seu sistema operacional é gerenciado ou não gerenciado?).

O mencionado acima, espero que eu esteja errado e que os sistemas operacionais gerenciados sejam uma realidade. Mas estou cético. Se algum dia o virmos, provavelmente não será por mais uma ou duas décadas.

2
Jason Baker

Código gerenciado é apenas uma extrapolação do que a proteção de memória virtual compra hoje, ou seja, a capacidade do computador de negar acesso a recursos.

A IBM já faz isso em seus sistemas de mainframe (eles simplesmente chamam de outra coisa), então, em minha opinião, é apenas uma questão de tempo até que isso aconteça em sistemas disponíveis para o público em geral.

Você se importaria se um laptop do Google (que executa Chrome e basicamente nada mais) é executado em código gerenciado ou não?

2
user1249

No entanto, como desvantagem, você está muito mais longe do hardware e, como desenvolvedor, perde a capacidade de cair para um nível inferior de abstração e sujar as mãos.

Isso não é verdade. No JNode, por exemplo, há uma classe Unsafe (e outras) que permite acessar locais de memória e assim por diante. Existem também algumas classes/métodos "mágicos" que são traduzidos em instruções privilegiadas pelo compilador JIT. O acesso a essas classes/métodos é (ou será) restrito pelo gerenciador de segurança, pelo compilador JIT e assim por diante. Mas se você está escrevendo um código que é executado no nível do sistema operacional, esses recursos estão disponíveis para você.

A ressalva é (claro) que o uso incorreto de Unsafe e classes relacionadas pode levar a travamentos do sistema operacional imediatamente, ou até o fim.

1
Stephen C

Duvido de sua utilidade para computadores desktop. Mas o tempo pode provar que estou errado neste ponto.

Mas um potencial interessante a meu ver é como um sistema operacional de servidor, mais especificamente como um sistema operacional convidado em um ambiente virtualizado. Nunca me pareceu adequado instalar uma instalação completa do servidor Windows em um ambiente de servidor virtual, sabendo quantos serviços desnecessários ele executa, incluindo a GUI completa.

Agora, instalar algo como Singularity em um servidor virtual para hospedar aplicativos ASP.NET, isso faz mais sentido. Supondo que eles possam mantê-lo um sistema operacional leve.

0
Pete