Wir wollen unser Stubs um ein Zeitscheiben-Scheduling erweitern, also brauchen wir einen Zeitgeber.
Aber welche haben wir da bei einem modernen X86er überhaupt zur Verfügung?
Der erste IBM PC 1981 hatte bereits den Programmable Interval Timer, ursprünglich ein Intel 8253 Chip.
Der Baustein wird mit einer Frequenz von 1.193.181,81 Hz gedaktet.
Eine krumme Zahl, mit der sich eigentlich gar nicht so schön rechnen lässt.
Wer hat das verbrochen? Woher kommt die Zahl?
Damals war es aus Kostengründen noch üblich, Fernseher als Ausgabe für die PCs zu verwenden.
Der in Nordamerika verbreitete NTSC-Standard arbeitet mit einer Frequenz von 3.579.545, 45 Hz, was exakt das Dreifache ist.
Da nun damals Schwingquartzen nicht besonders günstig waren,
hat man versucht, um Kosten zu sparen, die ganzen Frequenzen eines Systems an NTSC anzupassen und stattdessen nur Frequenzteile verwendet.
Selbst der Systemtakt des ersten IBM PCs mit rund 4,77 MHz und somit 4 Drittel der NTSC-Frequenz wurden dadurch bestimmt.
NTSC spielt heutzutage keine Rolle mehr, aber wegen der Arbeitskompatibilität wurde die Frequenz im Pit natürlich beibehalten.
Ursprünglich hing der erste seiner drei Timer beim Pick an der ersten Leitung, hatte dort also auch die höchste Priorität bei Unterbrechungen.
Der zweite Timer wurde zum Auffrischen der Arbeitsspeicher verwendet.
Die Speicher der günstigen DRAM basieren auf Kondensatoren, welche regelmäßig wieder geladen werden müssen und frühe war der Pit dafür verantwortlich.
Heutige Arbeitsspeicher haben natürlich eine eigene Hardware dafür, teilweise ist dieser Timer im Pit entsprechend auch gar nicht mehr vorhanden.
Den dritten Timer hingegen finden wir bei manchen Desktop-Systemen noch, unter anderem auf unseren Testkisten.
Mit ihm kann man den PC-Speaker ansteuern, welcher insbesondere vor den Zeiten der Soundkarten häufig zum Einsatz kam.
Der Piepser kennt zwar nur an oder aus, aber durch Puls-Dauer-Modulation, kurz PWM, kann man unterschiedliche Töne erzeugen.
Ein Beispiel dazu folgt in Aufgabe 6.
Heutzutage haben wir auch keinen PIC mehr, sondern verwenden IOAPIC und LAPIC.
Und wenn man sich das nun anschaut vom Pit über IOAPIC, APEC BUS und LAPIC an die CPU, dann sieht man schon, dass der Timer durchaus nicht optimal angebunden ist.
Aber für das Zeitscheibenscheduling reicht das eigentlich aus.
Bis Wintersemester 2013 wurde auch tatsächlich der Pit dafür in Stubs verwendet, aber das geht besser.
Trotzdem verwenden wir den Pit in Stubs an anderen Stellen, da er einfach zu programmieren ist, zum Beispiel beim Systemstart, um gewisse Zeiten abzuwarten.
Als nächster Zeitgeber wurde ab 1984 die Real-Time-Glock eingebaut, bei welcher man sich dann durchgerungen hat, einen extra Schwingquads einzubauen.
Und zwar einen, der auch viel Verwendung im Alltag, beispielsweise in Anbahnuhr findet.
Dieser hat eine Frequenz von 32.768 Hertz, was auch für uns eine wunderschöne Zahl zum Rechnen ist.
Er ist auch in der Lage Unterbrechungen auszulösen.
Standardeinstellungen sind etwa Millisekunden Takt, kann aber grob angepasst werden.
Früher war er mit der ersten Leitung des zweiten kaskadierten PICs verbunden, was den Nachteil hat, dass zum Beispiel die Tastaturinterrupts eine höhere Priorität hatten.
Aber der primäre Einsatzzweck ist auch ein anderer.
Man kann die aktuelle Zeit und Datum auslesen.
Eine kleine Knopfzelle auf dem Mainboard sorgt dafür, dass er auch ohne Netzspannung die Zeit beibehält.
Wer seinem Stubs gerne die aktuelle Zeit beibringen will, hat in dieser Aufgabe die Gelegenheit dazu.
Seit dem Pentium gibt es den Timestamp-Counter, einen 64-Bit großen Zähler, der mit einer einzelnen Instruktion ausgelesen werden kann, auch im User Mode.
Mit welcher Frequenz läuft er?
Das kommt auf eure Hardware an.
Anfangs hat er mit dem Systemtakt hochgezählt, je nach aktuellen Stromschwarmotus, den P-States entsprechend unterschiedlich schnell.
Neuere Versionen laufen jedoch mit einer konstanten Rate.
Für Benchmarkzwecke ist der TSC hervorragend geeignet, sofern man ein paar Eigenheiten wie die Out-of-Order-Execution korrekt berücksichtigt.
Spätestens im Betriebssystemtechnik werden wir den TSC brauchen.
Für das Scheduling ist er jedoch nicht geeignet, er kann keine Unterbrechungen auslösen.
ACPI hat auch einen Timer, welcher mit der NTSC-Frequenz taktet und zum Benchmarkenverwende werden kann, beispielsweise wenn man nur den nicht-konstanten TSC zur Verfügung hat.
Für uns ist er aber uninteressant, da er ebenfalls keine Unterbrechungen auslösen kann.
Intel hat nach 25 Jahren beschlossen, dass ein zeitgemäßer Timer kommen muss und mit Microsoft den High Precision Event Timer veröffentlicht.
Er hat eine hohe Frequenz und somit hohe Genauigkeit, der Zähler ist mit 64 bits sehr groß und Unterbrechungen können damit auch ausgelöst werden.
Eigentlich passt es für unseren Einsatzzweck, aber zur Ansteuerung muss er über die ACPI-Tabellen gefunden werden und es geht ja noch ein Tick schöner.
Der Lapik einer jeden CPU hat auch einen eigenen Timer mit einer sehr hohen Genauigkeit, da er das Takt Signal des APIC-Bus verwendet.
Die Frequenz ist somit hardwareabhängig, aber in Betrieb konstant, also unabhängig vom aktuellen P-State.
Presenters
Zugänglich über
Offener Zugang
Dauer
00:07:53 Min
Aufnahmedatum
2020-08-13
Hochgeladen am
2020-10-16 18:36:38
Sprache
de-DE
Überblick über die vorhandenen Timer in einem x86er System für Aufgabe 5 der Lehrveranstaltung Betriebssysteme.
Folien und Transkript zum Video.