Betriebssysteme I (2021/22)

Prof. Dr. Andreas Polze
Felix Eberhardt, Andreas Grapentin, Felix Grzelka, Sven Köhler, Lukas Wenzel
Tutorien: Leon Hermann, Magnus Menger

Kontakt: bs@hpi.uni-potsdam.de
Termine: Dienstags, 9:15-10:45 Uhr - Selbststudium
Termine: Donnerstags, 11:00-12:30 Uhr - Vorlesung / Übungsbesprechung Synchron via Zoom
Zoom-Meeting: 624 4850 3473 | Kenncode: 56084410
Tutorien: 30min Tutoriumstermine, freiwilliges Angebot, Terminregistrierung, Code-Upload zum Review mindestens 24h vor dem Termin

Betriebssysteme müssen einerseits die Ressourcen eines Rechners effektiv verwalten und andererseits zum Programmieren eine geeignete Abstraktion von der zugrundeliegenden Hardware bieten. In der Lehrveranstaltung werden die Grundlagen von klassischen Betriebsystemen vermittelt sowie Techniken und Ansätze zur Implementierung von Nebenläufigkeit, Schedulern, Synchronisationsmechanismen, Speicherverwaltung und Sicherheitskomponenten an Beispielen diskutiert.

Termine

  • 26.10.2021 9:15 Einführung
  • 02.11.2021 9:15 Selbststudium
  • 04.11.2021 11:00 Vorlesung [Aufzeichnung]
  • 09.11.2021 9:15 Selbststudium Unit OS2
  • 11.11.2021 11:00 Vorlesung [Aufzeichnung]
  • 23.11.2021 9:15 Selbststudium Unit OS3
  • 25.11.2021 11:00 Vorlesung [Aufzeichnung]
  • 07.12.2021 9:15 Selbststudium Unit OS4
  • 09.12.2021 11:00 Vorlesung [Aufzeichnung]
  • 11.01.2022 9:15 Selbststudium Unit OS5
  • 13.01.2022 11:00 Vorlesung [Aufzeichnung]
  • [Aufgabenblatt OS5]
  • 18.01.2022 9:15 Selbststudium Unit OS5
  • 20.01.2022 11:00 Besprechung Aufgabenblatt OS5 [Aufzeichnung]
  • [Aufgabenblatt OS5]
  • 25.01.2022 9:15 Selbststudium Unit OS5
  • 27.01.2022 11:00 Besprechung Aufgabenblatt OS5 [Aufzeichnung]
  • 01.02.2022 9:15 Selbststudium Unit OS6
  • 03.02.2022 11:00 Vorlesung [Aufzeichnung]
  • 08.02.2022 9:15 Selbststudium Unit OS6
  • 10.02.2022 11:00 Vorlesung [Aufzeichnung]
  • [Checkpoint OS5]
  • 15.02.2022 9:15 Besprechung der Vorlesungsinhalte
  • 17.02.2022 11:00 Keine Veranstaltung. Viel Erfolg bei Ihrer SWA-Klausur!

Lernziele der Lehrveranstaltung

Ein Betriebssystem definiert eine Abstraktion der Hardware und verwaltet die gemeinsame Nutzung von Ressourcen durch die Benutzer des Computers. Sie alle sind derzeit Benutzer mindestens eines Betriebssystems. Viele von Ihnen sind auch kompetente Entwickler von Betriebssystem-APIs, einige sind vielleicht bereits Experten, die technische Details verstehen.

