Por que não ter um SO baseado em Linguagem de Alto Nível? As linguagens de baixo nível são mais eficientes?

44

Sem ser presunçoso, gostaria que você considerasse a possibilidade disso. Atualmente, a maioria dos sistemas operacionais é baseada em linguagens de baixo nível (principalmente C / C ++) Mesmo os novos, como o Android, usam o JNI & implementação subjacente está em C

Na verdade, (isso é uma observação pessoal) muitos programas escritos em C rodam muito mais rápido do que seus equivalentes de alto nível (por exemplo: Transmission (um cliente bittorrent no Ubuntu) é muito mais rápido que o Vuze (Java) ou Dilúvio (Python)). Mesmo os compiladores python são escritos em C, embora o PyPy seja uma exceção.

Então, há uma razão específica para isso? Por que é que todos os nossos chamados "Idiomas de Alto Nível" com os grandes conceitos de "OOP" não podem ser usados na criação de um sistema operacional sólido?

Então eu tenho basicamente 2 perguntas.

  1. Por que os aplicativos escritos em linguagens de baixo nível são mais eficientes que seus correspondentes HLL? As linguagens de baixo nível têm melhor desempenho pelo simples motivo de serem de baixo nível e serem traduzidas para código de máquina mais facilmente?
  2. Por que não temos um sistema operacional completo baseado inteiramente em uma linguagem de alto nível?
por rtindru 28.06.2013 / 09:46
fonte

10 respostas

38

A Microsoft fez algumas pesquisas muito interessantes nessa direção, se você observar a Singularidade:

link

Além disso, Mothy Roscoe et al trabalham no Barrelfish, que usa a linguagem de programação de restrição Eclipse como um serviço de SO para resolver todos os tipos de problemas de gerenciamento de SO e alocação de recursos:

link

    
por 28.06.2013 / 09:51
fonte
38

Depende muito de onde você coloca a divisão entre idiomas de baixo e alto nível. Por exemplo, pessoas diferentes tendem a colocar uma linguagem como C ++ em lados diferentes dessa divisão.

Com relação às suas perguntas:

  1. Eu não acredito que exista tal diferença entre linguagens de baixo nível e alto nível, mas mais uma diferença entre linguagens interpretadas e linguagens que compilam para instruções nativas.

    Mas também pode haver uma diferença de cultura entre os programadores, em que os que usaram uma linguagem de baixo nível se concentram mais nos aspectos de desempenho das escolhas (de design) que fazem.

  2. Se você considera o C ++ como sendo de alto nível, então há pelo menos um sistema operacional escrito inteiramente em uma linguagem de alto nível (o sistema operacional Symbian é escrito em C ++). O que impede você de escrever um sistema operacional na maioria das linguagens de alto nível são duas coisas:

    • Um sistema operacional precisa de acesso de baixo nível à memória e ao hardware e executar truques sujos sobre eles. Esse tipo de acesso é geralmente considerado inseguro para programas em nível de aplicativo, portanto, muitas linguagens de alto nível não permitem isso.
    • Um sistema operacional precisa ser executado sem a presença de software de suporte, como intérpretes. Isso torna extremamente difícil escrever um SO em uma linguagem que não pode ser facilmente compilada em instruções nativas.
por 28.06.2013 / 10:06
fonte
15

Existem várias boas razões para isso.

A linguagem de baixo nível de hoje foi a linguagem de alto nível de ontem

Sim, acredite ou não, era uma vez que o C era visto como uma linguagem de alto nível. Até 20 anos atrás era comum o suficiente para vê-lo descrito como uma linguagem de "nível médio". Este foi um tempo antes do OO ser tão popular quanto é hoje, o Java não existia, o C # não existia, até mesmo o C ++ ainda não estava devidamente padronizado.

Inércia Histórica

Os sistemas operacionais que você usa hoje têm raízes profundas na história. O Windows volta ao início / meados dos anos 80, o Unix volta ao início dos anos 70. Há um monte de código antigo em funcionamento nos sistemas operacionais, e você geralmente não quer reescrever código antigo em funcionamento.

