OS161: TLB отсутствует при загрузке - PullRequest
1 голос
/ 27 марта 2012

У меня ошибка TLB при загрузке, когда я запускаю тест форка, я понимаю, что это связано с передачей неверного stackptr в mips_usermode, моя реализация, кажется, вращается вокруг нескольких предложений здесь, была бы благодарна, если бы я ее исправил. Мой код ниже предоставляется в качестве функции точки входа в thread_fork. Я скучаю по чему-нибудь?

void
enter_forked_process(void *junk,unsigned long num)
{

        kprintf("\n entered enter_fork_process");
        struct trapframe tf = (*((struct trapframe *) junk));


        (void) num;


        kprintf("\n copied tf from from parent to child");
        tf.tf_v0 = 0;
        tf.tf_a3 = 0;
        tf.tf_epc += 4;
        kprintf("abt to enter mips_ usermode");
        mips_usermode(&tf);
}

1 Ответ

2 голосов
/ 28 марта 2012

Вы должны скопировать адресное пространство родительского потока перед вызовом thread_fork и передать указатель адресного пространства в качестве второго параметра enter_forked_process. И в enter_forked_process вы должны заполнить адресное пространство в curthread->t_addrspace. В противном случае вы получите ошибку TLB miss on load, поскольку адресное пространство текущего потока (дочернего) не инициализировано.

Для получения более подробной информации о системном вызове OS161, пожалуйста, обратитесь к этому блогу. И child_forkentry более или менее совпадает с вашим enter_forked_process. http://jhshi.wordpress.com/2012/03/11/os161-fork-system-call/

...