ChangeLog
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
ChangeLog
So, hier gibt's den versprochenen ChangeLog
Es gibt ihn erst jetzt, weil ich so lange gebraucht habe, um das Multitasking hinzubekommen.
So wie's jetzt aussieht, funktionierts aber
Ein paar Änderungen werden daran noch passieren, aber vom Grundaufbau her passt's jetzt schon
Außerdem ist alles noch recht....durcheinander und "unaufgeräumt".
Darum werde ich mich auch noch kümmern
Es gibt ihn erst jetzt, weil ich so lange gebraucht habe, um das Multitasking hinzubekommen.
So wie's jetzt aussieht, funktionierts aber
Ein paar Änderungen werden daran noch passieren, aber vom Grundaufbau her passt's jetzt schon
Außerdem ist alles noch recht....durcheinander und "unaufgeräumt".
Darum werde ich mich auch noch kümmern
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
- Xin
- nur zu Besuch hier
- Beiträge: 8861
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: ChangeLog
Dann wird's langsam mal Zeit, dass ich mir den Kram mal richtig angucke und vielleicht auch was von Dir lerne.Dirty Oerti hat geschrieben:So, hier gibt's den versprochenen ChangeLog
Es gibt ihn erst jetzt, weil ich so lange gebraucht habe, um das Multitasking hinzubekommen.
So wie's jetzt aussieht, funktionierts aber
Ich hoffe nächstes WE habe ich den Rechner neu aufgesetzt und wieder etwas Luft
Du arbeitest mit Bochs oder wie das Virtualisierungstool heißt? Vielleicht kannst du das etwas beschreiben, ich kenne das nämlich noch nicht.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: ChangeLog
Danke^^
Muss aber, wie gesagt noch ein bisschen angepasst und optimiert werden.
Was ich schonmal kurz versucht habe ist in den User Mode zu wechseln...
Das kommt als nächstes drann...
Scheiterte beim ersten Versuch kläglich (bochs ist "gestorben" ich musste ihn killen...)...
Zu bochs: (Kommt auch mal ins Wiki, bei Zeit)
bochs ist ein x68 und AMD64 Virtualisierungstool/Emulator.
Windows/Linux kann darauf ausgeführt werden (wobei sich die Geschwindigkeit eher in Grenzen hält..)
Gesteuert wird die Simulation über eine Konfigurationsdatei, die beim Aufruf mit angegeben werden kann.
Eine solche Konfig kann so aussehen:
Muss aber, wie gesagt noch ein bisschen angepasst und optimiert werden.
Was ich schonmal kurz versucht habe ist in den User Mode zu wechseln...
Das kommt als nächstes drann...
Scheiterte beim ersten Versuch kläglich (bochs ist "gestorben" ich musste ihn killen...)...
Zu bochs: (Kommt auch mal ins Wiki, bei Zeit)
bochs ist ein x68 und AMD64 Virtualisierungstool/Emulator.
Windows/Linux kann darauf ausgeführt werden (wobei sich die Geschwindigkeit eher in Grenzen hält..)
Gesteuert wird die Simulation über eine Konfigurationsdatei, die beim Aufruf mit angegeben werden kann.
Eine solche Konfig kann so aussehen:
Code: Alles auswählen
# Größe des Hauptspeichers.
megs:128
# Wo stecken BIOS und VGA-ROM?
romimage: file="/usr/share/bochs/BIOS-bochs-latest"
#vgaromimage: VGABIOS-elpin-2.40
vgaromimage: file="/usr/share/vgabios/vgabios.bin"
# Ein Diskettenlaufwerk, in dem eine Diskette steckt.
#floppya: 1_44=a:, status=inserted
floppya: image=floppy.img, status=inserted
# Bootlaufwerk festlegen.
boot: a
# Datei für Protokoll und Fehlermeldungen.
log: protokoll.log
# Die Maus sollte man solange nicht verwenden, wie es auch
# das emulierte Betriebssystem nicht tut.
mouse: enabled=0
# Ausgabe des Debuggers.
debugger_log: debug.log
#debugger_log: -
# Kein Reset bei triple Fault
cpu: count=1, reset_on_triple_fault=0
# Was tun bei welchem Fehler?
panic: action=ask
error: action=report
info: action=report
debug: action=ignore
#config_interface: wx
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: ChangeLog
Ich habe mal den Code für IRQs und IRSs überarbeitet.
Im Endeffekt wird nun mehr Code generiert, es entstehen Wiederholungen.
Sinn des Ganzen ist folgendes:
Vorher sah's so aus:
Nun sieht's so aus:
Dadurch wird der Code in _isr_handler mehrfach gespeichert, ich spare mir aber den Aufruf.
Außerdem habe ich ein paar unnuütze Pushs bei den IRQs entfernt
Auf lange Sicht hin überlege ich mir, den Header kernel.h zu entfernen und das über einzelne Header zu lösen.
REVISION 61
Im Endeffekt wird nun mehr Code generiert, es entstehen Wiederholungen.
Sinn des Ganzen ist folgendes:
Vorher sah's so aus:
Code: Alles auswählen
_isrX:
push 0
push X
jmp _isr_handler
;(...)
_isr_handler:
;(...)
Code: Alles auswählen
_isrX:
push 0
push X
; Hier kommt nun das, was in _isr_handler drin war
;(...)
Außerdem habe ich ein paar unnuütze Pushs bei den IRQs entfernt
Auf lange Sicht hin überlege ich mir, den Header kernel.h zu entfernen und das über einzelne Header zu lösen.
REVISION 61
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
- Xin
- nur zu Besuch hier
- Beiträge: 8861
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: ChangeLog
Du rufst mit JMP nichts auf, sondern Du änderst das IP-Register.Dirty Oerti hat geschrieben:Ich habe mal den Code für IRQs und IRSs überarbeitet.
Im Endeffekt wird nun mehr Code generiert, es entstehen Wiederholungen.
Sinn des Ganzen ist folgendes:
Dadurch wird der Code in _isr_handler mehrfach gespeichert, ich spare mir aber den Aufruf.
Der JMP Befehl kommt - afaik - gar nicht im im CPU Kern an, sondern die Ladeeinheit lädt bereits automatisch bei _isr_handler weiter.
Oder meinst Du JSR?
Wenn Du Rechenzeit sparen willst, solltest Du überlegen, dass Du die Stack-Operationen sparen könntest, z.B. durch Registerübergaben statt den Stack zu nutzen.
Heißt: wenn Du irgendwohin springst, erwartest Du die Eingabedaten in ax, bx. Das ganze hat natürlich nur Sinn, wenn die Routine danach zum Rechnen nicht auf den Stack auslagern muss.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: ChangeLog
Das wusste ich nicht.Xin hat geschrieben:Du rufst mit JMP nichts auf, sondern Du änderst das IP-Register.
Der JMP Befehl kommt - afaik - gar nicht im im CPU Kern an, sondern die Ladeeinheit lädt bereits automatisch bei _isr_handler weiter.
Ist es aber im Endeffekt nich doch weniger zu tun und damit schneller? (Wenn auch nur minimal)
Ich werde es aber trotzdem so lassen, das erhöht, denke ich, die Sicherheit. Wird eine Interruptroutine nun beschädigt, dann funktionieren die anderen trotzdem einwanfrei.
Wie Wo Was?Xin hat geschrieben:Oder meinst Du JSR?
Du meinst die Assembleranweisung JSR?
Nein, es ist ein "jmp"
Ich verstehe nicht ganz, was du meinst.Xin hat geschrieben:Wenn Du Rechenzeit sparen willst, solltest Du überlegen, dass Du die Stack-Operationen sparen könntest, z.B. durch Registerübergaben statt den Stack zu nutzen.
Heißt: wenn Du irgendwohin springst, erwartest Du die Eingabedaten in ax, bx. Das ganze hat natürlich nur Sinn, wenn die Routine danach zum Rechnen nicht auf den Stack auslagern muss.
Die Register pushe ich auf den Stack, um sie zu sichern. Sie müssen danach ja wieder genau so hergestellt werden, wie sie vorher waren. Und zwar möglichst alle Register.
Außerdem ermöglicht das mir einen Task Wechsel (ich wechsle in der Interruptroutine einfach den Stack, Folge: Es werden die Werte vom neuen Stack geladen)
Oder wie genau meinst du das?
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
- Xin
- nur zu Besuch hier
- Beiträge: 8861
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: ChangeLog
Auf einer modernen CPU kein Unterschied.Dirty Oerti hat geschrieben:Das wusste ich nicht.Xin hat geschrieben:Du rufst mit JMP nichts auf, sondern Du änderst das IP-Register.
Der JMP Befehl kommt - afaik - gar nicht im im CPU Kern an, sondern die Ladeeinheit lädt bereits automatisch bei _isr_handler weiter.
Ist es aber im Endeffekt nich doch weniger zu tun und damit schneller? (Wenn auch nur minimal)
Aus der Warte gehst Du falsch an das Problem ran: Nicht redundanter Code stürzt bei Fehlern immer ab - nicht nur gelegentlich.Dirty Oerti hat geschrieben:Ich werde es aber trotzdem so lassen, das erhöht, denke ich, die Sicherheit. Wird eine Interruptroutine nun beschädigt, dann funktionieren die anderen trotzdem einwanfrei.
Warum pushst Du dann?Dirty Oerti hat geschrieben:Wie Wo Was?Xin hat geschrieben:Oder meinst Du JSR?
Du meinst die Assembleranweisung JSR?
Nein, es ist ein "jmp"
Bei Jmp gibt es normalerweise kein danach - da ich aber den Code nicht vollständig kenne und weiß, dass bei den Interrupts einige Besonderheiten beim Intel existieren, will ich mal nix falsches sagen und gehe davon aus, dass Du weißt, was Du tust.Dirty Oerti hat geschrieben:Ich verstehe nicht ganz, was du meinst.Xin hat geschrieben:Wenn Du Rechenzeit sparen willst, solltest Du überlegen, dass Du die Stack-Operationen sparen könntest, z.B. durch Registerübergaben statt den Stack zu nutzen.
Heißt: wenn Du irgendwohin springst, erwartest Du die Eingabedaten in ax, bx. Das ganze hat natürlich nur Sinn, wenn die Routine danach zum Rechnen nicht auf den Stack auslagern muss.
Die Register pushe ich auf den Stack, um sie zu sichern. Sie müssen danach ja wieder genau so hergestellt werden, wie sie vorher waren. Und zwar möglichst alle Register.
Außerdem ermöglicht das mir einen Task Wechsel (ich wechsle in der Interruptroutine einfach den Stack, Folge: Es werden die Werte vom neuen Stack geladen)
Oder wie genau meinst du das?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: ChangeLog
Ah, jetzt
Also:
Ursprünglich gab es eine kleine "Interrupteinsprungsfunktion".
Die hat einen Error Code und die Interruptnummer auf den Stack gelegt.
Danach ist sie zum Standardhandler gesprungen.
Dieser hat alle Register auf den Stack gespeichert und dann per call die Interruptroutine im C Code aufgerufen.
Die Interruptroutine hat getan, was sie tun musste, und ist dann zurück in den Standardhandler.
Dieser hat alle Register (vom Stack) wiederhergestellt und ist dann per iretd zurück zum Punkt, an dem unterbrochen wurde.
Ok?
Also:
Ursprünglich gab es eine kleine "Interrupteinsprungsfunktion".
Die hat einen Error Code und die Interruptnummer auf den Stack gelegt.
Danach ist sie zum Standardhandler gesprungen.
Dieser hat alle Register auf den Stack gespeichert und dann per call die Interruptroutine im C Code aufgerufen.
Die Interruptroutine hat getan, was sie tun musste, und ist dann zurück in den Standardhandler.
Dieser hat alle Register (vom Stack) wiederhergestellt und ist dann per iretd zurück zum Punkt, an dem unterbrochen wurde.
Ok?
Mist.^^Auf einer modernen CPU kein Unterschied.
Aus Sicht eines Debuggenden Menschen hast du Recht, aus Sicht der Sicherheit denke ich, dass es sicherer sein müsste, den Code mehrfach im Speicher zu haben.Xin hat geschrieben:Aus der Warte gehst Du falsch an das Problem ran: Nicht redundanter Code stürzt bei Fehlern immer ab - nicht nur gelegentlich.
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
- Xin
- nur zu Besuch hier
- Beiträge: 8861
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: ChangeLog
Aus Sicht der Sicherheit denke ich, dass es sicherer sein müsste, wenn der debuggende Mensch möglichst direkt auf den Fehler gestoßen wird.Dirty Oerti hat geschrieben:Aus Sicht eines Debuggenden Menschen hast du Recht, aus Sicht der Sicherheit denke ich, dass es sicherer sein müsste, den Code mehrfach im Speicher zu haben.Xin hat geschrieben:Aus der Warte gehst Du falsch an das Problem ran: Nicht redundanter Code stürzt bei Fehlern immer ab - nicht nur gelegentlich.
Wird ein Code nicht redundant verwendet, so wird die eine Implementierung immer und immer wieder getestet. Die Wahrscheinlichkeit, dass sie funktioniert, steigt also. Funktioniert sie nicht, kann man den Fehler / Breakpoints direkt an diese eine Routine festlegen.
Im Gegenzug dazu, wenn eine redundante Version gelegentlich durchlaufen wird und unter Umständen abstürzt, weiß man in der Regel nicht, was man zuletzt gemacht hat und welche der Implementierungen grade fehlschlägt - sofern man sich an die problematische Implementierung überhaupt grade erinnert.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.