我正在嘗試在XV6中創建一個簡單的基於優先級的調度程序。爲此,我還必須創建一個系統調用,以允許進程設置其優先級。我已經做了創建系統調用所需的一切,在這裏和其他地方討論:如何將值傳遞給XV6中的系統調用函數?
how do i add a system call/utility in xv6
的問題是,當我打電話的功能,或者說我無法通過任何變量,它運行像什麼是錯的,但函數內部不會顯示正確的值。
extern聲明(syscall.c):
...
extern int sys_setpty(void);
static int (*syscalls[])(void) = {
...
[SYS_setpty] sys_setpty,
};
Sys系統呼叫向量(syscall.h):
#define SYS_setpty 22
實施(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);
微距(usys.S):
SYSCALL(setpty)
函數調用:
setpty(3, 50);
輸出:
function pid: 16843009
function pty: 16843009
的值總是相同的確切數目:16843009.我有通過將值分配給pid和pty來檢查cprintf是否工作正常。我已經花了大約6個小時嘗試了所有我能想到的所有可能的組合,並且我開始認爲在XV6中沒有通過系統調用傳遞值的內置機制。我錯過了什麼嗎?先謝謝你。
我被困在同一點,你能否說出來? – WannaBeCoder 2015-03-15 13:00:38
我已經玩了幾個月了,我會嘗試,但我不清楚你需要詳細說明。 – bertmoog 2015-03-16 18:39:11
感謝您自己的答案+1,我得到了如何將參數從用戶空間傳遞到內核空間。但是我無法做基於優先級的調度。 :( – WannaBeCoder 2015-03-17 07:30:05