Você acha que sistemas operacionais gerenciados são uma boa ideia? [fechadas]

15

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 implementa essencialmente uma máquina virtual. O restante do sistema operacional (e todos os aplicativos da terra do usuário) é executado na máquina virtual. Há algumas grandes coisas sobre isso. Por exemplo, você repentinamente torna obsoletos os ponteiros arbitrários. E, se bem escrito, você se livra de uma tonelada de dados herdados que a maioria dos sistemas operacionais modernos atualmente possui.

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

Quais são suas opiniões sobre isso?

Chinmay Kanchi
fonte
Eu tenho medo de resposta, já que estou inclinado para linguagens de alto nível, uma vez que são as únicas línguas que usei
TheLQ
2
Com computadores cada vez mais rápidos, acho que isso é um grande negócio. No entanto, se o MSFT implementá-lo, será ótimo ou muito ruim - não há meio termo.
Job
Observe que o "legado bruto" é o que faz os aplicativos existentes serem executados. Não subestime a importância de realmente ter algo para usar.

Respostas:

8

Eu acho que esse é outro caso em que "depende".

Se você está escrevendo aplicativos como navegadores da web, processadores de texto etc., onde 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 apenas limita os danos que podem ser causados ​​por malware, mas também executa em um ambiente mais consistente.

É como a diferença entre jogos de console e jogos de PC. Os primeiros sabem exatamente com o hardware com o qual precisam trabalhar e podem usar esse conhecimento, enquanto os últimos precisam 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 exigem acesso de baixo nível e ainda precisarão ser executados "nativamente".

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

ChrisF
fonte
3
Eu realmente não concordo. Não há razão para ter um jogo rodando nativo, e não há necessidade real de ser nativo para diminuir o nível se o sistema operacional fornecer todo o ponto de entrada gerenciado necessário. É claro que há alguma desvantagem no desempenho (realmente desprezível se todo o sistema for gerenciado), mas hoje temos bastante poder de processamento e muita necessidade de software altamente confiável.
precisa saber é o seguinte
A @Lorenzo Games já enfatiza bastante os computadores, portanto o desempenho é importante. No entanto, não tenho certeza de quanto o impacto no desempenho seria se tudo o que a VM faz é
agrupar
4
@ TheLQ: o ponto é que os jogos já não precisam lidar com "coisas de baixo nível", pois sempre há algum middleware (DirectX, Open GL e assim por diante). É claro que eles são computacionalmente intensivos, mas o uso de um middleware já é um problema de desempenho. Seria apenas um middleware gerenciado (e enviado).
usar o seguinte comando
3
Se o sistema operacional cuida da JITting, você acaba com o código gerenciado que é executado mais ou menos tão rápido quanto o código "nativo". Lembre-se, se você precisar ter um controle de montagem sobre o programa, sempre poderá usá-lo diretamente no código de bytes.
Chinmay Kanchi
3
Além disso, o MS Singularity recebe um aumento significativo no desempenho pelo fato de não precisar alternar entre o modo do kernel e o modo do usuário. A bifurcação também se torna muito mais barata.
9000
3

Geralmente, acho que é uma boa ideia, mas como não há muitos por perto ou quase totalmente assados, é 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 aonde isso estava indo, mas meu palpite é que parte dele está sendo trabalhada em alguma versão do Windows

Walter
fonte
3

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

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

Os benefícios em segurança, uniformidade, portabilidade e especialmente confiabilidade certamente excederão qualquer inconveniente de desempenho. Então, um sistema totalmente gerenciado é surpreendentemente rápido, pois não é mais necessário fazer a troca de contexto.

Wizard79
fonte
Tem certeza de que a mudança de contexto não é necessária? Você ainda precisa executar vários programas ao mesmo tempo.
Job
Se os programas e o código forem executados na VM, não poderá haver troca de contexto. No entanto, seria necessário reimplementar o MMU na linguagem HL, então eu realmente duvido que houvesse muitos benefícios de desempenho.
Maciej Piechotka 23/01
2

Os SOs gerenciados provavelmente são de alguma forma semelhantes aos microkernels - você sacrifica o desempenho em nome da segurança.

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

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

