Autor Thema: Problem mit multitasking und paging  (Gelesen 3392 mal)

Hunter

  • Beiträge: 28
    • Profil anzeigen
Gespeichert
« am: 09. February 2007, 17:19 »
Hallo Leute,

bisher liefen in meinem os alle tasks im Ring0 ... jetzt möchte ich aber die Tasks im Ring3 laufen lassen ... gesagt getan ... nur gibt es jetzt ein großes Problem ... jedes mal wenn ich eine Ring3 Task erstelle/starten möchte kommt ein page fault ... bei Ring0 Tasks funktioniert aber alles ohne Probleme ... wenn ich paging deaktiviere funktionieren auch die Ring3 Tasks ... woran könnte das liegen ?? Fehler in der TSS ?? Ich hoffe jemand kann mir helfen ... Aja komisch ist auch dass im CR2 Register ein Wert steht ...

Hier noch das Bochsout File ...

00000000000i[     ] Bochs x86 Emulator 2.1.1
00000000000i[     ]   February 08, 2004
00000000000i[     ] System configuration
00000000000i[     ]   processors: 1
00000000000i[     ]   A20 line support: yes
00000000000i[     ]   APIC support: no
00000000000i[     ] CPU configuration
00000000000i[     ]   level: 5
00000000000i[     ]   fpu support: yes
00000000000i[     ]   paging support: yes, tlb enabled: yes
00000000000i[     ]   mmx support: yes
00000000000i[     ]   sse support: no
00000000000i[     ]   v8086 mode support: yes
00000000000i[     ]   3dnow! support: no
00000000000i[     ]   PAE support: no
00000000000i[     ]   PGE support: no
00000000000i[     ]   PSE support: no
00000000000i[     ]   x86-64 support: no
00000000000i[     ]   SEP support: no
00000000000i[     ] Optimization configuration
00000000000i[     ]   Guest2HostTLB support: yes
00000000000i[     ]   RepeatSpeedups support: yes
00000000000i[     ]   Icache support: yes
00000000000i[     ]   Host Asm support: yes
00000000000i[MEM0 ] allocated memory at 00CC0020. after alignment, vector=00CC1000
00000000000i[MEM0 ] 64,00MB
00000000000i[MEM0 ] rom at 0xf0000/65536 ('BIOS-bochs-latest')
00000000000i[MEM0 ] rom at 0xc0000/29664 ('VGABIOS-lgpl-latest')
00000000000i[CMOS ] Using local time for initial clock
00000000000i[CMOS ] Setting initial clock to: Fri Feb 09 16:52:09 2007 (time0=1171036329)
00000000000i[DMA  ] channel 4 used by cascade
00000000000i[DMA  ] channel 2 used by Floppy Drive
00000000000i[FDD  ] fd0: 'staticos.img' ro=0, h=2,t=80,spt=18
00000000000i[WGUI ] IME disabled
00000000000i[VGA  ] interval=300000
00000000000i[VGA  ] VBE Bochs Display Extension Enabled
00000000000i[     ] init_mem of 'harddrv' plugin device by virtual method
00000000000i[     ] init_mem of 'keyboard' plugin device by virtual method
00000000000i[     ] init_mem of 'serial' plugin device by virtual method
00000000000i[     ] init_mem of 'parallel' plugin device by virtual method
00000000000i[     ] init_mem of 'extfpuirq' plugin device by virtual method
00000000000i[     ] init_mem of 'gameport' plugin device by virtual method
00000000000i[     ] init_dev of 'harddrv' plugin device by virtual method
00000000000i[HD   ] CD on ata0-1: 'D:\Laptop_Alt\Neue\test.iso'
00000000000i[CD   ] load cdrom with path=D:\Laptop_Alt\Neue\test.iso
00000000000i[CD   ] Opening image file as a cd
00000000000i[CD   ] Using direct access for CDROM
00000000000i[HD   ] Media present in CD-ROM drive
00000000000i[HD   ] Boot device will be 'a'
00000000000i[HD   ] Floppy boot signature check is enabled
00000000000i[     ] init_dev of 'keyboard' plugin device by virtual method
00000000000i[KBD  ] will paste characters every 1000 keyboard ticks
00000000000i[     ] init_dev of 'serial' plugin device by virtual method
00000000000i[SER  ] com1 at 0x03f8 irq 4
00000000000i[     ] init_dev of 'parallel' plugin device by virtual method
00000000000i[PAR  ] parallel port 1 at 0x378 irq 7
00000000000i[     ] init_dev of 'extfpuirq' plugin device by virtual method
00000000000i[     ] init_dev of 'gameport' plugin device by virtual method
00000000000i[     ] reset of 'harddrv' plugin device by virtual method
00000000000i[     ] reset of 'keyboard' plugin device by virtual method
00000000000i[     ] reset of 'serial' plugin device by virtual method
00000000000i[     ] reset of 'parallel' plugin device by virtual method
00000000000i[     ] reset of 'extfpuirq' plugin device by virtual method
00000000000i[     ] reset of 'gameport' plugin device by virtual method
00000004325i[BIOS ]  rombios.c,v 1.103.2.2 2004/02/02 22:39:22 cbothamy Exp $
00000318066i[KBD  ] reset-disable command received
00000321865i[VBIOS] VGABios $Id: vgabios.c,v 1.38 2003/11/05 23:21:19 cbothamy Exp $
00000322096i[VGA  ] VBE known Display Interface b0c2
00000322181i[VGA  ] VBE known Display Interface b0c0
00000325126i[VBIOS] VBE Bios $Id: vbe.c,v 1.35 2003/11/03 20:57:01 vruppert Exp $
00000325241i[VGA  ] VBE known Display Interface b0c2
00000527577i[VGA  ] VBE known Display Interface b0c2
00000600000i[WGUI ] dimension update x=720 y=400 fontheight=16 fontwidth=9 bpp=8
00000614487e[HD   ] device set to 0 which does not exist
00001053649i[VGA  ] VBE known Display Interface b0c2
00001171079i[VGA  ] VBE known Display Interface b0c2
00001230875i[VGA  ] VBE known Display Interface b0c2
00001295142i[VGA  ] VBE known Display Interface b0c2
00001359414i[VGA  ] VBE known Display Interface b0c2
00001423700i[VGA  ] VBE known Display Interface b0c2
00001488000i[VGA  ] VBE known Display Interface b0c2
00001552338i[VGA  ] VBE known Display Interface b0c2
00001616660i[VGA  ] VBE known Display Interface b0c2
00001681015i[VGA  ] VBE known Display Interface b0c2
00001745403i[VGA  ] VBE known Display Interface b0c2
00001809736i[VGA  ] VBE known Display Interface b0c2
00001874122i[VGA  ] VBE known Display Interface b0c2
00001938521i[VGA  ] VBE known Display Interface b0c2
00002002872i[VGA  ] VBE known Display Interface b0c2
00002067256i[VGA  ] VBE known Display Interface b0c2
00002131673i[VGA  ] VBE known Display Interface b0c2
00002196094i[VGA  ] VBE known Display Interface b0c2
00002260546i[VGA  ] VBE known Display Interface b0c2
00002329845i[VGA  ] VBE known Display Interface b0c2
00002330949i[VGA  ] VBE known Display Interface b0c2
00002331354i[VGA  ] VBE set xres (1024)
00002331396i[VGA  ] VBE set yres (768)
00002331440i[VGA  ] VBE set bpp (32)
00002331527i[VGA  ] VBE enabling x 1024, y 768, bpp 32, 3145728 bytes visible
00002331527i[WGUI ] dimension update x=1024 y=768 fontheight=0 fontwidth=0 bpp=32

