[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