Ich werde dieses kommende Semester TA für einen Betriebssystemkurs sein. Die Labs werden sich speziell mit dem Linux-Kernel befassen.
Welche Konzepte/Komponenten des Linux-Kernels sind Ihrer Meinung nach die wichtigsten, die in der Klasse behandelt werden sollten?
Was würden Sie sich wünschen, was in Ihrem Studium abgedeckt wurde, das ausgelassen wurde?
Wir freuen uns über Vorschläge zum Linux-Kernel oder zum Gesamtdesign des Betriebssystems.
Aiden Bell
Meine Liste:
Was die Bedenken eines Betriebssystems sind: Abstraktion und Erweiterung der physischen Maschine und Resourcenmanagement.
Wie zum Bauprozess funktioniert dh wie architekturspezifische/Maschinencode-Sachen implantiert werden
Wie Systemaufrufe funktionieren und wie Module miteinander verknüpft werden können
Speicherverwaltung / Virtueller Speicher / Paging und alles andere
Wie Prozesse in POSIX und anderen Systemen entstehen, leben und sterben
Userspace vs. Kernel-Threads und was der Unterschied zwischen Prozessen/Threads ist
Warum zum monolithisches Kernel-Design wird ermüdend und welche Alternativen gibt es
Scheduling (und einige der alternativen / domänenspezifischen Scheduler)
E/A, Fahrerentwicklung und wie sie dynamisch geladen werden
Das frühen Stadien des Bootens und was der Kernel tut, um die Umgebung einzurichten
Probleme mit Uhren, mmu-losen Systemen etc
… ich könnte weitermachen …
ich habe es fast vergessen IPC und Unix „alles ist eine Datei“ Designentscheidungen
POSIX, warum es existiert, warum es nicht sein sollte
Lass sie am Ende einfach durch tanenbaums moderne Betriebssysteme und mache auch Fallstudien zu einigen anderen Kerneln wie Mach/Hurds Mikrokernel-Setup und vielleicht etwas verteiltem und Exokernel-Zeug.
Geben Sie auch einen umfassenden Überblick über Linux hinaus, denke ich
Für diejenigen, die super geeky sinddie Geschichte der Betriebssysteme und warum sie so sind, wie sie sind.
@Sweeny, MOS 3e ist eine großartige Ressource. Das HURD-Zeug würde ich als einfachere Quelle für Demonstrationen empfehlen. Oder sogar MINIX.
– Aiden Bell
15. Juni 2009 um 15:22 Uhr
@Aiden Bell Die Wahl des Betriebssystems liegt nicht in meiner Hand. Ich verstehe Ihre Argumentation für den Vorschlag, eine einfachere Quelle zu verwenden. Die Linux-Quelle kann zunächst entmutigend sein, aber dafür bin ich da. Ich möchte meine Studenten auch ermutigen, in Zukunft mit der Linux-Entwicklung fortzufahren, in der Hoffnung, dass sie weiterhin Fehler beheben und der Community etwas zurückgeben werden.
– Sweney
15. Juni 2009 um 15:31 Uhr
@Sweeney – ich verstehe 🙂 Persönlich denke ich, dass mehr Leute hinter HURD stehen sollten – ich mache mich gerade damit vertraut, um mich zu engagieren.
– Aiden Bell
15. Juni 2009 um 15:34 Uhr
Da ist viel Zeug, aber es ist gut. Vielleicht auch etwas auf Dateisystemen tun.
– David Johnston
16. Juni 2009 um 11:35 Uhr
Wow, total neutrale Liste da. /Sarkasmus. Komisch, wie das monolithische Kernel-Design ermüdend wird. Das erklärt, warum Windows mit seinem hybriden Kernel so viel effizienter und stabiler ist als Linux, oder?
– Meilen Route
31. August 2013 um 5:33 Uhr
Die virtuelle Dateisystemebene ist ein absolutes Muss für jede Klasse von Linux-Betriebssystemen.
Ich habe einen ähnlichen Kurs am College belegt. Das frustrierendste, aber gleichzeitig hilfreichste Projekt war das Schreiben eines kleinen Dateisystems für das Linux-Betriebssystem. Dies zum Laufen zu bringen dauert ca. 2-3 Wochen für eine Gruppe von 4 Personen und bringt Ihnen wirklich die Besonderheiten des Kernels bei.
Ich habe kürzlich an einem Kurs zu Betriebssystemen teilgenommen und fand die Projekte herausfordernd, aber wesentlich, um die Konzepte im Kurs zu verstehen. Die Projekte haben auch Spaß gemacht, indem sie uns mit einbezogen haben eigentlich mit arbeiten der Linux-Quellcode (Version 2.6.12 oder so ungefähr).
Hier ist eine Liste einiger ziemlich guter Projekte/Konzepte, die meiner Meinung nach in jedem Betriebssystemkurs behandelt werden sollten:
Der Unterschied zwischen Userspace und Kernelspace
Prozessmanagement (bspw fork(), exec()etc.)
Schreiben Sie eine kleine Shell, die das Wissen von demonstriert fork() und exec()
Wie Systemaufrufe funktionieren, dh wie wechseln wir vom Benutzer- in den Kernelmodus
Fügen Sie dem Linux-Kernel einen einfachen Systemaufruf hinzu, schreiben Sie eine Testanwendung, die den Systemaufruf aufruft, um zu demonstrieren, dass er funktioniert.
Synchronisation in und aus dem Kernel
Implementieren Sie Synchronisierungsprimitive im Benutzerbereich
Verstehen, wie Synchronisierungsprimitive im Kernel-Space funktionieren
Verstehen Sie, wie sich Synchronisierungsprimitive zwischen Single-CPU-Architekturen und SMP unterscheiden
Fügen Sie dem Linux-Kernel einen einfachen Systemaufruf hinzu, der das Wissen über die Verwendung von Synchronisierungsprimitiven im Linux-Kernel demonstriert (dh etwas, das beispielsweise die Tasklistensperre erwerben muss usw., aber auch zu etwas machen muss, bei dem Sie kmalloc, which kann nicht durchgeführt werden, während Sie eine Sperre halten (es sei denn, Sie GFP_ATOMIC, aber Sie sollten es wirklich nicht tun))
Scheduling-Algorithmen und wie Scheduling im Linux-Kernel stattfindet
Ändern Sie den Linux-Taskplaner, indem Sie Ihre eigene Planungsrichtlinie hinzufügen
Was ist Paging? Wie funktioniert es? Warum haben wir Paging? Wie funktioniert es im Linux-Kernel?
Fügen Sie dem Linux-Kernel einen Systemaufruf hinzu, der Ihnen bei gegebener Adresse mitteilt, ob diese Adresse vorhanden ist oder ob sie ausgelagert wurde (oder eine andere Zuweisung mit Paging).
Dateisysteme – was ist das? Warum gibt es sie? Wie funktionieren sie im Linux-Kernel?
Disk-Scheduling-Algorithmen – warum gibt es sie? Was sind Sie?
Fügen Sie dem Linux-Kernel ein VFS hinzu
Add a VFS to the Linux kernel? meinst du Add a FS to the Linux kernel?
– Lai Jiangshan
14. Juli 2012 um 2:23 Uhr
Nun, ich habe dieses Semester gerade meinen OS-Kurs beendet, also dachte ich, ich melde mich mal an.
Ich war irgendwie verärgert, dass wir nicht wirklich mit dem eigentlichen Betriebssystem selbst herumgespielt haben, sondern nur Systemprogrammierung durchgeführt haben. Ich würde empfehlen, die Labs auf etwas zu haben, das im Betriebssystem selbst enthalten ist, so wie es sich anhört, was Sie tun möchten.
Eine Übung, die mir Spaß machte und die ich jedoch nützlich fand, war das Schreiben unserer eigenen malloc/free-Routinen. Es war schwierig, aber auch ziemlich unterhaltsam.
Vielleicht auch das Laden von Programmen in den Speicher und/oder das Einrichten des Speichermanagers (z. B. Paging).
Fortran
Für Labs kann es cool sein, ihnen tatsächlichen Code zu zeigen und darüber zu diskutieren, Fragen zu stellen, was ihrer Meinung nach so und nicht anders gemacht wird usw.
Wenn ich wieder an der Universität wäre, würde ich mich sicherlich über ausführlichere Lektionen über Synchronisierungsprimitive, Parallelität und so weiter freuen … das sind schwierige Themen, die ohne angemessene Anleitung schwieriger anzugehen sind. Ich erinnere mich, dass ich zu einer Rede von Paul “Rusty” Russell über Spinlocks und andere Synchronisationsprimitive gegangen bin, die absolut krass war, vielleicht könnten Sie sie auf YouTube finden und sich ein paar Ideen ausleihen.
+1 für Parallelität, obwohl zwischen interner Parallelitätssteuerung und Userland-API unterschieden werden muss
– Aiden Bell
15. Juni 2009 um 15:20 Uhr
stsquad
Ein weiteres gutes Thema (oder möglicherweise eine Übung für die Schüler) wäre die Betrachtung der Virtualisierung. Besonders Rusty Russels “lguest”, das als einfache Einführung in die Anforderungen zur Virtualisierung eines Betriebssystems konzipiert ist. Die Dokumente sind auch gut zu lesen.
+1 für Parallelität, obwohl zwischen interner Parallelitätssteuerung und Userland-API unterschieden werden muss
– Aiden Bell
15. Juni 2009 um 15:20 Uhr
Ich habe gerade im Frühjahr einen Kurs belegt, der perfekt zu Ihrer Beschreibung passt (OS-Design mit Linux). Ich war tatsächlich sehr frustriert darüber, weil ich das Gefühl hatte, dass sich der Lehrer zu eng auf die Projekte konzentrierte, anstatt ein breiteres Verständnis zu vermitteln. Unser letztes Projekt drehte sich zum Beispiel um Futexe. Mein Partner und ich haben kaum erfahren, was sie waren, haben es (irgendwie) zum Laufen gebracht und es dann abgegeben. Ich bin ohne allgemeines Wissen über irgendetwas wirklich von diesem Projekt weggekommen. Ich wünschte, eines der Projekte wäre gewesen, einen einfachen Gerätetreiber oder so etwas zu schreiben.
Mit anderen Worten, ich denke, es ist gut, dafür zu sorgen, dass ein guter, breiter Überblick präsentiert wird, mit so vielen Details, wie Sie es sich leisten können, aber letztendlich breit. Ich hatte das Gefühl, dass mein Lehrer diese winzigen Bereiche kleinlich herauspickte und uns dazu brachte, uns intensiv darauf zu konzentrieren, während ich am Ende NICHT mit einem so großartigen allgemeinen Verständnis der inneren Funktionsweise von Linux davonkam.
Eine andere Sache, die ich anmerken möchte, ist, dass ein Großteil der Gründe, warum ich das Wissen aus dem Unterricht nicht behalten habe, mangelnde Organisation war. Themen kamen jede Woche aus dem Nichts, und es gab keinen Fahrplan. Geben Sie dem Material einen logischen Fluss. Mentale Organisation ist der Schlüssel zum Erhalt des Wissens.
13873700cookie-checkInhalt für die Klasse Linux-Betriebssystemeyes