Próbuję utworzyć prosty harmonogram oparty na priorytecie w XV6. Aby to zrobić, muszę również utworzyć wywołanie systemowe, które pozwoli procesowi ustawić jego priorytet. Zrobiłem wszystko, co niezbędne do stworzenia połączenia systemowego jak omówiono tutaj i gdzie indziej:Jak przekazać wartość do funkcji wywołania systemowego w XV6?
how do i add a system call/utility in xv6
Problem polega na tym, że nie może przekazać żadnych zmiennych, kiedy wywołanie funkcji, a raczej działa jak nic nie jest źle, ale prawidłowe wartości nie pojawiają się wewnątrz funkcji.
Zewnętrzne deklaracja (syscall.c):
...
extern int sys_setpty(void);
static int (*syscalls[])(void) = {
...
[SYS_setpty] sys_setpty,
};
Sys-call Vector (syscall.h):
#define SYS_setpty 22
Realizacja (sysproc.c):
void
sys_setpty(int pid, int pty)
{
cprintf("function pid: %d \n", pid);
cprintf("function pty: %d \n", pty);
}
(defs.h & user.h):
void setpty(int, int);
Makro (usys.S): Zapytaj
SYSCALL(setpty)
Funkcja:
setpty(3, 50);
wyjściowa:
function pid: 16843009
function pty: 16843009
Wartości są zawsze takie same dokładny numer: 16843009. Mam sprawdzane, czy cprintf działa poprawnie, przypisując wartości do pid i pty. Spędziłem około 6 godzin próbując każdej możliwej kombinacji wszystkiego, co mogę wymyślić i zaczynam myśleć, że nie ma wbudowanego mechanizmu przekazywania wartości przez wywołanie systemowe w XV6. Czy czegoś brakuje? Z góry dziękuję.
Utknąłem w tym samym punkcie, który mógłbyś wykuć? – WannaBeCoder
Minęło kilka miesięcy, odkąd się z tym bawiłem, spróbuję, ale nie jestem pewien, czego potrzebujesz. – bertmoog
Dzięki własnej odpowiedzi +1 otrzymałem sposób przekazywania parametrów z przestrzeni użytkownika do przestrzeni jądra. Jednak nie mogłem wykonywać priorytetów opartych na harmonogramach. :( – WannaBeCoder