Поднимите ошибку страницы Store/Amo при попытке записать стек в батуте XV6Linux

Ответить
Anonymous
 Поднимите ошибку страницы Store/Amo при попытке записать стек в батуте XV6

Сообщение Anonymous »

I'm trying to modify xv6 to make it a multi-thread system.One of the modification I made is that I need do some computing oprations in trampoline because I need every thread to find its unique TRAMPFRAME virtual address.Specifically, I need the stack to store regs temporarily in trampoline:uservec
uservec:
#
# trap.c sets stvec to point here, so
# traps from user space start here,
# in supervisor mode, but with a
# user page table.
#

# store intermediate registers on the stack
addi sp, sp, -32
sd a0, 0(sp)
sd a1, 8(sp)
sd a2, 16(sp)

< /code>
Проблема в том, что каждый раз, когда я пытаюсь вернуть пространство пользователя (мы все еще используем таблицу страницы пользователя), этот код будет выполняться. Но каждый раз, когда я пишу в стек, я получаю ошибку и продолжаю выполнять этот код. Это бесконечный петлей. Фактически, адрес был сопоставлен в таблице страницы пользователя. < /P>
Первый процесс, например, < /p>
uvmfirst(p->mm.pagetable, initcode, sizeof(initcode));
p->sz = PGSIZE;

// prepare for the very first "return" from kernel to user.

t->trapframe->epc = 0; // user program counter
t->trapframe->sp = PGSIZE; // user stack pointer


и uvmfrist ()
void
uvmfirst(pagetable_t pagetable, uchar *src, uint sz)
{
char *mem;

if(sz >= PGSIZE)
panic("uvmfirst: more than a page");
mem = kalloc();
memset(mem, 0, PGSIZE);
mappages(pagetable, 0, PGSIZE, (uint64)mem, PTE_W|PTE_R|PTE_X|PTE_U);
memmove(mem, src, sz);
}
< /code>
Итак, почему я установил правильные разрешения для этого адреса и до сих пор не могу писать? Я делаю то же самое для исходной версии XV6, и это не работает прямо сейчас! < /p>
xv6: < /p>
.align 4
.globl uservec
uservec:
#
# trap.c sets stvec to point here, so
# traps from user space start here,
# in supervisor mode, but with a
# user page table.
#

# for debugging
addi sp, sp, -32
sd a0, 0(sp)
sd a1, 8(sp)
sd a2, 16(sp)
addi sp, sp, 32


Подробнее здесь: https://stackoverflow.com/questions/794 ... trampoline
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»