Domanda

La programmazione non è il mio lavoro principale, anche se mi diverto e talvolta vengo pagato per questo. Per molti anni ho sentito parlare di Linux e i miei amici mi hanno mostrato molti * nix (o * nici?), Anche se mi attengo a Mac OS.

Pensi che ci siano parti del kernel di Linux che mi piacerebbe guardare, che mi aiuterebbero a capire di cosa si tratta? Ad esempio, in che modo Linux è diverso da Darwin?

Sono cresciuto con assemblatore e DOS, quindi cose come interruzioni o C di basso livello non dovrebbero essere ostacoli alla comprensione. Ma alla fine sono più interessato ai concetti di alto livello, come il threading o lo stack di rete: so che diversi sistemi operativi li fanno diversamente. E sto cercando qualcosa di divertente, facile e piacevole, come la lettura a tarda notte.

(Nota: fatto un CW, per ogni evenienza)

Aggiornamento: ho cercato alcuni documenti e ho iniziato a leggere:

È stato utile?

Soluzione

Consiglierei di guardare LXR . Rende più facile seguire il flusso del codice (non è necessario cercare ciascuna funzione chiamata - beh, ce l'hai, ma il sito lo fa per te).

Alcuni punti di partenza, per la versione corrente (2.6.30):

  • start_kernel () - pensalo come l'equivalente del kernel di main () . Questa funzione inizializza quasi tutti i sottosistemi del kernel; seguilo per vedere nel codice cosa vedi scorrere sullo schermo durante l'avvio.
  • entry_32.S - chiamate di sistema e interrompe (versione x86-32, che dovrebbe essere più vicina a ciò che sai; nota l'uso del dialetto assembly AT & amp; T invece del dialetto Intel a cui potresti essere più abituato).
  • head_32.S - il kernel punto d'entrata. È qui che inizia il kernel dopo il passaggio alla modalità protetta; alla fine, chiamerà start_kernel () .
  • arch / x86 / boot - the real- modalità bootstrap code. Inizia in assembly ( boot / header.S ), ma passa rapidamente al codice C (a partire da boot /main.c ). Esegue l'inizializzazione in modalità reale (principalmente chiamate BIOS che devono essere fatte prima di passare alla modalità protetta); viene compilato utilizzando uno strano trucco GCC ( .code16gcc ), che consente la generazione di codice in modalità reale a 32 bit.
  • arch / x86 / boot / compressed - se ti sei mai chiesto da dove viene il "Decomprimere Linux ..." il messaggio viene, viene da qui.

Altri suggerimenti

Io stesso, ho sempre trovato il codice di pianificazione delle attività un po 'un grido: - /

Pensa che devi farti un hobby al di fuori del settore. O una vita :-)

I commenti nel kernel possono essere piuttosto divertenti. Ci sono alcuni suggerimenti su dove trovare i migliori su kerneltrap.

  

arch / sparc / lib / checksum.S- / * Sun, non puoi battermi, semplicemente non puoi. Smettere di provare,   arch / sparc / lib / checksum.S: * arrenditi. Sono serio, ho intenzione di calciare la merda vivente   arch / sparc / lib / checksum.S- * fuori di te, game over, luci spente. * /

linux-0.01.tar.gz è Kernel storico e buono per iniziare
è semplice, minuscolo e migliore per iniziare a leggere
(ha anche void main (void) Invece di start_kernel () lol: D)

Potresti voler leggere o sfogliare un libro che descrive il kernel Linux prima di approfondire il kernel Linux.

I libri che vengono in mente sono:

Probabilmente otterresti di più dalla lettura di un libro sulla teoria del sistema operativo. Per quanto riguarda il codice sorgente: non ne ho idea, ma potresti facilmente scaricare il sorgente del kernel Linux e vedi se riesci a trovare qualcosa che piace.

Questo dovrebbe far apparire un codice interessante quando eseguito nella directory src:

grep -ir "fixme" *

prova anche con altri termini comici, merda, merda, f ***, pinguino, ecc.

Devi ridefinire la parola "divertimento" nel tuo contesto. :)

Detto questo, il kernel Linux potrebbe essere troppo un mostro da affrontare. Potresti voler iniziare con alcuni kernel accademici o più primitivi per capire prima cosa sta succedendo. Puoi anche prendere in considerazione la Jolix libro.

È stato raccomandato da un bel po 'di gente che la v0.0.1 di Linux è la più facile da capire.

Tuttavia, se stai cercando una buona fonte del kernel da leggere, non andrei con Linux, è una bestia di un hack (circa come dire che le fonti GCC sono "divertenti") Invece, potresti provare Minix o uno dei BSD (Darwin è fondamentalmente un ramo di NetCirc iirc) o addirittura uno dei tanti cloni DOS gratuiti se tutto il resto è un po 'troppo spaventoso.

Prova a leggere il codice che implementa questi dispositivi a caratteri: / Dev / zero / Dev / null / Dev / full

E forse i generatori di numeri casuali se sei propenso. Il codice è semplice e intuitivo rispetto a tutti gli altri driver di dispositivo poiché non tocca alcun hardware.

Inizia da drivers / char / mem. *

kernel.h

Alcuni semplici trucchi che possiamo imparare, come

#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
...
#define min(x, y) ...
...
#define container_of

Per divertimento immagino che potresti anche vedere Minix, non è esattamente Linux ma i moderni sistemi operativi di tenenbaum sono una buona lettura.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top