Das Ziel der Vorlesung ist, die Fähigkeiten in diesen Bereichen weiterzuentwickeln. Die Lehrveranstaltung richtet dazu ihren Schwerpunkt auf Technologien in Standard-Betriebssystemen und zwar über eine Reihe von Themen wie Scheduling, Nebenläufigkeit, Speicherverwaltung und Sicherheit.

  • Sie sollen am Ende der Vorlesung als Benutzer in der Lage sein, die richtige Terminologie zu verwenden, wenn Sie mit anderen über Konzepte von Betriebssystemen sprechen; und systemeigene Werkzeuge verwenden können, um das Anwendungs- und Systemverhalten zu beobachten und zu verstehen (z.B. um die Leistung zu messen).
  • Als Entwickler sollen Sie am Ende der Vorlesung in der Lage sein, Standard-Programmierschnittstellen für die Zuweisung von und den Zugriff auf Betriebssystem-Ressourcen nutzen zu können und die Unterschiede zwischen den einzelnen Funktionen zu verstehen; die vom Betriebssystem bereitgestellten Synchronisationsprimitive nutzen zu können, um "Critical Section"-Probleme in nebenläufigen und parallelen Anwendungen sinnvoll zu lösen; und die Auswirkungen, die das Verhalten einer isolierten Anwendung auf die Stabilität des Systems haben kann, zu verstehen und zu analysieren.
  • Als Experte sollen Sie am Ende der Vorlesung in der Lage sein, verschiedene Betriebssysteme auf der Basis unterschiedlicher Eigenschaften zu vergleichen; gängige Algorithmen, die in Betriebssystemkonzepten verwendet werden, zu verstehen und implementieren; und den Quellcode einer Kernelkomponente lesen und verstehen zu können, mit dem Ziel, diese zu debuggen, zu erweitern oder zu modifizieren.

Ablauf der Lehrveranstaltung

Die Veranstaltung wird im Online-Format angeboten und folgt dem Inverted Classroom Modell, d.h. Ihnen werden in jeder Vorlesungseinheit Fragen bereitgestellt, sowie Material in Video- und Textform, womit sie diese Fragen allein oder in Gruppen bearbeiten. Im synchronen Veranstaltungstermin erklären Sie die Fragen der aktuellen Einheit und haben ebenso Gelegenheit, ihre eigenen Verständnisfragen zu stellen und zu diskutieren. Darüber hinaus werden die synchronen Termine für vertiefende Labor-Sessions verwendet. Parallel besteht das freiwillige Angebot von Tutoriumsterminen in Kleingruppen (bis zu 5 Personen), wo Übungsinhalte und Verständnisfragen auf persönlicherer Ebene mit einem der Tutoren besprochen werden können.

[Folien zu Tutoriumsmodalitäten]

Bitte beachten Sie, dass Ihre regelmäßige und aktive Teilnahme an den synchronen Terminen sowie die Bearbeitung der begleitenden Übungen essentiell für den Erfolg der Inverted Classroom Methode, und damit für Ihr individuelles Erreichen der Lernziele der Veranstaltung sind.

Leistungserfassungsprozess

Am Ende der Lehrveranstaltung wird eine Open-Book Klausur geschrieben.
Die Klausur findet in der Woche vom 28. Februar bis zum 04. März 2022 statt.

Bitte registrieren Sie sich für die Teilnahme an der Klausur, indem Sie uns bis einschließlich 22. Februar 2022 Ihre Matrikelnummer und Ihre Adresse über folgendes Formular übermitteln:

[Klausuranmeldung]

Ihre persönlichen Daten werden nur zum Zweck der Durchführung der Klausur von uns erhoben, und nach Ende der Klausurbearbeitungszeit von uns gelöscht.

Wir senden Ihnen vor Beginn der Bearbeitungszeit Ihre Klausur postalisch an die von Ihnen bei der Registrierung angegebene Adresse. Bitte stellen Sie sicher, dass Sie eine Adresse angeben, an der Sie zu der angegebenen Bearbeitungszeit Post empfangen können. Zur Abgabe Ihrer Klausur schicken Sie diese bitte bis zum Ende der Bearbeitungszeit (Poststempel) an uns zurück.

Für die Bearbeitung der Open-Book Klausur sind sämtliche Hilfsmittel, wie die Vorlesungsmaterialien, Lehrbücher und das Internet zugelassen. Wir bitten Sie, dabei die folgenden Regeln einzuhalten:

  • Sprechen Sie -- wie auch bei einer herkömmlichen, in Präsenz im Hörsaal durchgeführten Klausur -- nicht über die Lösungen Ihrer Aufgaben mit Ihren Kommilitonen. Jeder von Ihnen soll seine Klausur individuell bearbeiten.
  • Vervielfältigen Sie Ihre Klausur nicht, z.B. durch Abfotografieren, Kopieren oder Einscannen. Insbesondere ist es nicht zulässig, die Klausur einzuscannen, auf einem elektronischen Gerät auszufüllen, und wieder auszudrucken.

Wenn bei der Bearbeitung der Klausur Fragen auftreten, wenn beispielsweise eine Formulierung unklar ist, dann wenden Sie sich bitte direkt an uns oder Ihre Tutoren.

