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
Поднимите ошибку страницы Store/Amo при попытке записать стек в батуте XV6 ⇐ Linux
1741549187
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79496492/raise-store-amo-page-fault-when-trying-write-stack-in-xv6s-trampoline[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия