Criteri per una lingua (Terra come un esempio difficile) per essere utilizzabili per lo sviluppo del sistema operativo e come soddisfare i criteri mancanti

4

Ad esempio, una lingua che stavo guardando di recente- Terra. Puoi rispondere alla domanda nel contesto di qualsiasi lingua, mi sento più a mio agio con Lua, quindi partirò da lì.

Il Terra Language può essere metaprogrammato con Lua ed è retrocompatibile con il codice C. C può essere usato al suo interno e il suo codice può essere usato all'interno di C. Darò alcuni esempi di codice dalla pagina principale.

terra hello(argc : int, argv : &rawstring)
    -- Here we call a C function from Terra
    C.printf("Hello, Terra!\n")
    return 0
end

-- You can call Terra functions directly from Lua, they are JIT compiled 
-- using LLVM to create machine code
hello(0,nil)

hello:disas()
--[[ output:
    assembly for function at address 0x60e6010
    0x60e6010(+0):      push    rax
    0x60e6011(+1):      movabs  rdi, 102129664
    0x60e601b(+11):     movabs  rax, 140735712154681
    0x60e6025(+21):     call    rax
    0x60e6027(+23):     xor eax, eax
    0x60e6029(+25):     pop rdx
    0x60e602a(+26):     ret
]]

Save Terra code to an external representation such as an object file, or executable. filetype can be one of "object" (an object file *.o), "asm" (an assembly file *.s), "bitcode" (LLVM bitcode *.bc), "llvmir" (LLVM textual IR *.ll), or "executable" (no extension).

Ora, quello che voglio sapere (in relazione a Terra e / o in generale):

  • Questo significa che posso scrivere un sistema operativo in Lua? (È questo il livello di criteri che dovrei cercare quando si esaminano i framework e le lingue?)
  • In tal caso, posso implementare anche librerie Lua come Torch? (Tutte le lingue hanno librerie, quindi sono curioso di sapere cosa definisce quanto possono farne uso attraverso lo sviluppo del sistema operativo).
  • Esiste un modo o un linguaggio oggettivamente migliore per farlo? (Come in quando una lingua soddisfa pienamente la critica ma non mantiene la redditività quando si tratta dello sviluppo del sistema operativo?)
posta Zachary Johnson 06.03.2017 - 22:14
fonte

2 risposte

2

Per prima cosa, devi capire e definire con precisione cosa esattamente è un sistema operativo . E la definizione non è così semplice, ed è ambigua nei dettagli. Suggerisco di passare giorni a leggere Sistemi operativi: tre pezzi facili .

Tenere presente che la definizione di un sistema operativo può variare. Per alcune persone, è ciò che viene installato in un computer (consumatore) quando lo si acquista nuovo di zecca. Per altre persone, potrebbe essere solo il sistema operativo kernel (ma riconoscono che un kernel da solo è completamente inutile: hai bisogno di alcuni spazio utente programmi e alcuni software applicativo ). Leggi anche su unikernels (come MirageOS ) e su progetti come Singularity OS o Safe . Naturalmente leggi su microkernels & kernel monolitici . Il wiki OSDev contiene informazioni utili. Il sito tunes.org sta archiviando interessanti discussioni (del secolo precedente) relative al design del sistema operativo.

Nota anche che Terra è non Lua. È un linguaggio semanticamente simile a C che usa Lua per metaprogramming .

Does this mean that I can write an operating system in Lua?

Non scriverai tutti il tuo sistema operativo in Lua (o in Terra). Allo stesso modo, quelli che codificano un SO in C (che è il caso della maggior parte dei sistemi operativi oggi) non codificano tutti il SO in C (alcune parti devono essere codificate nell'assemblatore).

La tua domanda è ambigua: vuoi un linguaggio con il quale la maggior parte del sistema operativo può essere codificato (ma poi devi codificare parti mancanti altrimenti, magari in assembler), oppure richiedi un linguaggio con il quale tutti il sistema operativo sarà codificato?

Le cose di basso livello (scheduler, MMU e gestione dello spazio virtuale, gestione degli interrupt, materiale correlato all'hardware) sono difficili (e probabilmente impossibili) da codificare "portabili" in un puro linguaggio di programmazione di alto livello. Perché i dettagli contano.

Vedi anche questo rispondi a una domanda pertinente e correlata (ma non la stessa).

    
risposta data 26.03.2017 - 17:38
fonte
2

Er, dipende.

I sistemi operativi possono essere scritti in qualsiasi lingua. JavaOS è stato scritto quasi interamente in Java come una scommessa, ha funzionato lentamente e quindi è stato venduto come prodotto. La maggior parte dei requisiti, come le prestazioni, contano meno di quanto ci si aspetti perché l'assemblaggio di basso livello o il codice C hanno a che fare con i cicli più interni. I veri e propri speed-up, come uno schedulatore più intelligente o una cache LRU, possono essere codificati ovunque.

Alcune lingue, come Python, fanno scelte terribili perché la grande architettura della macchina virtuale richiede un avvio lento. Alcuni sono strettamente legati alle architetture ideali e non possono gestire GPU, gestire livelli di cache, ecc. Alcune idee sono miglioramenti nella piccola area. Ci sono molte lingue.

È importante sottolineare che la tua lingua è comune. Nella Silicon Valley, c'è almeno un MeetUp in cui le persone progettano le lingue, solitamente compilando con LLVM o simili. A mio parere, inizia scrivendo un elenco di principi equivalenti a "Zen di Python" . Contempla come la tua lingua sarà un importante miglioramento rispetto a tutti gli altri.

Vai avanti e codice.

    
risposta data 26.03.2017 - 20:23
fonte