I file con estensione .h sono i cosiddetti file header, il cui utilizzo, detto in termini sicuramente non esatti ma comprensibili, è quello di essere inclusi nel tuo sorgente C per darti la possibilità di accedere a librerie di funzioni già definite; in altri termini, se vuoi crearti una libreria di funzioni, devi creare sia un file .c in cui ci sono le funzioni vere e proprie, sia un file .h che altri o tu stessa potete includere nei vostri sorgenti per usare quelle funzioni (sicuramente questa risposta farà storcere il naso ai puristi, ma non credo sia poi così inesatta).

Quanto alle funzioni i cui nomi iniziano con __ , se non ricordo male questo serve a marcare funzioni "di sistema" o anche funzioni che non sono fatte per essere richiamate da fuori del sorgente in cui sono definite.

Tieni comunque presente che mettersi a spulciare i sorgenti di un oggetto complesso come il kernel di linux non è certo un modo per capire il C: sono troppo complessi, e ti conviene di certo seguire il percorso proposto dal tuo libro di testo.

Ciao!