Domanda

Mi piacerebbe acquisire una migliore conoscenza degli interni del sistema operativo.Gestione dei processi, gestione della memoria e cose del genere.
Stavo pensando di imparare conoscendo il kernel Linux o BSD.
Quale kernel è migliore per scopi di apprendimento?
Qual è il posto migliore per iniziare?
Potete consigliarmi qualche buon libro?

È stato utile?

Soluzione

Al college, avevo un corso sui sistemi operativi in ​​cui usavamo a libro di Tanenbaum.Nel corso abbiamo implementato un driver di dispositivo nel file Sistema operativo Minix.È stato molto divertente e abbiamo imparato molto.

Una cosa da notare però, se scegli Minix, è progettato per l'apprendimento.È un microkernel, mentre Linux e BSD sono un kernel monolitico, quindi ciò che impari potrebbe non essere traducibile al 100% per poter lavorare con Linux o BSD, ma puoi comunque ricavarne molto, senza dover elaborare molto quante più informazioni.

Come nota a margine, se hai letto Solo per divertimento, Linus in realtà stava giocando con Minix prima di scrivere Linux, ma non era abbastanza per i suoi scopi.

Altri suggerimenti

Come utente Linux direi che Linux ha una grande comunità in cui le persone possono conoscere il kernel. http://kernelnewbies.org è un ottimo posto per iniziare a porre domande e imparare come funziona il kernel.Non posso consigliare un libro, ma una volta letto il materiale iniziale su kernelnewbies, la fonte è molto ben documentata.

A parte i buoni libri già menzionati (Opeating System Design & Implementation è particolarmente buono), procurati una versione 1.x del kernel Linux, caricala in VMWare o VirtualBox e inizia a giocare da lì.

Dovrai dedicare molto tempo alla navigazione del codice sorgente.Per questo, controlla http://lxr.linux.no/ che è una versione collegata sfogliabile della fonte e rende la vita molto più semplice.Per la primissima versione di Linux (0.01), dai un'occhiata http://lxr.linux.no/linux-old+v0.01/.Il divertimento inizia alle http://lxr.linux.no/linux-old+v0.01/boot/boot.s.Man mano che avanzi da una versione all'altra, controlla il ChangeLog e approfondisci le parti che sono cambiate per evitare di rileggere di nuovo tutto.

Una volta acquisiti i concetti, guarda 2.0, poi 2.2, ecc.Preparati a dedicare MOLTO tempo al processo.

In precedenza avevo acquistato questi libri su consiglio per lo stesso scopo, ma non sono mai riuscito a studiarli da solo, quindi prendili solo come consigli di seconda mano.

Notando la mancanza di BSD qui, ho pensato di intervenire:

Non ho seguito nessuno dei corsi personalmente, ma ho sentito parlare Marshall Kirk McKusick in altre occasioni, ed è davvero bravo in quello che fa.

E ovviamente le pagine man di BSD, che sono un'eccellente risorsa in quanto vengono mantenute in misura molto maggiore rispetto alla normale pagina man di Linux.Prendiamo ad esempio il uvm(9) pagina man, che descrive l'interfaccia della memoria virtuale in OpenBSD.

Non proprio correlato, ma consiglierò anche il video Storia delle distribuzioni software di Berkeley in quanto fornisce una bella introduzione alle parti BSD della storia e della cultura di UNIX, oltre a molti anedtodi esilaranti del passato.

Ti consiglio i kernel BSD!I kernel BSD hanno molti meno hacker, quindi seguirne l'evoluzione è più semplice.Sia i kernel BSD che quelli Linux hanno grandi hacker, ma alcune persone sostengono che la fama inferiore di BSD filtri quelli alle prime armi.Inoltre, prendere decisioni di progettazione è più semplice quando i sorgenti non vengono aggiornati 100 volte al giorno.

Tra le scelte BSD, la mia preferita è NetBSD.Potrebbe non essere la scelta indolore che desideri per il tuo desktop, ma poiché si concentra fortemente sulla portabilità, la qualità è abbastanza buona.Penso che questa parte dica tutto:

Alcuni sistemi sembrano avere la filosofia “Se funziona, è giusto”.In questa luce la filosofia di NetBSD potrebbe essere descritta come "Non funziona se non è giusto"

Se hai lavorato abbastanza a lungo, saprai che NetBSD è una vera gioia per imparare una buona programmazione.Anche se professionalmente troverai più possibilità con Linux

Qualunque scelta tu faccia, inizia a unirti alle loro liste di posta, segui le discussioni.Studia alcune patch e infine prova a risolvere i bug da solo.Per quanto riguarda i libri, cerca gli articoli di Diomidis Spinellis e il suo libro.Non è esattamente un libro sul kernel, ma contiene esempi di NetBSD e aiuta molto ad affrontare software di grandi dimensioni.

Non c'è niente che possa sostituire l'immersione nel codice.Prova a trovare un driver o un sottosistema che ti interessa e provalo.Con strumenti come Stazione di lavoro VMware è semplicissimo apportare tutte le modifiche desiderate, eseguire lo snapshot della VM ed eseguire il kernel modificato.Se il kernel va in panico all'avvio, a chi importa?Torna semplicemente allo snapshot e risolvi il problema.

Per i libri lo consiglio vivamente Sviluppo del kernel Linux di Roberto Amore.È un libro scritto meravigliosamente: molte informazioni, organizzate in modo sensato e divertente...lettura per nulla secca.

Segui il consiglio di Mike Stone e inizia con Minix.Questo è quello che ha fatto Linus!Il libro di testo è davvero ben scritto e Tannenbaum fa un ottimo lavoro nel mostrare come le varie funzionalità siano implementate in un sistema reale.

Nessuno sembra aver menzionato che BSD dal punto di vista del codice è molto più pulito e coerente.Anche la documentazione è decisamente migliore (come già accennato).Ma poiché c'è un sacco di armeggiare con qualunque sistema tu scelga, sceglierei quello che usi più spesso.

Linux e Minix sono divertenti da imparare.Se vuoi anche sapere come appare un moderno sistema operativo micro-kernel, puoi dare un'occhiata a QNX.La documentazione completa è disponibile online ed è molto accessibile.Per esempio, Questo libro in linea.

Quando ero all'università ho passato un semestre a studiare sistemi operativi e come parte di questo avevo un compito in cui dovevamo implementare un filesystem basato su RAM in Linux.

È stato un modo fantastico per comprendere gli interni del keurnel Linux e per capire come tutto si incastra insieme - E molto divertente giocare con il modo in cui interagisce anche con gli strumenti standard.

Non l'ho provato personalmente, ma puoi andare su Linux From Scratch e iniziare a creare la tua distribuzione Linux.Sembra qualcosa che richiederà un sacco di tempo, ma si tradurrà in una conoscenza approfondita delle viscere del kernel Linux e di come funziona ciascuna parte.Naturalmente, puoi integrare questo apprendimento seguendo uno qualsiasi degli altri suggerimenti qui.

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