Wir hoffen, dass wir Ihnen und uns mit diesem Konzept der Open-Book Klausur eine Leistungserfassung ermöglichen können, die ohne übertriebene Überwachung funktioniert. Bitte kommen Sie unserem Vertrauen entgegen, und verhalten Sie sich bei der Bearbeitung der Klausur fair gegenüber uns und Ihren Kommilitonen. Danke!

Materialien

Unit OS2:

[Slides Rechnerarchitektur (Exkurs)]

[Aufgabenblatt OS2] [Folien OS2]

Videos

[Slides 1] (p2) [Slides 2] (p2-6)

[Slides] (p3-19)

[Slides] (p2-20)

[Slides 1] (p21-24) [Slides 2] (p17)

[Slides 1] (p17) [Slides 2] (p18-21) [Slides 3] (p5-8)

[Slides 1] (p2-14,17-35) [Slides 2] (p13-17)

Unit OS3:

[Aufgabenblatt]

Texte

  • Operating Systems Concepts - Kritischer Abschnitt und Synchronisation [PDF]
  • Operating Systems Concepts - Interprozesskommunikation [PDF]
  • Windows Internals - Kernel Dispatcher Objekte [PDF]

Videos

[Slides] (p3-8)

[Slides] (p9-25)

[Slides 1] (p11-17) [Slides 2] (p1-16)

[Slides] (p13-30)

[Slides] (p2-36)

[Slides] (p6-24)

[Slides] (p21-42)

Unit OS4 - Scheduling:

[Aufgabenblatt]

Texte

  • Silberschatz Operating System Concepts - Chapter 3 Processes [OSC Ch. 3]
  • Silberschatz Operating System Concepts - Chapter 4 Threads [OSC Ch. 4]
  • Silberschatz Operating System Concepts - Chapter 6 Scheduling [OSC Ch. 6]

Videos

  • Einführung in die Terminologie
  • Prozesse und Threads
  • Kontextwechsel
  • Schedulingpunkte

[Slides]

  • Qualitätsmetriken für die Schedulingentscheidung
  • First-In-First-Out (FIFO) Algorithmus
  • Round-Robin (RR) Algorithmus

[Slides]

  • Prioritätsbasierte Algorithmen
  • Starvation und Lösungsansätze

[Slides]

  • Prozesskonzept
  • Lebenszyklus von Prozessen
  • Signale

[Slides]

  • Threadkonzept
  • Usermode- und Kernelmode-Threads

[Slides]

  • UNIX Prozess-API
  • Windows Prozess-API
  • POSIX Thread-API

[Slides]

  • Anforderungen an Scheduler-Implementierungen
  • Realtime-Scheduling
  • Windows Scheduler und Priority Boosting
  • Priority-Inversion und Lösungsansätze
  • Linux Completely Fair Scheduler (CFS)

[Slides]

Index

Begriffe, Mechanismen, Probleme:

Scheduling-Algorithmen:

APIs:

Implementierungen:

Meilenstein

Checkpoints

Unit OS5:

Texte

  • Windows Internals - Page Frame Number Database [PDF]
  • Windows Internals - Working Sets [PDF]
  • Operating System Concepts - Copy-on-Write Memory [PDF]
  • Operating System Concepts - Page Replacement [PDF]
  • Operating System Concepts - Swapping [PDF]

Videos

  • Motivation
  • Address Binding: Linker, Loader
  • Dynamic Libraries

[Slides 1-9] [Slides 2-3]

  • Allocation Strategies
  • Overlays, Swapping
  • Segmentation
  • Fragmentation Problems
  • Paging Basics

[Slides 10-15] [Slides 15-18]

  • Protection Bits
  • Page Table Size Calculations
  • Hierarchical Page Tables
  • Hashed & Inverted Page Tables

[Slides 23-34] [Slide 10]

  • Translation Lookaside Buffer
  • Implementations: i386 & x64

[Slides 20-23, 37-38] [Slides 14-19]

  • Virtual Address Space Descriptors (VADs)
  • Address Space Layout
  • Address Space Contents

[Slides 2-4, 11] [Slides 3-9] [Slides 34-43]

  • Allocation API
  • Heap Management API
  • Virtual Address Space Descriptors (VADs)
  • Memory Mapped File API
  • Protection and Query API

