Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: sebi2020 am 18. November 2009, 18:32

Titel: Shell im Kernel
Beitrag von: sebi2020 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 ;-)
Titel: Re: Bash
Beitrag von: kevin 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.
Titel: Re: Shell im Kernel
Beitrag von: sebi2020 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)
Titel: Re: Shell im Kernel
Beitrag von: kevin am 18. November 2009, 20:07
Andere Prozesse solang laufen lassen. ;)
Titel: Re: Shell im Kernel
Beitrag von: XanClic 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
  
Titel: Re: Shell im Kernel
Beitrag von: kevin am 18. November 2009, 20:09
Naja, wenn man nur auf eine Benutzereingabe wartet, ist cli vielleicht nicht so schlau...
Titel: Re: Shell im Kernel
Beitrag von: XanClic 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.
Titel: Re: Shell im Kernel
Beitrag von: kevin 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.
Titel: Re: Shell im Kernel
Beitrag von: XanClic 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");
}
Titel: Re: Shell im Kernel
Beitrag von: DeepDancer 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... 
Titel: Re: Shell im Kernel
Beitrag von: XanClic am 18. November 2009, 20:22
Das sagte taljeth ja bereits. :wink:

Zitat von: taljeth
Eine Shell im Kernel ist sowieso keine Dauereinrichtung.
Titel: Re: Shell im Kernel
Beitrag von: sebi2020 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 ^^
Titel: Re: Shell im Kernel
Beitrag von: sebi2020 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 ;-)
Titel: Re: Shell im Kernel
Beitrag von: XanClic 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
Titel: Re: Shell im Kernel
Beitrag von: sebi2020 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 :-)