Wie kann man Linux-Kernel-Quellcode für Anfänger verstehen? [geschlossen]

12

Ich bin ein Student, der sich für Memory Management interessiert, insbesondere für die Page-Replacement-Komponente des Linux-Kernels.

Welche verschiedenen Anleitungen können mir helfen, die Kernelquelle besser zu verstehen?

Ich habe versucht, das Buch " Understanding the Linux Virtual Memory Manager" von Mel Gorman und " Understanding the Linux Kernel" von Cesati und Bovet zu lesen , aber sie erklären nicht den Kontrollfluss durch den Code. Sie erklären lediglich die verschiedenen verwendeten Datenstrukturen und die Arbeit, die verschiedene Funktionen ausführen. Dies macht den Code verwirrender.

In meinem Projekt geht es darum, den Algorithmus zum Ersetzen von Seiten in einem Mainstream-Kernel zu optimieren und dessen Leistung für eine Reihe von Workloads zu analysieren. Gibt es eine Variante des Linux-Kernels, die einfacher zu verstehen wäre (wenn nicht der Linux-2.6.xx-Kernel)?

Mücke
quelle
1
Darf ich fragen, warum Sie sich für die Kernel-Programmierung entschieden haben, wenn Sie sich nicht leicht mit komplexem Code zurechtfinden?
LennyProgrammers

Antworten:

13

Datenstrukturen im Fokus . Das Verständnis von Datenstrukturen ist in der Regel wichtiger als Code.

Wenn Ihnen nur Datenstrukturen, aber kein Code angezeigt werden, haben Sie immer noch den Überblick über das System.

Umgekehrt ist es sehr schwer, das System zu verstehen, wenn nur Code, aber keine Datenstrukturen angezeigt werden.

"Ich werde in der Tat behaupten, dass der Unterschied zwischen einem schlechten und einem guten Programmierer darin besteht, ob er seinen Code oder seine Datenstrukturen für wichtiger hält. Schlechte Programmierer sorgen sich um den Code. Gute Programmierer sorgen sich um Datenstrukturen und ihre Beziehungen." - Linus Torvalds

"Zeigen Sie mir Ihre Flussdiagramme und verbergen Sie Ihre Tabellen, und ich werde weiterhin verwirrt sein. Zeigen Sie mir Ihre Tabellen, und ich werde Ihre Flussdiagramme normalerweise nicht benötigen; sie werden offensichtlich sein." - Fred Brooks.

Maglob
quelle
4

Kernel Newbies ist ziemlich gut, denke ich

Es gibt eine Menge Leute, die daran interessiert sind, wie der Kernel funktioniert. Ich denke, Sie können dort ein oder zwei Dinge lernen

Mahmoud Hossam
quelle
3

Die Debugger-Option könnte nützlich sein.

Nach dem Erstellen des Kernels mit der Debugger-Option können noch einige Beispiel-Testanwendungen geschrieben werden, die verschiedene Systemaufrufe aufrufen, die den Kernel aufrufen. Sie können jeweils einen Teil des Kernel-Codes durchgehen und dessen Implementierung verstehen.

Saroj Panda
quelle
0

Eine Möglichkeit, eine komplexe Codebasis zu erlernen, besteht darin , sie in einem Debugger auszuführen und zu sehen, wohin die Dinge Sie führen. Für Linux gibt es den Linux Kernel Debugger .

LennyProgrammierer
quelle
Ich bin mir nicht sicher, ob dies für jemanden funktioniert, der immer noch versucht, was er mit diesem gigantischen Stück Code machen soll und wie es funktioniert
Mahmoud Hossam,
1
Ich habe diesen Ansatz mit riesigen Codebasen gemacht. Sie benötigen jedoch einen Einstiegspunkt und eine Idee, wonach Sie suchen müssen.
LennyProgrammers
Ja, das habe ich gemeint, er muss wissen, wonach er zuerst suchen muss, bevor er den Kernel
debuggt