[Slides 44-64]

  • Page Fault Reasons and Handling
  • Soft vs. Hard Page Faults
  • Page Fault Handling
  • Working Set Introduction

[Slides 26-35] [Slides 2-8]

  • FIFO Strategy and Bélády's Anomaly
  • LRU Strategy
  • Second Chance Strategy
  • Soft vs. Hard Page Faults
  • Windows Page Locking API
  • Windows Balance Set Manager

[Slides 9-16] [Slides 18-21]

  • Page Table Entry Fields and States
  • Page Frame Lists and Transitions
  • Page Frame Number Database Structure

[Slides 12-24] [Slides 22-30, 32-34]

  • Shared Pages, Prototype Page Table Entries
  • Copy on Write Pages
  • Windows Page File, Linux Swap Space

[Slides 2-13, 25-29]

Unit OS7:

[Aufgabenblatt]

Videos

[Slides 1] [Slides 2] (p1-5) [Slides 3] (p10-27) [Slides 4] (p38-39)

Themen der Vorlesung

Die behandelten Themen der Vorlesung orientieren sich am ACM Computer Science Curricula: Operating Systems:

  • Unit OS1 / Overview of Operating Systems
    • Rolle und Aufgaben des Betriebssystems
    • Funktionsweise eines typischen Betriebssystems
    • Mechanismen zur Unterstützung von Client-Server-Modellen, Handheld-Geräten
    • Designfragen (Effizienz, Robustheit, Flexibilität, Portabilität, Sicherheit, Kompatibilität)
  • Unit OS2 / Operating System Principles
    • Strukturierungsmethoden (monolithische, geschichtete, modulare, Mikro-Kernel-Modelle)
    • Abstraktionen, Prozesse und Ressourcen
    • Konzepte von Anwendungsprogramm-Schnittstellen (APIs)
    • Die Entwicklung von Hardware-/Softwaretechniken und Anwendungsanforderungen
    • Geräte-Organisation
    • Interrups: Methoden und Implementierungen
    • Konzept des Benutzer-/Systemzustands und des Schutzes, Übergang zum Kernelmodus
  • Unit OS3 / Concurrency
    • Was ist Nebenläufigkeit?
    • kritische Abschnitte
    • Implementierung von Synchronisationsprimitiven
    • Kommunikation zwischen Prozessen
    • Die Rolle von Interrupts
    • Verwaltung von atomarem Zugriff auf Betriebssystem-Objekte
    • Multiprozessorprobleme (Spin-Locks, Reentrancy)
  • Unit OS4 / Scheduling and Dispatch
    • Präemptives und nicht-präemptives Scheduling
    • Konzept von Prozessen und Threads
    • Scheduling-Algorithmen und Datenstrukturen
    • Deadlines und Echtzeitfragen
  • Unit OS5 / Memory Management
    • Was ist eine Speicheradresse? Von virtuellen zu physikalischen Adressen
    • Überprüfung des physischen Speichers und der Speicherverwaltungshardware
    • Datenstrukturen für Speicherverwaltung
    • Physikalische Speicherverwaltung
  • Unit OS7 / Security and Protection
    • Was ist Security?
    • Überblick und Vergleich von Zugriffskontrolle und Authentifizierungsmethoden
    • kurze Diskussion über Vertrauen in Software

Die folgenden Themen der ACM CS Curricula - OS werden im kommenden Semester in der Lehrveranstaltung Betriebssysteme II behandelt:

  • Unit OS6 / Device Management
  • Unit OS8 / File Systems
  • Unit OS9 / Real Time and Embedded Systems
  • Unit OS10 / Fault Tolerance
  • Unit OS11 / System Performance Evaluation
  • Virtual Machines

Nützliche Vorkenntnisse

Die für diesen Kurs erforderlichen Vorkenntnisse umfassen:

  • Computerarchitektur: Sie sollten die grundlegende Funktionsweise einer CPU verstehen.
  • Algorithmen und Datenstrukturen: Sie sollten ein grundlegendes Verständnis von Strukturen wie Warteschlangen, Bäumen usw. sowie Operationen auf ihnen haben.
  • Programmiersprache C: Sie sollten in der Lage sein, einfache Programme in C zu lesen und zu verstehen, sowie einfache Programme in C zu schreiben und zu übersetzen.

Empfohlene Lektüre

"Die" Bücher:

  • Abraham Silberschatz, Peter B. Galvin, “Operating System Concepts”
  • Andrew S. Tanenbaum, Albert S. Woodhull, “Operating systems: design and implementation”
  • Mark E. Russinovich, David A. Solomon, “Windows Internals”
  • Brian W. Kernighan, Dennis M. Ritchie, “The C programming language”

Weiterführendes Material:

  • Jeff Bonwick. The slab allocator: an object-caching kernel memory allocator. In USENIX Technical Conference, 6-6. Berkeley, CA, USA, 1994. USENIX Association. URL: http://static.usenix.org/publications/library/proceedings/bos94/bonwick.html.
    ×
    @inproceedings{citemaster_9636,
    author = "Bonwick, Jeff",
    title = "{The slab allocator: an object-caching kernel memory allocator}",
    publisher = "{USENIX Association}",
    pages = "{6-6}",
    url = "http://static.usenix.org/publications/library/proceedings/bos94/bonwick.html",
    year = "1994",
    address = "{Berkeley, CA, USA}",
    shorttitle = "{USENIX}",
    booktitle = "{USENIX Technical Conference}",
    location = "{Boston, Massachusetts}",
    citemaster_conference_year = "{1994}"
    }
  • Intel Corporation. Intel Architecture Software Developer's Manual, Volume 3a: System Programming. 2010.
    ×
    @manual{citemaster_9059,
    author = "{Intel Corporation}",
    title = "{Intel Architecture Software Developer's Manual, Volume 3a: System Programming}",
    year = "2010",
    citemaster_issuing_organization = "{Intel Corporation}"
    }
  • Abraham Silberschatz, Peter Galvin , and Greg Gagne. Operating System Concepts. John Wiley & Sons, 8 edition, July 2008. ISBN 978-0470128725 . URL: http://www.os-book.com.
    ×
    @book{citemaster_9373,
    author = "Silberschatz, Abraham and {Galvin }, Peter and Gagne, {Greg }",
    title = "{Operating System Concepts}",
    publisher = "{John Wiley {\\&} Sons}",
    url = "http://www.os-book.com",
    pages = "{992}",
    month = "July",
    edition = "8",
    year = "2008",
    isbn = "{ 978-0470128725 }",
    day = "29"
    }
  • William Stallings. Operating Systems: Internals and Design Principles. Prentice Hall, 7 edition, February 2011. ISBN 978-0132309981.
    ×
    @book{citemaster_9459,
    author = "Stallings, William",
    title = "{Operating Systems: Internals and Design Principles}",
    publisher = "{Prentice Hall}",
    pages = "{816}",
    month = "February",
    edition = "7",
    year = "2011",
    isbn = "{978-0132309981}",
    day = "28"
    }
  • Andrew Tanenbaum. Distributed Operating Systems. Prentice Hall, 1995. ISBN 0-13-219908-4.
    ×
    @book{citemaster_604,
    author = "Tanenbaum, Andrew",
    title = "{Distributed Operating Systems}",
    publisher = "{Prentice Hall}",
    year = "1995",
    isbn = "{0-13-219908-4}"
    }
  • David Miller. OpenVMS Operating System Concepts. HP Technologies Series. Elsevier, 2 edition, 1997. ISBN 978-1555581572. URL: http://books.google.de/books?id=FSX5qUthRL8C.
    ×
    @book{citemaster_9462,
    author = "Miller, David",
    title = "{OpenVMS Operating System Concepts}",
    publisher = "{Elsevier}",
    url = "http://books.google.de/books?id=FSX5qUthRL8C",
    edition = "2",
    year = "1997",
    series = "{HP Technologies Series}",
    isbn = "{978-1555581572}"
    }
  • Dennis Ritchie and Ken Thompson. The UNIX time-sharing system. Communications of the ACM, 17:365–375, July 1974. URL: http://doi.acm.org/10.1145/361011.361061, doi:10.1145/361011.361061. [ | ]
    ×
    @article{citemaster_9483,
    author = "Ritchie, Dennis and Thompson, Ken",
    title = "{The UNIX time-sharing system}",
    publisher = "{ACM}",
    doi = "10.1145/361011.361061",
    pages = "365-375",
    url = "http://doi.acm.org/10.1145/361011.361061",
    journal = "{Communications of the ACM}",
    address = "{New York, NY, USA}",
    volume = "17",
    year = "1974",
    month = "July",
    issue = "7",
    isbn = "0001-0782"
    }
  • Dennis Ritchie. The Evolution of the UNIX Time-Sharing System. Lecture Notes in Computer Science, pages 1577-1594, 1980. URL: http://homepage.divms.uiowa.edu/~ochipara/classes/advancedos/papers/timesharing/unix-evolution.pdf.
    ×
    @article{citemaster_9461,
    author = "Ritchie, Dennis",
    title = "{The Evolution of the UNIX Time-Sharing System}",
    publisher = "{Springer}",
    pages = "{1577-1594}",
    url = "http://homepage.divms.uiowa.edu/\textasciitilde ochipara/classes/advancedos/papers/timesharing/unix-evolution.pdf",
    journal = "{Lecture Notes in Computer Science}",
    year = "1980",
    issue = "79",
    citemaster_short_journal = "{LNCS}"
    }
  • G. Zachary. Show-stopper!: the breakneck race to create Windows NT and the next generation at Microsoft. University of Michigan, 1994. ISBN 978-0029356715. URL: http://books.google.de/books?id=k8ISAQAAMAAJ.
    ×
    @book{citemaster_9463,
    author = "Zachary, G.",
    title = "{Show-stopper!: the breakneck race to create Windows NT and the next generation at Microsoft}",
    publisher = "{University of Michigan}",
    url = "http://books.google.de/books?id=k8ISAQAAMAAJ",
    year = "1994",
    isbn = "{978-0029356715}"
    }
  • Microsoft. Windows Sysinternals Tools. URL: http://technet.microsoft.com/en-US/sysinternals.
    ×
    @misc{citemaster_9458,
    author = "Microsoft",
    title = "{Windows Sysinternals Tools}",
    url = "http://technet.microsoft.com/en-US/sysinternals"
    }
  • H. Custer. Inside Windows NT. Références (Les Ulis). Microsoft Press, 1993. ISBN 9781556154812. URL: http://books.google.de/books?id=ioMZAQAAIAAJ.
    ×
    @book{citemaster_9456,
    author = "Custer, H.",
    title = "{Inside Windows NT}",
    publisher = "{Microsoft Press}",
    url = "http://books.google.de/books?id=ioMZAQAAIAAJ",
    year = "1993",
    series = "{R{\'e}f{\'e}rences (Les Ulis)}",
    isbn = "{9781556154812}"
    }
  • Johnson Hart. Windows System Programming. Addison-Wesley Professional, 4 edition, February 2010. ISBN 978-0321657749.
    ×
    @book{citemaster_9457,
    author = "Hart, Johnson",
    title = "{Windows System Programming}",
    publisher = "{Addison-Wesley Professional}",
    month = "February",
    edition = "4",
    year = "2010",
    isbn = "{978-0321657749}",
    day = "16"
    }
  • Mark Russinovich and David Solomon. Windows Internals. Microsoft Press Corp., 6 edition, April 2012. ISBN 978-0735648739.
    ×
    @book{citemaster_9372,
    author = "Russinovich, Mark and Solomon, David",
    title = "{Windows Internals}",
    publisher = "{Microsoft Press Corp.}",
    month = "April",
    edition = "6",
    year = "2012",
    isbn = "{978-0735648739}",
    day = "5"
    }
  • Alexander Schmidt. Queued Spinlocks in the WRK. URL: http://osm.hpi.de/wrk/2009/12/queued-spinlocks-in-the-wrk/.
    ×
    @misc{citemaster_9608,
    author = "Schmidt, Alexander",
    title = "{Queued Spinlocks in the WRK}",
    url = "http://osm.hpi.de/wrk/2009/12/queued-spinlocks-in-the-wrk/"
    }
  • W. Stevens and Stephen Rago. Advanced Programming in the UNIX Environment. Addison-Wesley Professional, 2 edition, June 2005. ISBN 978-0201433074.
    ×
    @book{citemaster_9460,
    author = "Stevens, W. and Rago, Stephen",
    title = "{Advanced Programming in the UNIX Environment}",
    publisher = "{Addison-Wesley Professional}",
    month = "June",
    edition = "2",
    year = "2005",
    isbn = "{978-0201433074}",
    day = "17"
    }