Hier habe ich Bochs deakiviert da ein Page Fault gekommen ist!

00369594000p[WGUI ] >>PANIC<< POWER button turned off.
00369594000i[SYS  ] Last time is 1171036698
00369594000i[CPU  ] protected mode
00369594000i[CPU  ] CS.d_b = 32 bit
00369594000i[CPU  ] SS.d_b = 32 bit
00369594000i[CPU  ] | EAX=00000009  EBX=00000000  ECX=00010204  EDX=00000027
00369594000i[CPU  ] | ESP=0073e904  EBP=0073e90c  ESI=00000000  EDI=00000000
00369594000i[CPU  ] | IOPL=3 NV UP DI PL NZ NA PO NC
00369594000i[CPU  ] | SEG selector     base    limit G D
00369594000i[CPU  ] | SEG sltr(index|ti|rpl)     base    limit G D
00369594000i[CPU  ] |  DS:0023( 0004| 0|  3) 00000000 000fffff 1 1
00369594000i[CPU  ] |  ES:0023( 0004| 0|  3) 00000000 000fffff 1 1
00369594000i[CPU  ] |  FS:0023( 0004| 0|  3) 00000000 000fffff 1 1
00369594000i[CPU  ] |  GS:0023( 0004| 0|  3) 00000000 000fffff 1 1
00369594000i[CPU  ] |  SS:0010( 0002| 0|  0) 00000000 000fffff 1 1
00369594000i[CPU  ] |  CS:0008( 0001| 0|  0) 00000000 000fffff 1 1
00369594000i[CPU  ] | EIP=00101110 (00101110)
00369594000i[CPU  ] | CR0=0xe0000011 CR1=0x00000000 CR2=0x00109338
00369594000i[CPU  ] | CR3=0x00300000 CR4=0x00000000
00369594000i[     ] restoring default signal behavior
00369594000i[CTRL ] quit_sim called with exit code 1

