Sto scrivendo un sistema operativo monolitico (è uno scherzo chiamarlo un sistema operativo ma ha funzionalisti di livello scolastico molto minimi). Quando dico monolitico, intendevo, è compilato come un singolo blob binario e nessun supporto per il file system ecc. Attualmente ho solo uno spazio utente semplice e rudimentale che non è altro che un ciclo infinito.Uscita da un'applicazione in un sistema operativo senza separazione della memoria
Sto pianificando di rendere il mio sistema operativo più utile e di voler scrivere app utente che possono terminare come normali app su un sistema operativo completo.
Non ho glibc o equivalente. La mia attuale libreria nello spazio utente è il codice che ho scritto. Ora il mio problema è come aggiungere un framework per le app dello spazio utente, che permetterebbe loro di terminare in un punto fisso.
So come vengono compilati i programmi sui sistemi regolari e cosa succede quando un programma termina. Tuttavia, nel mio caso, non ho il lusso di compilare programmi contro le librerie e se un programma termina, il mio puntatore di istruzioni va in una deviazione selvaggia.
Attualmente sto facendo tutte le app per fare una "chiamata di ritorno" e sto pre-popolando lo stack delle app con un indirizzo di correzione (durante il lancio). C'è un modo migliore per gestire il problema?
Insieme alla risposta, sarei più che felice di ottenere chiarezza su alcuni concetti del sistema operativo.
Sto lavorando su piattaforma emulatore x86 e sto compilando staticamente il mio binario. (Ho un supporto per la memoria virtuale)
Sono abbastanza sicuro che la prima versione di Linux fosse uno scherzo. Non essere così veloce da autoironico :-) – paxdiablo
Stai chiedendo di un problema specifico con lo stack di app o stai chiedendo qualcos'altro? – jxh
Sto chiedendo soluzioni sulla terminazione dell'app in un indirizzo fisso. Attualmente ho intrapreso un percorso in cui ogni app ha un indirizzo di ritorno fisso che popolino sullo stack. Ora, sto cercando una soluzione migliore. –