Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: furesoft am 26. July 2019, 19:34

Titel: Sleep Funktion implementieren
Beitrag von: furesoft am 26. July 2019, 19:34
hallo,

ich bin relativ neu im OsDev und arbeite mit C# und dem MOSA Toolkit. Ich bin gerade beim BootLogo und der Progressbar.

Meine Frage ist nun, wie könnte ich eine Sleep Funktion implementieren um eine bestimmte Zeit zu warten?

Vielen Dank
Titel: Antw:Sleep Funktion implementieren
Beitrag von: Svenska am 27. July 2019, 13:26
Hallo,

du kannst in einer Zeitschleife einfach Taktzyklen verbraten, hier ein Beispiel in C:
volatile int i;
for(i = 0; i < 1000000; i++) {
  /* nichts */
}
Wie lange die Schleife dauert, hängt von deiner CPU ab. Dieses Prinzip nutzt man normalerweise nur für Wartezeiten im Mikrosekundenbereich.

Für längere Zeiten nutzt man einen Timer, also zusätzliche Hardware. Jeder PC besitzt dafür einen PIT-Baustein (Details im Wiki (http://www.lowlevel.eu/wiki/Programmable_Interval_Timer)). Der PIT läuft mit einer festen Frequenz (1,12 MHz) und kann regelmäßig einen Interrupt auslösen - wenn du die Interrupts zählst, weißt du, wie viele Zeiteinheiten vergangen sind. Oder du liest den Zählerstand direkt aus.

Ein moderner Ersatz für den PIT ist der HPET (Detail bei osdev.org (https://wiki.osdev.org/HPET)). Außerdem gibt es noch die Echtzeituhr (Details im Wiki (http://www.lowlevel.eu/wiki/CMOS)), mit der du die "wahre" Uhrzeit auslesen kannst.

In einem ordentlichen Betriebssystem wartet man nicht einfach längere Zeiten ab, sondern legt sich für eine gewisse Zeit schlafen (d.h. man lässt sich aufwecken, wenn die gewünschte Wartezeit vorbei ist).

Gruß,
Svenska
Titel: Antw:Sleep Funktion implementieren
Beitrag von: kevin am 16. August 2019, 14:10
Ein OS beim Starten absichtlich langsam machen ist übrigens kein tolles Feature, falls du das vorhaben solltest.