Em algum momento você precisa ir até o hardware

Isso acontece no kernel, isso acontece nos drivers, isso acontece nos subsistemas de gerenciamento de memória, isso acontece no sistema de arquivos. Claro que você pode colocar uma camada de linguagem de alto nível sobre ela, mas você ainda precisa acessar mais diretamente o hardware que uma linguagem de nível mais baixo oferece.

Portabilidade

Não me refiro a portabilidade para hardware diferente ou um sistema operacional diferente, como é mais comumente entendido hoje; isso é mais sutil. Há uma grande vantagem em fornecer uma interface baseada em C para algo, e é esse o fato de que praticamente todas as outras linguagens existentes podem ser vinculadas a C. Até mesmo a API do Windows ainda é uma API baseada em C nos dias de hoje por essa razão. / p>

Preferência pessoal

Algumas pessoas preferem programar dessa maneira, e isso pode ser um fator importante. Por exemplo, Linus Torvalds tem um famoso discurso contra o C ++ que deixa bem claro que No que lhe diz respeito, C será sempre sua ferramenta de escolha para esse tipo de trabalho (o conteúdo do discurso e se você concorda ou não com ele é irrelevante para essa discussão; o fato de que o discurso existe é suficiente).

Juntas, elas devem estabelecer claramente por que um sistema operacional foi originalmente escrito em algo como C nos velhos tempos, e por que partes muito significativas dele - até hoje - permanecem assim.

    
por 03.07.2013 / 21:54
fonte
13
O principal motivo para a predominância de C em sistemas operacionais está na história - os principais sistemas operacionais atuais, como o Windows e todas as formas de Unix (BSD, Solaris, HP-UX, MacOS X, ... bem como clones como o Linux ) volta um longo tempo, antes que o OO e outros construtos de "alto nível" se tornassem mainstream.

Para o núcleo do sistema operacional, além do desempenho, é necessário especificar as instruções de hardware e é necessário ter controle total sobre a memória, que linguagens como o C fazem muito bem.

Para sistemas embarcados, às vezes há sistemas operacionais que usam linguagens de nível superior para partes maiores do sistema. Um exemplo notável é o JavaOS da Sun.

Para sistemas operacionais bastante difundidos, um exemplo notável de não usar C também é o MacOS clássico antes do MacOS X - em grande parte escrito em dialeto de Pascal que permitia alguma forma de orientação a objetos.

    
por 28.06.2013 / 10:46
fonte
12

Primeiro, existem alguns problemas de bootstrap. A maioria dos recursos que facilitam as linguagens de alto nível é baseada em abstrações que um kernel deve fornecer. Como você escreve um gerenciador de memória em uma linguagem que requer um gerenciador de memória? Como você escreve os drivers de I / O sem usar as boas bibliotecas padrão de I / O do seu idioma? Como você cria primitivos de threading e sincronização sem usar as bibliotecas da linguagem?

Em segundo lugar, é extremamente útil e muito mais legível ao escrever sistemas operacionais para poder atribuir uma variável a um local de memória específico. Isso é fácil em C, e todo programador C sabe como fazê-lo. Se é mesmo possível em linguagens de alto nível, é tão raro que apenas os gurus sabem como fazê-lo.

Em outras palavras, quando você considera todas as limitações e modificações que você teria que aceitar, C e C ++ começam a parecer muito mais fáceis.

    
por 28.06.2013 / 17:53
fonte
6

Antes de tudo, o bootstrap requer pelo menos uma pequena parte a ser escrita em Assembly ou equivalente.

Em segundo lugar, era um sistema operacional escrito indiscutivelmente em HLL - Lisp Machine . (O fato de ter falhado comercialmente teve mais a ver com o fato de outros hardwares se tornarem mais baratos mais rapidamente e o triunfo do Pior é Melhor do que com deficiências de sua filosofia ou design).

Em terceiro lugar, o C ++ é bastante orientado a objetos e de alto nível, então, como outros apontaram, Symbian OS é outro exemplo.

