Prerequisiti utili per il corso sui sistemi operativi?

4

Quanto è importante la conoscenza delle strutture dati e degli algoritmi per un corso di Programmazione di sistemi e sistemi operativi in cui sarà richiesto di progettare e implementare un kernel di un sistema operativo in tempo reale (fatto usando C e 68K)?

Quanto sarà utile programmare l'esperienza nell'implementazione di strutture di dati come elenchi collegati, code, alberi binari, ecc. in C ++ per questo tipo di corso?

grazie!

    
posta rrazd 22.06.2011 - 19:30
fonte

4 risposte

3

È probabile che elenchi e code collegati siano essenziali per qualsiasi pratica implementazione del sistema operativo. Probabilmente anche altre strutture di dati saranno utili. Se hai esperienza in C ++ con queste strutture dati, non dovresti avere problemi a implementarle in C una volta che avrai trovato confidenza con le differenze tra le lingue.

    
risposta data 22.06.2011 - 19:32
fonte
2

tutte le strutture dati che hai menzionato ti torneranno utili. In aggiunta a ciò, è anche probabile che ti verrà dato un progetto correlato alla programmazione di rete, poiché questa è l'area in cui i thread vengono utilizzati per la maggior parte del tempo nella vita reale. Quindi, in aggiunta a ciò, potrebbe essere utile conoscere le informazioni su socket e networking. Nel caso in cui tu possa leggi questo articolo consigliato dal mio professore del sistema operativo.

    
risposta data 22.06.2011 - 19:39
fonte
1

Avrai bisogno di molte di queste strutture dati per lo scheduler. A seconda dell'algoritmo che si utilizza per pianificare i processi, si useranno diverse strutture di dati. Il più popolare, un algoritmo round-robin utilizzerà una coda (FIFO).

Farai anche un sacco di threading e fork / exec che non sono realmente dipendenti dalla struttura dei dati, ma utilizzano molta programmazione di "sincronizzazione".

Nella classe che ho preso non abbiamo effettivamente scritto il sistema operativo, abbiamo solo usato l'API di base fornita dal sistema operativo (come la lettura da un buffer, la scrittura su un buffer, fork, exec, ecc ...) e ha anche utilizzato linguaggi di livello superiore come C # e Java per implementare applicazioni multithread.

Capire i concetti alla base delle risorse, i problemi dei consumatori dei produttori (livelocking, deadlocking) saranno molto utili.

    
risposta data 22.06.2011 - 19:44
fonte
0

Devi avere sempre bisogno di conoscere le tue strutture dati di base: come implementare i set (ordinati e non ordinati), le code, gli elenchi, ecc.

È meglio avere una buona conoscenza dell'architettura hardware (set di istruzioni, registri, stack di pushdown hardware, trap, interrupt, salvataggi / ripristini di contesto, mappe di memoria / spazi di indirizzi) o come Il funzionamento del sistema operativo non ha alcun senso e non avrai alcuna possibilità di implementare un vero programmatore.

E farai meglio a pensare che molti programmi ("processi") possano essere eseguiti in parallelo (sia simulato che per reale) sotto e OS, e che le interazioni tra questi processi debbano essere gestite per evitare il caos totale .

    
risposta data 23.06.2011 - 06:05
fonte

Leggi altre domande sui tag