Dependendo do custo de entrada / saída da linguagem HL com segurança, ele pode impor problemas semelhantes aos microkernels - possivelmente um pouco mais rápido (deixar HL é mais rápido 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, pois muitos aplicativos são gravados em outras plataformas (como C, Java ou .Net). Nos mesmos casos, os aplicativos podem ser vinculados à CPU (compiladores, conversores de música etc.) e precisam de otimização de assembler para funcionar com velocidade suficiente. Além disso - a proteção MMU implementada na linguagem HL provavelmente não será tão rápida quanto a do hardware, mesmo que possa ser muito mais ajustada.

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

Finalmente, não acho que esse sistema operacional exigiria VM completa. Como o sistema operacional não pode ser construído com o princípio, as linguagens HL de compilação, uma vez que são executadas em qualquer lugar (mesmo com a GC & Co.) seriam melhores candidatos.

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 'ponteiro arbitrário', mas provavelmente endereço físico e não virtual. Alguns DMA podem lidar apenas com os primeiros 16MiB de memória. Embora esse sistema operacional possa simplificar muito, ele não se livra dos endereços.

E, se bem escrito, você se livra de uma tonelada de dados antigos herdados da maioria dos sistemas operacionais modernos.

  1. Há muito hardware herdado. Muito mais do que em software. Você inicia primeiro no modo real e, em seguida, habilita o gate A20 (não pergunte) 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 por acaso usasse JNI. Acho que o MSSQL (e com certeza Oracle, MySQL, Postgresql ...) não está escrito em linguagem gerenciada, portanto não seria adequado para o servidor.
  3. Até a compatibilidade de bugs é "boa". O AFAIK MS passa muito tempo testando e verificando se algum software não está usando a API de maneira inteligente (leitura incorreta). Como o problema de usar o ponteiro depois freedele quando o Windows realmente começou a liberar memória.

Eu acho que ele ganhará popularidade na mesma época que os microkernels.

Maciej Piechotka
fonte
2

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

O problema é que simplesmente não vejo nenhuma maneira de criar o sistema operacional gerenciado sem reescrevê-lo completamente do zero (e espero que alguém possa me provar que estou errado nessa parte). Além disso, como você encaixa décadas de código não gerenciado em um sistema operacional gerenciado?

Os núcleos dos sistemas operacionais mais populares do mercado são testados em batalha e amadureceram ao longo de algumas décadas. Você não as reescreve por capricho. Sem mencionar que a história está cheia de exemplos de projetos de processadores e arquiteturas de kernel que eram inegavelmente melhores, mas nunca foram capazes de convencer ninguém de que eles valiam o custo de mudar para eles.

Por fim, como uma empresa como a Microsoft ou a Apple vai vender um sistema operacional gerenciado para os clientes? O usuário médio do computador se importará se o sistema operacional é gerenciado ou não gerenciado?

O mencionado acima, espero que eu esteja errado e que os SOs gerenciados sejam uma realidade. Mas sou cético. Se o virmos, provavelmente não será por mais uma década ou duas.

Jason Baker
fonte
2
O kernel do SO não é muito importante para aceitação. A MS criou um kernel NT totalmente novo e incompatível com qualquer coisa, e foi um sucesso. A Apple mudou drasticamente sua arquitetura de kernel (e sua arquitetura de CPU, três vezes), e ainda prospera. A chave é a compatibilidade com o software existente e a facilidade de portabilidade. As camadas de compatibilidade e / ou virtualização que permitem uma transição suave do código antigo para o novo código não parecem excessivamente difíceis em um sistema operacional gerenciado.
9000
2

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

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

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


fonte
1

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

Isso não é verdade. No JNode, por exemplo, há uma Unsafeclasse (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ê estiver escrevendo um código que seja executado no nível do sistema operacional, esses recursos estarão disponíveis para você.

A ressalva é (é claro) que o uso incorreto de Unsafee classes relacionadas pode levar a falhas no sistema operacional imediatamente ou na pista.

Stephen C
fonte
0

Duvido que sejam úteis para computadores de mesa. Mas o tempo pode me provar errado neste ponto.

Mas um potencial interessante aos meus olhos é como um sistema operacional de servidor, mais especificamente como um sistema operacional convidado em um ambiente virtualizado. Nunca foi correto instalar uma instalação completa do servidor Windows em um ambiente de servidor virtual, sabendo quantos serviços desnecessários são executados, 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 manter um sistema operacional leve.

Pete
fonte
1
É bom abandonar o Windows completamente, quando você puder.
Job
1
A tendência para navegadores de área restrita e outras coisas voltadas para a Internet provavelmente mostra que um sistema operacional gerenciado, ou pelo menos compartimentalizado, ou um desktop também é desejável.
9000