É uma boa ideia escrever um sistema operacional em uma linguagem de script? [fechadas]


8

É uma boa ideia criar um sistema operacional escrito em uma linguagem de script?

Por exemplo, que tal criar um sistema operacional usando Python?



Existem máquinas virtuais escritas em Javascript ...
user16764

3
Uma idéia tão boa quanto fazer um carro de plástico e metal.
Job

O Emacs é um bom sistema operacional e o elisp é realmente uma linguagem de script, tanto pelo uso quanto pelo escopo dinâmico.
SK-logic

Respostas:


15

Não é apenas uma má ideia. É praticamente impossível.

Como você implementa E / S com um idioma cujas instalações de E / S dependem inteiramente do sistema operacional host?

Como você pode implementar o planejamento primitivo sem nenhuma primitiva de interrupção útil?

Como você pode escrever um driver de dispositivo em um idioma que não pode endereçar um byte específico?

Edit: - Apenas para esclarecer um pouco. Você não pode escrever um sistema operacional "real" que interaja diretamente com a máquina em uma linguagem de "script". No entanto, você pode escrever uma "máquina virtual" utilizável se a linguagem de escrita for flexível o suficiente. Para implementações de instância de Donald Knuths teórica MIX (s) máquina e uma ZX80 emulador bom o suficiente para pacman prazo ter sido escrito em JavaScript.


2
@ClintNash realmente? O JavaScript by Definition vive em um ambiente de tempo de execução que deve ser executado em cima de um SO. Claro, é teoricamente possível pré-compilar para binário, mas isso é praticamente inédito. O Node.js deve ser executado em um sistema operacional host. O JavaScript não tem acesso nativo às construções necessárias para gravar um sistema operacional real. Claro, quando você estiver em um nível de abstração alto o suficiente, poderá começar a usar scripts, mas algo abaixo dele precisa ser real, sem a capacidade do metal de interagir com o hardware.
bunglestink

Eu acredito que você está correto @bunglestink. Eu estava referenciando o uso do JS / OS em uma camada de abstração mais alta. Não sei em que nível o Windows 8 integra o JS.
Jack Stone

1
O Lisp não tem primitivas de interrupção ou E / S e não pode acessar a memória bruta. É digitado dinamicamente. E, no entanto, o sistema operacional das máquinas Lisp foi escrito em Lisp.
Nikie

1
@nikie - sim, mas não é um sistema operacional real, ainda depende do sistema operacional subjacente para todos os serviços básicos.
James Anderson

6
As máquinas @nikie Lisp foram construídas com hardware especializado que basicamente implementou a máquina virtual Lisp no nível do hardware. Então, sim, em algumas, uma vez que é possível, mas realmente neste momento você está realmente implementando seu sistema operacional da forma mais primitiva possível - no nível do microcódigo.
bunglestink

6

Antes de decidir como , você precisa especificar o quê . O que esse novo sistema operacional fará? Para onde ele vai correr? Por que alguém se daria ao trabalho de usá-lo? etc. A próxima coisa é determinar as qualidades do sistema operacional. Velocidade, segurança, encadeamento, gerenciamento de memória, multitarefa, formatos de arquivo, suporte a idiomas, processadores suportados, etc.

Respondendo às perguntas acima e considerando as muitas qualidades do seu sistema operacional, você pode determinar qual ferramenta usar para alcançar seus objetivos.

Agora, você realmente quer fazer tudo isso?

Suponho que o Python tenha sido usado em parte para escrever partes do Linux - Veja: Em quais idiomas o Windows, Mac OS X e Linux estão escritos?


3

Sei que esta não é uma resposta adequada, mas este projeto demonstra um sistema operacional funcional com um kernel escrito em JavaScript:

https://github.com/charliesome/jsos/

Os drivers para VGA e o teclado também foram escritos em JavaScript usando interrupções. Eu desenvolvi uma implementação do OpenGL 1.1 para mim mesmo há um tempo atrás e funciona muito bem.


5
Na verdade isso parece viver as características do carregador de boot e de baixo nível são escritos em C e montagem ... Além disso, a máquina virtual js inteiras é implementado em c ...
bunglestink

Nesse ponto, você também pode argumentar que os sistemas operacionais não podem ser escritos em C, porque as partes precisam ser escritas em x86.
Overv

1
bom ponto, não posso discutir com isso. Asm sempre será necessário em algum nível; apesar de acreditar que a única peça que absolutamente deve ser escrita no asm no x86 é o gerenciador de inicialização. Depois disso, a maioria das implementações em C possui recursos de montagem em linha que podem permitir que você construa algo acima disso. Isso contrasta com uma linguagem de script que sempre deve ter uma abstração menor de um ambiente de tempo de execução presente, pois ela nunca toca o hardware sem passar pela abstração de tempo de execução.
28812 bunglestink

3

Não, nem é possível (exclusivamente)

Por quê? Considere o seguinte:

O que é uma linguagem de script?

Vamos fazer as duas seguintes suposições sobre a definição de uma "linguagem de script":

  1. O idioma vive dentro de um ambiente de tempo de execução.
  2. O idioma não tem acesso aos ponteiros de memória bruta.

O que é um sistema operacional?

Vamos supor que o objetivo principal de um sistema operacional possa ser simplificado para o seguinte:

  • para fornecer uma abstração entre os programas do usuário e o hardware que eles executam

Por essas mesmas definições, é logicamente impossível que uma linguagem de script seja um sistema operacional. Por quê?

  1. Um sistema operacional deve ter acesso não vinculado à memória do computador para se comunicar com o hardware. Como as linguagens de script não têm acesso aos ponteiros de memória bruta, eles não podem fazer isso.
  2. Como uma linguagem de script requer um ambiente de tempo de execução, mas não pode falar diretamente com o hardware, o ambiente deve ser codificado em outra linguagem que possua essa capacidade. Nesse caso (como no JSOS criado em outras postagens), uma linguagem de nível inferior deve ser usada para fazer interface com a máquina.

É possível escrever uma quantidade mínima de código em uma linguagem "bruta", como C, mas uma linguagem compilada bruta sempre será necessária por definição. Uma vez instalado, outras partes do sistema operacional podem ser implementadas em uma linguagem de script, mas uma linguagem de script nunca pode ser usada sozinha.


Para ser justo, um sistema operacional típico configura um tempo de execução para C e expõe abstrações básicas de hardware antes de executar o código C. Você pode fazer o mesmo simplesmente fornecendo um tempo de execução JavaScript. Esse tempo de execução é um pouco acima de C, mas, uma vez instalado, é essencialmente um modelo de objeto de componente moderno, exceto que o JSON faz mais sentido que o ini e o javascript é auto-descritivo por padrão, portanto, você não precisa de bibliotecas de tipos. O JavaScript é tão auto-descritivo que pode obter as funções do objeto via toString, manipulá-las e armazená-las novamente em disco. Não é impensável usá-lo para um kernel.
Dmitry

0

Devo sustentar que é, em princípio, possível escrever um sistema operacional em python. Você precisaria produzir um compilador de linguagem de nível Python para baixo, além de adicionar módulos à biblioteca padrão que fornecem acesso às partes de baixo nível do seu computador. Mas se essas duas peças estivessem no lugar, seria possível.

Contudo,

  1. Vai ser muito difícil escrever um compilador que produz código eficiente
  2. Python vai ser estranho para acessar detalhes de baixo nível

3
Além disso, o Python nesse cenário não se qualificaria mais como uma 'linguagem de script' por qualquer definição sensata.
tdammers

@ Tdammers, considero a linguagem de script um conceito mal definido de qualquer maneira.
Winston Ewert
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.