Inhalt für die Klasse Linux-Betriebssysteme

Lesezeit: 7 Minuten

Benutzeravatar von Sweeney
Sweeney

Ich werde dieses kommende Semester TA für einen Betriebssystemkurs sein. Die Labs werden sich speziell mit dem Linux-Kernel befassen.

  1. Welche Konzepte/Komponenten des Linux-Kernels sind Ihrer Meinung nach die wichtigsten, die in der Klasse behandelt werden sollten?
  2. 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.

Benutzeravatar von Aiden Bell
Aiden Bell

Meine Liste:

  1. Was die Bedenken eines Betriebssystems sind: Abstraktion und Erweiterung der physischen Maschine und Resourcenmanagement.
  2. Wie zum Bauprozess funktioniert dh wie architekturspezifische/Maschinencode-Sachen implantiert werden
  3. Wie Systemaufrufe funktionieren und wie Module miteinander verknüpft werden können
  4. Speicherverwaltung / Virtueller Speicher / Paging und alles andere
  5. Wie Prozesse in POSIX und anderen Systemen entstehen, leben und sterben
  6. Userspace vs. Kernel-Threads und was der Unterschied zwischen Prozessen/Threads ist
  7. Warum zum monolithisches Kernel-Design wird ermüdend und welche Alternativen gibt es
  8. Scheduling (und einige der alternativen / domänenspezifischen Scheduler)
  9. E/A, Fahrerentwicklung und wie sie dynamisch geladen werden
  10. Das frühen Stadien des Bootens und was der Kernel tut, um die Umgebung einzurichten
  11. Probleme mit Uhren, mmu-losen Systemen etc
  12. … ich könnte weitermachen …
  13. ich habe es fast vergessen IPC und Unix „alles ist eine Datei“ Designentscheidungen
  14. 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).

Benutzeravatar von fortran
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

Benutzeravatar von stsquad
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.

1387370cookie-checkInhalt für die Klasse Linux-Betriebssysteme

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy