Di solito capisco il codice girando, o inserendo printfs qua e là, ma questa volta non è possibile, dal momento che il prodotto finale è un sistema operativo, quindi qualche suggerimento su come affrontare questo problema?
Di solito capisco il codice girando, o inserendo printfs qua e là, ma questa volta non è possibile, dal momento che il prodotto finale è un sistema operativo, quindi qualche suggerimento su come affrontare questo problema?
Questo non è specifico per un sistema operativo, ma per qualsiasi base di codice grande e / o complessa. Questa osservazione:
I usually understand code by fiddling around, or by inserting printfs here and there ....
(e dai commenti)
... without a way to print messages for me, since that's how I understand code
sembra preoccupante.
L'aggiunta di dichiarazioni di stampa può essere un buon modo per costruire la tua intuizione su come funziona qualcosa, o quando stai iniziando, o è troppo difficile far arrestare un debugger nel codice di cui sei preoccupato. È una buona tecnica.
Ma non è l'unica tecnica, non è sempre disponibile (come hai trovato), e non puoi fare affidamento su come usarlo come stampella.
Quando non puoi usare le istruzioni di stampa per aiutarti a seguire il percorso di esecuzione, o vedere i valori intermedi, devi solo pensare: difficile! - o scrivilo sulla carta e scoprilo da solo.
L'intuizione che hai costruito con l'aiuto delle istruzioni di stampa in impostazioni più semplici dovrebbe aiutare in questo. Pensa se quelle dichiarazioni di stampa come un'impalcatura, che hanno contribuito a sviluppare le tue capacità e intuizioni, al punto in cui non hai bisogno del ponteggio più.
Ovviamente non c'è nulla di male nel tornare a usarlo nei problemi in cui è disponibile, se è più veloce. Ma lo sceglierai come lo strumento giusto per un particolare lavoro, dal tuo intero toolkit - non basandoti su di esso come l'unico strumento che conosci.
Comunque, questo è un saggio generale sulla comprensione del codice . I problemi particolari relativi alle codebase di grandi dimensioni sono che devi capire anche structure . È un'abilità diversa, che puoi ottenere solo studiando basi di codice di grandi dimensioni. In particolare, se non ci sono molti commenti, devi inferire struttura e intento dal codice, che è ancora più difficile.
Inizia rompendolo. Quali componenti ti aspetti che un sistema operativo abbia? Uno o più filesystem, uno schedulatore, driver, cos'altro? Riesci a vedere i moduli di codice o le librerie corrispondenti a quei componenti su larga scala?
Se è così, scegline uno (se no, hai problemi reali). Dai un'occhiata alla struttura di alto livello e all'interfaccia di quel componente: puoi vedere cosa intende fare, o come è destinato a essere usato? Se è così: bene, questa è la tua visione di alto livello di un componente, ora sul prossimo. In caso contrario: vedi se riesci a trovare qualche altro codice utilizzando questo componente, forse dimostrerà l'intento dell'autore.
Ora hai una panoramica di alto livello delle parti del componente e qualche idea su come si integrano. Se hai bisogno di maggiori dettagli su qualcosa in particolare, tuffati nell'implementazione. Se hai bisogno di es. scrivi un driver, leggi alcuni driver esistenti, prova a capire le loro differenze e somiglianze, scegli quello più simile a quello che ti serve e inizia da lì.
Leggi altre domande sui tag operating-systems source-code