Sistema operativo orientato agli oggetti

3

Mentre pensavo di scrivere un sistema operativo, mi sono imbattuto in un punto che non riuscivo a capire da solo:

Un sistema operativo può essere veramente scritto in un linguaggio di programmazione orientata agli oggetti (OOP)?

Dato che questi tipi di linguaggi non consentono l'accesso diretto alla memoria, non sarebbe forse impossibile per uno sviluppatore scrivere un intero sistema operativo usando solo un linguaggio OOP?

Prendi, ad esempio, il sistema operativo Android che esegue molti telefoni e alcuni tablet in uso in tutto il mondo. Credo che questo sistema operativo utilizzi solo Java, un linguaggio orientato agli oggetti. In Java, non ho avuto successo nel tentativo di indicare e modificare un indirizzo di memoria specifico che l'ambiente di runtime (JRE) non ha assegnato implicitamente al mio programma. In C, C ++ e altri linguaggi non OOP, posso farlo in poche righe.

Quindi questo mi fa dubitare che un sistema operativo possa essere scritto o meno in un OOP, specialmente in Java.

Qualunque controesempi o altre informazioni sono apprezzate.

    
posta nmagerko 27.11.2011 - 04:18
fonte

3 risposte

3

La backbone di Android è scritta su Linux così non proprio. È possibile scrivere un sistema operativo in C ++ e ce ne sono molti là fuori anche se non popolari. C ++ ti offre i concetti OOP che desideri e ti consente comunque di eseguire gli elementi di basso livello di cui hai bisogno per comunicare con l'hardware. C è ancora il linguaggio in cui sono scritti la maggior parte dei sistemi operativi (con alcuni backbone di assembly richiesti) e questo perché C è leggero e personalmente lo trovo migliore solo perché rimuove un sacco di roba OOP che non trovo necessario scrivere un sistema operativo (questa è solo la mia opinione però).

Tecnicamente è possibile scrivere un sistema operativo in Java, nel senso che dovresti collegare al codice C / C ++ (non ricordo come farlo in Java, ma credo che tu possa farlo) che a sua volta chiamerebbe sull'assemblea necessaria per parlare con un po 'dell'hardware. Il codice java dovrebbe anche compilare direttamente sul linguaggio macchina invece dello schema bytecode corrente eseguito sulla Java Virtual Machine.

Il concetto di alto livello del sistema operativo potrebbe essere fatto in java, ma il problema è che molte delle funzionalità dovrebbero esistere in un altro formato come fare alcune delle cose necessarie per la gestione dei dati da dispositivi e tali non possono essere facilmente realizzati in Java, se non del tutto.

    
risposta data 27.11.2011 - 04:24
fonte
9

Manca la terminologia nella tua domanda.

OOP è uno stile di programmi strutturanti. Come tale è indipendente dal linguaggio di programmazione, è possibile eseguire facilmente OOP in C. Molte API OS sono infatti orientate agli oggetti, ad esempio tutto ciò che restituisce un handle. OOP non ha nulla a che fare con l'impossibilità di operazioni non sicure nel tuo linguaggio di programmazione.

Penso che quello che stai veramente chiedendo sia: puoi scrivere un sistema operativo in una lingua con gestione automatica della memoria e sicurezza della memoria?

La risposta è: devi imbrogliare in qualche posto.

Alcune opzioni:

  • Rendi il compilatore / runtime mappare alcuni oggetti speciali direttamente agli indirizzi hai bisogno.
  • Aggiungi gli oggetti di rappresentazione hardware necessari alla libreria di compilazione del compilatore / runtime (e fai le cose non sicure all'interno del compilatore) - in qualche modo simile alla prima opzione
  • Estendi la lingua / libreria con operazioni non sicure
  • Modifica l'hardware in modo che supporti direttamente i tuoi oggetti di lingua (ad esempio link )
risposta data 27.11.2011 - 12:16
fonte
7

Non puoi nemmeno scrivere un intero sistema operativo in C. Una piccola parte di essa deve essere scritta in assembly per cose come bootstrap, immissione di modalità supervisore, ecc. Aggiungi un po 'più di assembly racchiusi in una piccola classe peek / poke e una classe di gestori di interrupt, e sei praticamente bravo a farlo qualsiasi lingua OO. Ci saranno evidenti inefficienze senza la manipolazione diretta del puntatore, ma ciò rende il linguaggio poco adatto.

Il problema principale con Java non è il suo orientamento all'oggetto, ma il fatto che non viene compilato in bytecode nativo, quindi richiede una JVM che deve essere scritta e avviata in altro modo.

    
risposta data 27.11.2011 - 05:50
fonte

Leggi altre domande sui tag