Mit freundlichen Grüßen
Hunter

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 09. February 2007, 20:29 »
Hmm also das sagt mir jetzt nicht so viel...Aber hast du auch den Ring0-Stack des Ring3-Tasks gemappt? Wie stehts mit dem Kernel?

Gruss
Noooooooooooos

Hunter

  • Beiträge: 28
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 09. February 2007, 20:39 »
Wie meinst du das Ring0 und Ring3 mappen ?? Ich mappe den gesamten Kernel,... da müssten ja dan eignetlich der Ring0 und Ring3 Stack ja auch mitgemappt werden ...
Der Ring3 Task wird aufgerufen ... aber der Fehler liegt glaube ich am zurückschalten von DPL3 -> DPL0 ... muss ich eigentlich bei jedem Taskwechsel auch das cr3 im TSS ändern oder nur SS0 und ESP0 ??

Mit freundlichen Grüßen
Hunter

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 09. February 2007, 21:07 »
Also Im TSS müssen nur SS0 und ESP0 stehen.

Ab wo ist denn alles gemappt? Was liegt an 0x109338 im Speicher? Was steht an dieser Stelle im PageVerzeichnis? Sollte dort was stehen? --> Mit dem Debugger überprüfen (Tut: http://www.chris-soft.de/tutorials/bochs/) Kann es sein das ein Stack (der 3er oder der 0er) gerade an einer gerade noch gemappten Grenze sind. (z.B. wenn der Stack 0x9000 ist und alles erst ab 0x9000 gemappt ist)


Gruss
Nooooooooooos

Hunter

  • Beiträge: 28
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 09. February 2007, 21:25 »
Aber ESP0 und SS0 muss schon bei jedem Taskwechsel geändert werden oder reicht es diese nur einmal zu setzen ??

Aja ich habe jetzt versucht mit dem Bochs Debuger herauszufinden was auf der besagten Adresse steht bzw. geschieht .. aber irgendwie kommt da vorher noch der Page Fault und das System hält ... Ich bin am verzweifeln ...

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 09. February 2007, 21:32 »
Also ne...einmal setzen reicht. Weil ja der 0er Stack immer nur dann aufgerufen wird, um dursch Multitasking unterbrochen zu werden. Wenn du ihn zwischendurch mal veränderst, kehrt er nicht mehr richtig zurück...

Hunter

  • Beiträge: 28
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 09. February 2007, 21:50 »
Danke nooooooooos für die Infos ... das Problem hat sich auch schon erledigt ... der Fehler war, dass ich das Userbit beim mappen nicht berücksichtigt hatte und somit die ring3 Tasks ja nich zugreiffen durften ... aber trotzdem danke für deine schnellen antworten ...

Mit freundlichen Grüßen
Hunter

 

Einloggen