[OSy] pomoooc KoHlTo!!

Jiri Tousek jiri.tousek at gmail.com
Mon Jan 8 20:29:18 CET 2007


Pochopil jsem spravne, ze se vlastne ptate porad na totez jako v
predchozim prispevku?

Pokud ano:
Koukali jsme na to dva a zadny problem v kodu jsme nenasli. Porad nam
ale chybi zakladni udaj - jak uz psal Sulthan - co presne znamena
"tady to spadava".

Pokud to pada na zakazany pristup do pameti, bude treba zjistit, na
jake adresy kernel pristupuje pri vyvolani vyjimky a naslednem zabiti
vlakna, pripadne proc je pristup nepovoleny (TLB/trasovani vnitrku
memory managementu/assembler dump msimu).

Z informaci, ktere jsem zatim vycetl, vic poradit nemuzu. Chybu na
strane naseho kernelu nevylucuji, ale jsem si dost jisty, ze cteni a
zapis do KUSEG od adresy 0, alokaci 32kB bloku i cteni/zapis do KSEG0
tesy testovaly.

Jiri Tousek

On 1/8/07, Vaclav Klecanda <vencax at centrum.cz> wrote:
> Porad se nam nedari prekonat zakladni problem. Porsim o pomoc autory KoHlTo, aby nam poradili.
>
> Vzali sme jejich kernel a jedine co jsme upravili je v kodu (viz. dole)
>
> ocekaval bych, ze se oba thready vytvori, pak se nakopiruje pamet a pak se zacne switchovat mezi vyposavanim 1 nebo 2. threadu. Jenze behem kopirovani se to zastavi... muze mi nekdo z autoru KoHlTa rict proc? Co tedy vlastne thread_create_new_map udela, nebo jestli ho pouzivame spatne?? Diky
>
> /* jedina vec, co jsme zmenili */
> #define PROGRAM_BEGIN_ADDRESS 0x00000000
>
> #define CODE_SEGMENT_SIZE (32*1024)
>
> #define EXT_DEVICE_BEGIN 0x90000000
>
> copyProgram( void)
> {
>         int retVal;
>
>         uint8_t * src;
>         uint8_t * dest;
>         size_t  i;
>
>         /* adress of code segment begin */
>         uint8_t *where = (uint8_t *)PROGRAM_BEGIN_ADDRESS;
>
>         retVal = vmalloc(&where, CODE_SEGMENT_SIZE,
>                 (VF_VA_USER << VF_VA_SHIFT) | (VF_AT_KUSEG << VF_AT_SHIFT) );
>
>         if( retVal != EOK)
>         {
>                 dprintk("CODE_SEGMENT allocation error!\n");
>                 return retVal;
>         }
>
>         src = (uint8_t *)EXT_DEVICE_BEGIN;
>         dest = (uint8_t *)PROGRAM_BEGIN_ADDRESS;
>
>         for(i = 0; i < (CODE_SEGMENT_SIZE / sizeof(uint8_t)); i++)
>         {
>                 dest[i] = src[i];
>         }
>
>         return EOK;
> }
>
> /* plus v main.c misto:
> if (thread_create_new_map(&t, assignment_test, NULL) != EOK) {
>
>         panic("Cannot create test thread - Not enough memory.\nSystem halted.\n");
>
> }
> je:
> if (thread_create_new_map(&t, idle_thread2, NULL) != EOK) {
>
>         panic("Cannot create test thread - Not enough memory.\nSystem halted.\n");
>
> }
> if( EOK != copyProgram() )
>         panic("Copy se podelal!\n");
>
> s tim, ze idle_thread2 a idle_thread aktivne vypisuji: "jak sem thred #1"(popr.2)
> */
>
> _______________________________________________
> OSy mailing list
> OSy at dsrg.mff.cuni.cz
> http://dsrg.mff.cuni.cz/mailman/listinfo/osy
>



More information about the NSWI004 mailing list