OS161: TLB отсутствует при загрузке

У меня ошибка при загрузке 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 ответ

Вы должны скопировать адресное пространство родительского потока перед вызовом 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/

Другие вопросы по тегам