Autor Thema: Sleep Funktion implementieren  (Gelesen 10108 mal)

furesoft

  • Beiträge: 6
    • Profil anzeigen
Gespeichert
« 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

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #1 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). 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). Außerdem gibt es noch die Echtzeituhr (Details im Wiki), 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

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 16. August 2019, 14:10 »
Ein OS beim Starten absichtlich langsam machen ist übrigens kein tolles Feature, falls du das vorhaben solltest.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

 

Einloggen