Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

standalone benchmark

[es] :: Kernel i OS programiranje :: standalone benchmark

[ Pregleda: 3553 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

maddog_srb
Cacak

Član broj: 192945
Poruke: 129
*.pools.arcor-ip.net.



+24 Profil

icon standalone benchmark03.10.2011. u 09:37 - pre 101 meseci
Zeleo bih da napravim benchmark CPU-a koji ce se pokretati bez OS-a.

Pogledao sam neke tutorijale o "Hello world" bootloader-ima, i za sada bih mogao da ispisem neki tekst na ekranu...
Potrebna mi je neka vrsta merenja proteklog vremena za koje CPU izvrsi neke operacije, i mehanizam za upisivanje tih rezultata na HDD.
Da li neko zna neki link koji bi mi pomogao?

Da li je pravi nacin da se svaka od ovih f-ja napise u ASM, i da se posle poziva u C-u, ili ima neki laksi nacin, mozda neke vec napisane f-je kojima nije potreban OS da bi se mogle pozvati u C-u...

 
Odgovor na temu

maddog_srb
Cacak

Član broj: 192945
Poruke: 129
*.ts.fujitsu.com.



+24 Profil

icon Re: standalone benchmark13.10.2011. u 13:32 - pre 101 meseci
Imam problem kod podesavanja GDT-a...

Naime, u C-u definisem strukturu gdt_pointer, i zatim pozovem kod u ASM, ali problem nastaje kada pokusam da ucitam adresu gdt_pointer-a...

evo ga ASM

Code:

[BITS 32]
[global start]
[extern _k_main] ;

start:
  cli
  
  call _k_main
  
  hlt    
  
[global _gdtFlush]     ; Allows the C code to link to this
[extern _gdt_p] ;

_gdtFlush:

    mov byte [ds:0B8000h], 'C'     ;#1
    mov byte [ds:0B8001h], 0Ch  
    
    lgdt [_gdt_p]   
    mov ax, 0x10     
    mov ds, ax
    mov es, ax
    mov fs, ax
    mov gs, ax
    mov ss, ax    

    jmp 0x08:flush2   
    
flush2:
    ret


#1: testiram da li se poziva gdtFlush iz C-a, i ovo radi, ali ako probam da ispisem ovo isto, posle lgdt [_gdt_p] ne radi...

evo kako pozivam gdtFlush()

Code:

    gdt_p.limit = (sizeof(struct gdtEntry) * 3) - 1;
    gdt_p.base = (unsigned int)&gdt;
  
    gdtSetDescriptor(0, 0, 0, 0, 0);
    gdtSetDescriptor(1, 0, 0xFFFFFFFF, 0x9A, 0xCF);
    gdtSetDescriptor(2, 0, 0xFFFFFFFF, 0x92, 0xCF);

    gdtFlush();


NAPOMENA: primeri i tutorijali koje sam gledao, koriste GRUB, medjutim ja koristim moj bootloader. Da li GRUB radi nesto specijalno, sto bih morao ja da implementiram, da bih mogao ovako da definisem GDT???
 
Odgovor na temu

[es] :: Kernel i OS programiranje :: standalone benchmark

[ Pregleda: 3553 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.