Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Nachrichten - micha

Seiten: 1 2 [3] 4 5 ... 8
41
Offtopic / Re: Trick: Eigenes OS als ISO
« am: 01. November 2012, 16:08 »
Mein Makefile kann übrigens "make qemu", was das Testen vereinfacht.
Meins auch :D Mit Qemu kann man den kernel aber nur direkt laden, wenn man er multibootkompatibel ist.
42
Offtopic / Re: Trick: Eigenes OS als ISO
« am: 01. November 2012, 13:55 »
Wenn du GRUB benutzt kannst iso- und disketten-images auch ohne nero erstellen.
schau dazu mal hier http://www.lowlevel.eu/wiki/GRUB
Die funktionieren dann auch in deinem emulator ;)
43
Offtopic / Re: ProtectetMode vs. RealMode
« am: 25. October 2012, 16:57 »
Real Mode:
  • - 16bit
  • - kein Speicherschutz und kein virtueller Speicher
  • + Funktionen für VGA, VESA,... stehen zur verfügung

Protected Mode:
  • + 32bit (es lässt sich mehr Speicher ansprechen)
  • + Speicherschutz und virtueller Speicher
  • + Sicherheitsringe
  • - es lassen sich keine fertigen Treiber aus dem BIOS benutzen

Du solltest noch bedenken, dass es noch den Long Mode gibt, bei dem dann die register 64bit breit sind.
Schau am besten mal ins wiki:
http://www.lowlevel.eu/wiki/Real_Mode
http://www.lowlevel.eu/wiki/Protected_Mode
http://www.lowlevel.eu/wiki/Long_Mode

Micha
44
OS-Design / Re: Dynamische PIT-Frequenz
« am: 25. October 2012, 11:48 »
Kannst du damit überhaupt noch einigermaßen zuverlässig die Zeit halten? Der Timer wird ja nicht nur benutzt, um den Scheduler aufzurufen, sondern auch für die aktuelle Systemzeit.

Der CMOS RTC hat doch den IRQ 8. Den kann man ja auch als Timer verwenden.
45
OS-Design / Dynamische PIT-Frequenz
« am: 25. October 2012, 11:29 »
Mir kam jetzt mal eine Idee, dass man die Frequenz, mit der der Timerinterrupt und dann der Scheduler ausgelöst wird dynamisch nach der Anzahl der aktiven Prozesse optimal einstellt. Wenn ich den PIT beim Initialisieren auf 50Hz stelle und nur ein oder zwei Prozesse laufen, wird ja ständig der Interrupt ausgelöst. Bei Zwei Prozessen muss die Frequenz aber gar nicht so hoch sein. Deshalb könnte man ja die Frequenz nach der Anzahl der aktiven Tasks richten.
Lohnt es sich die PIT-Frequenz immer zu ändern?
46
Lyrisches Eck / Re: Wortspiel
« am: 22. October 2012, 21:08 »
Die wahllos variierenden Variablen verwahrlosen wirklich zusehends im immer weiter wachsenden, quellenden und quälenden Quelltext, sodass die rostenden Register restlos reichlich rostige, reglose Fehler registrieren.
47
Lowlevel-Coding / Re: General Protection Fault
« am: 14. September 2012, 17:11 »
bevor du mit iret aus deinen interrupthandler springst, musst du ein EOI (end of interrupt) an den PIC senden.
48
Also ich denke da gibt es schon eine grobe Reihenfolge. Es wäre unsinnig mit Paging anzufangen ;)
Das VFS ist nicht unbedingt nötig für den Anfang. Ich denke deshalb wird es in OSDev-für-einsteiger weggelassen.

Meiner meinung nach ist diese Reihenfolge die beste:
  • Erstmal eine Textausgabe zum Debuggen und bootfähigkeit
  • GDT
  • Interrupts
  • PMM
  • Multitasking
  • VMM
  • Ein Loader für binaries
  • ...
49
Softwareentwicklung / Re: Linkeroptimierung
« am: 19. June 2012, 17:23 »
Danke für eure vielen Hinweise..  :-)
50
Softwareentwicklung / Linkeroptimierung
« am: 17. June 2012, 13:55 »
Hi,
ich hab meine lib als .a zusammengebündelt. Diese wird an den kernel und die Programme immer dran gelinkt. Aber auch funktionen die ich garnicht verwende.

Gibt es eine Möglichkeit, dass der linker nur die labels, die benötigt werden, dazulinkt?

Grüße
51
Lowlevel-Coding / Re: Multitasking in Ring-3
« am: 05. June 2012, 16:31 »
Wieso es geht doch. Ich hatte den TSS nur nicht richtig benutzt.
52
Lowlevel-Coding / Re: Multitasking in Ring-3
« am: 05. June 2012, 15:42 »
Es geht! Danke!!

auf die andern fragen brauch ich ja jetzt nicht mehr zu antworten. :-D
53
Lowlevel-Coding / Re: Multitasking in Ring-3
« am: 03. June 2012, 19:37 »
Da mir jetzt so niemand weiterhelfen kann, hier mal der Code https://www.dropbox.com/s/trl8nug0a91on9a/code.tar.gz