Em quarto lugar, há pouca necessidade de novos sistemas operacionais no momento. Nós já temos alguns sabores de linux e bsd que rodam em praticamente qualquer hardware, e criar um novo sistema operacional a partir do zero é muito caro.

    
por 28.06.2013 / 19:08
fonte
4

Para melhorar o que escrevi anteriormente,

As máquinas Burroughs 5xxx - 6xxx não tinham linguagem de montagem. A mais baixa linguagem disponível foi uma extensão para Algol. O Algol foi implementado em hardware. O sistema operacional e todas as linguagens foram escritas em Algol. Ele superou todas as máquinas concorrentes da época. Também exigia significativamente menos código, o que tornava muito mais fácil a manutenção. Ele tinha hardware de pilha que suportava uma linguagem recursiva como Algol.

O sistema operacional Burroughs evoluiu para uma versão chamada MCP. Atualmente, o MCP é executado em sistemas Unisys.

    
por 03.07.2013 / 21:00
fonte
3

A maioria das linguagens de nível mais alto que você mencionou tem um recurso que não se encaixa bem com os sistemas operacionais: Gerenciamento automático de memória. Você não pode confiar em um coletor de lixo ao escrever um sistema em tempo real - seja soft (que é o que um sistema operacional é) ou até pior. Para citar Tanenbaum [i]:

Some things that C does not have include built-in strings, threads, packages, classes, objects, type safety, and garbage collection. The last one is a show stopper for operating systems. All storage in C is either static or explicitly allocated and released by the programmer, usually with the library function malloc and free. It is the latter property -- total programmer control over memory -- along with explicit pointers that makes C attractive for writing operating systems. Operating systems are basically real-time systems to some extent, even general purpose ones. When an interrupt occurs, the operating system may have only a few microseconds to perform some action or lose critical information. Having the garbage collection kick in at an arbitrary moment is intolerable.

Agora, você pode argumentar que o C ++ também é um bom candidato, pois oferece gerenciamento de memória manual. O C ++ já foi usado em alguns sistemas operacionais como o Symbian (mencionado por Bart ) e o BeOS. Mas o IMHO C ainda é a linguagem mais rápida que pode ser portada em muitas arquiteturas sem um grande esforço (em contraste com a montagem de uma arquitetura específica).

[i]: Sistemas operacionais modernos, terceira edição, página 73

    
por 28.06.2013 / 19:35
fonte
2

Como outros apontaram, vários sistemas operacionais foram escritos em linguagens de alto nível. Talvez o que você queira dizer é que todo o bem-sucedido mercado de massa, sistema operacional de propósito geral, foi escrito em alguma combinação de montagem, C e C ++?

A maioria dos idiomas de alto nível tem vários recursos úteis que carregam um custo de desempenho associado. O gerenciamento automatizado de memória é um exemplo óbvio, a verificação de limites de matrizes é outra. Se você estiver escrevendo um sistema operacional de finalidade geral, provavelmente encontrará situações em que a penalidade de desempenho desses recursos úteis é maior do que a que você está disposto a pagar. Nesse ponto, você gostaria de poder desativá-las. Idiomas como Python, C # e Java variam em quais recursos você pode desativar, mas nenhum deles é tão versátil quanto C ou C ++ a esse respeito.

Neste aspecto, C e C ++ são quase tão versáteis quanto a montagem pura. Se você decidir que precisa de dez gerenciadores de memória diferentes, abrangendo dez cenários diferentes de alocação de memória, poderá implementá-los todos em C e C ++ e carregá-los e descarregá-los como achar melhor. Heck, você nem precisa se vincular às bibliotecas de tempo de execução padrão C ou ao código de inicialização se você não quiser.

    
por 28.06.2013 / 20:22
fonte
0

A resposta real é Money . Não há benefício percebido suficiente de um SO de linguagem de alto nível para justificar o gasto de recursos para construir um e, em seguida, colocá-lo no mainstream. Há um enorme custo envolvido na criação de um novo driver para cada hardware necessário para apoiar, por exemplo.

Existem vários sistemas operacionais escritos em linguagens de alto nível, com o objetivo principal de pesquisa, como o Oberon e Singularidade .

    
por 11.06.2016 / 15:12
fonte