Autor Thema: Shell im Kernel  (Gelesen 5241 mal)

sebi2020

  • Beiträge: 130
    • Profil anzeigen
    • Infortus OS
Gespeichert
« am: 18. November 2009, 18:32 »
wenn man dabei ist eine bash zu programmieren, möchte ich ja auf eingaben warten. aber was mache ich wenn ich meinen kernel code abgearbeitet hab, und erstmal so von mir ohne weiterer eingabe kein weiterer code ausgeführt werden soll?. soll ich in eine endlosschleife gehen, die erst beendet werden soll, wenn eine eingabe erfolgt, oder wie wird sowas gelöst? im moment wird die cpu bei mir erstmal angehalten, wenn der ganze code ausgeführt wird, aber dass bringts ja nicht so wirklich ;-)
« Letzte Änderung: 18. November 2009, 19:49 von taljeth »
Please press any-key...
Verflucht wo ist any-key? hier? ach Mist, das war Escape...

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 18. November 2009, 19:48 »
Du programmierst eine Shell, keine bash. Die bash ist eine ganz bestimmte Shell. Die portierst du maximal - und wenn du das geschafft hast, bist du POSIX-kompatibler als tyndur. ;)

Ich gehe anhand deiner Frage mal davon aus, dass dein Kernel eigentlich nicht in dem Zustand ist, um eine richtige Shell als eigenständiges Programm laufen zu lassen. Nimm einfach erstmal die Endlosschleife. Eine Shell im Kernel ist sowieso keine Dauereinrichtung.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

sebi2020

  • Beiträge: 130
    • Profil anzeigen
    • Infortus OS
Gespeichert
« Antwort #2 am: 18. November 2009, 19:56 »
nagut gehen wir davon aus, dass ich sie irgendwann als eigenständiges programm laufen lassen werde, was gibt es für alternativen, zur endlosschleife? (die ja meiner meinung nach "unnötig" sprungbefehle aufm prozessor ausführt)
Please press any-key...
Verflucht wo ist any-key? hier? ach Mist, das war Escape...

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 18. November 2009, 20:07 »
Andere Prozesse solang laufen lassen. ;)
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

XanClic

  • Beiträge: 261
    • Profil anzeigen
    • github
Gespeichert
« Antwort #4 am: 18. November 2009, 20:08 »
Die Standardlösung für eine Endlosschleife im Kernel, die nicht "jmp $" ist, lautet
for (;;)
    asm volatile ("cli;hlt");
Das for(;; ) ist nicht unbedingt nötig, aber sicher ist sicher. :-D
  

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 18. November 2009, 20:09 »
Naja, wenn man nur auf eine Benutzereingabe wartet, ist cli vielleicht nicht so schlau...
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

XanClic

  • Beiträge: 261
    • Profil anzeigen
    • github
Gespeichert
« Antwort #6 am: 18. November 2009, 20:09 »
Dann ist das aber auch keine Endlosschleife. :wink:

EDIT: Jo, wenn man wartet, müsste man das eben so machen:
while (end_condition)
    asm volatile ("hlt");
hlt hält die CPU eben bis zum nächsten Interrupt an.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 18. November 2009, 20:12 »
Niemand sagt, dass im Schleifenrumpf einer Endlosschleife nichts vernünftiges passieren darf. Zum Beispiel, dass die Tastatur abgefragt und der eingegebene Befehl ausgeführt wird.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

XanClic

  • Beiträge: 261
    • Profil anzeigen
    • github
Gespeichert
« Antwort #8 am: 18. November 2009, 20:14 »
Dann eben
for (;;)
{
    //Hier die verschiedenen Sachen überprüfen... Zum Beispiel den Tastaturtreiber abfragen,
    //ob der Benutzer irgendwelche Tasten gedrückt hat

    //Und jetzt halten wir die CPU bis zum nächsten Interrupt an und sparen dabei etwas Strom.
    asm volatile ("hlt");
}

DeepDancer

  • Beiträge: 58
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 18. November 2009, 20:18 »
Niemand sagt, dass im Schleifenrumpf einer Endlosschleife nichts vernünftiges passieren darf. Zum Beispiel, dass die Tastatur abgefragt und der eingegebene Befehl ausgeführt wird.

Das hat aber doch nicht wirklich was im Kernel zu suchen, oder?
Also ich meine wenn man ne eigenständige Shell hat... 

XanClic

  • Beiträge: 261
    • Profil anzeigen
    • github
Gespeichert
« Antwort #10 am: 18. November 2009, 20:22 »
Das sagte taljeth ja bereits. :wink:

Zitat von: taljeth
Eine Shell im Kernel ist sowieso keine Dauereinrichtung.

sebi2020

  • Beiträge: 130
    • Profil anzeigen
    • Infortus OS
Gespeichert
« Antwort #11 am: 18. November 2009, 20:23 »
naja, den tastaturtreiber würde ich ja schon im kernel laden, und überprüfen, dass system soll sich ja um die tastatur kümmern, also zumindest um die handhabung, nicht die shell.

EDIT: Ach sry, hab da was überlesen ^^
« Letzte Änderung: 18. November 2009, 20:25 von sebi2020 »
Please press any-key...
Verflucht wo ist any-key? hier? ach Mist, das war Escape...

sebi2020

  • Beiträge: 130
    • Profil anzeigen
    • Infortus OS
Gespeichert
« Antwort #12 am: 18. November 2009, 20:29 »
    //Und jetzt halten wir die CPU bis zum nächsten Interrupt an und sparen dabei etwas Strom.
    asm volatile ("hlt");
klar, sehr wichtig in zeiten der klimaerwärmung und der steigenden stromkosten ;-)
Please press any-key...
Verflucht wo ist any-key? hier? ach Mist, das war Escape...

XanClic

  • Beiträge: 261
    • Profil anzeigen
    • github
Gespeichert
« Antwort #13 am: 18. November 2009, 20:32 »
Zitat von: sebi2020
(die ja meiner meinung nach "unnötig" sprungbefehle aufm prozessor ausführt)
Du wolltest doch den Prozessor möglichst wenig auslasten. Und wenn ich ihn wenig auslaste, spare ich eben Strom. :-P

sebi2020

  • Beiträge: 130
    • Profil anzeigen
    • Infortus OS
Gespeichert
« Antwort #14 am: 18. November 2009, 22:13 »
Zitat von: sebi2020
(die ja meiner meinung nach "unnötig" sprungbefehle aufm prozessor ausführt)
Du wolltest doch den Prozessor möglichst wenig auslasten. Und wenn ich ihn wenig auslaste, spare ich eben Strom. :-P
klar, dass war auch nurn kleiner spass, mit den steigenden stromkosten :-)
Please press any-key...
Verflucht wo ist any-key? hier? ach Mist, das war Escape...

 

Einloggen