Um zu kompilieren einfach mkall ausfühern. Dabei wird kompiliert, gelinkt, das image erstellt und mit qemu gestartet.

ACHTUNG: So wie der Code jetzt ist, funktioniert alles wunderbar. Um den Fehler sichtbar zu machen, in /kernel/tasks/multitasking.c in init_task in der struct new_cpu .cs auf 0x1b setzten.

Ich freue mich auf Hilfe!
54
Lowlevel-Coding / Re: Multitasking in Ring-3
« am: 27. May 2012, 17:34 »
Das Problem ist einfach, dass der Usermode nicht funktioniert.
Wenn ich in den Usermode switche, kommt der jmp ins nichs.
Kennt da jemand mögliche Fehler?
55
Lowlevel-Coding / Re: Multitasking in Ring-3
« am: 24. May 2012, 18:02 »
Das Problem liegt ja nicht darin, dass die Struktur falsch befüllt wird, sonder dass wenn ich in meinen Tasks cs auf 0x1b setze funktioniert es nicht mehr. Mit 0x08 gehts.
Ist das verständlicher?
56
Lowlevel-Coding / Re: Multitasking in Ring-3
« am: 21. May 2012, 18:29 »
Ich hab die GDT & IDT jetzt neu mit der geschickteren Variante über structs implementiert. Also daran liegts nicht.
Ich denke der Fehler müsste dann ist den Stubs liegen, eigentlich ist doch alles richtig.?!
// handle_interrupt aus common_handler.c
.extern handle_interrupt

.macro int_stub nr
.global int_handler\nr
int_handler\nr:
    push $0
    push $\nr
    jmp common_intr_handler
.endm

//Exeptions haben extra-stubs
// (siehe: kernel/interrupt/handler/exeption/handler.S)

//IRQs
int_stub 0x20
// 0x21: direct call
int_stub 0x22
int_stub 0x23
int_stub 0x24
int_stub 0x25
int_stub 0x26
int_stub 0x27
int_stub 0x28
int_stub 0x29
int_stub 0x2A
int_stub 0x2B
int_stub 0x2C
int_stub 0x2D
int_stub 0x2E
int_stub 0x2F

//Syscalls
int_stub 0x30

common_intr_handler:
  push %ebp
  push %edi
  push %esi
  push %edx
  push %ecx
  push %ebx
  push %eax
 
  // Kernel-Datensegmente laden
  mov $0x10, %ax
  mov %ax, %ds
  mov %ax, %es
 
  // ISR aufrufen
  push %esp
  call handle_interrupt
  mov %eax, %esp //Neuen Stack laden
 
  // User-Datensegmente laden
  mov $0x23, %ax
  mov %ax, %ds
  mov %ax, %es
 
  // Neue cpu herstellen
  pop %eax
  pop %ebx
  pop %ecx
  pop %edx
  pop %esi
  pop %edi
  pop %ebp
 
  // Errorcode und Interruptnummer vom Stack nehmen
  add $8, %esp
  iret
Wo könnten andere Fehler/Ursachen für den Sprung sein?
57
Lowlevel-Coding / Re: Multitasking in Ring-3
« am: 10. May 2012, 14:36 »
Zitat
Meine Theorie dazu ist, dass irgendwo ESP mit 0 geladen wurde, und danach ein paar POPs/rets ausgeführt wurden. Du solltest also die Taskerzeugung, den Taskwechsler und den Scheduler genauer anschauen. Insbesondere solltest du versuchen rauszukriegen, ob der Task zu dem gewechselt wird, überhaupt gültig ist.

Frage: kann so ein Fehler nur in Assembler passieren oder geht das auch mit C?
58
Lowlevel-Coding / Re: Multitasking in Ring-3
« am: 05. May 2012, 14:11 »
Okay. Das Merkwürdige Problem mit der Tastatureingabe hab ich jetzt gelöst. (ich habe den Rückgabewert von gets nicht beachtet)

Es steht aber immernoch das Problem mit den Ringen:
* in Ring-0 funktioniert das Multitasking
* in Ring-3 funktioniert es nicht. :-(
59
Lyrisches Eck / Re: Wortspiel
« am: 28. April 2012, 15:41 »
Die Register registrieren reglos reichlich fehler
60
Lowlevel-Coding / Re: Multitasking in Ring-3
« am: 28. April 2012, 14:56 »
möglicherweise liegt das garnicht am Multitasking.

Wenn ich das aktivieren des neuen Tasks (cpu = task_states[current_task];) rusnehme und an das ende von init dies
while(1){
    gets();
    puts("\n");
  }
setzte, kann man folgendes beobachten:
  • wenn man ein Zeichen eingibt, geht alles
  • wenn man zwei Zeichen eingibt geht alles
  • wenn man drei Zeichen eingibt geht alles
  • wenn man vier Zeichen eingibt kommt Invalid Opcode
  • wenn man fünf und mehr eingibt kommt das problem wie beim Multitasking(trying to execute code outside RAM or ROM...)

Das image ist im Anhang
Seiten: 1 2 [3] 4 5 ... 8

Einloggen