Tôi đang cố tạo một trình lập lịch biểu dựa trên mức độ ưu tiên đơn giản trong XV6. Để thực hiện điều này, tôi cũng phải tạo một cuộc gọi hệ thống sẽ cho phép một quy trình thiết lập mức độ ưu tiên của nó. Tôi đã làm tất cả mọi thứ cần thiết để tạo ra các cuộc gọi hệ thống như đã thảo luận ở đây và các nơi khác:Làm thế nào để chuyển một giá trị vào một hàm gọi hệ thống trong XV6?
how do i add a system call/utility in xv6
Vấn đề là, tôi không thể vượt qua bất kỳ biến khi tôi gọi hàm, hay đúng hơn, nó chạy như không có gì là sai nhưng các giá trị chính xác không hiển thị bên trong hàm.
extern khai (syscall.c):
...
extern int sys_setpty(void);
static int (*syscalls[])(void) = {
...
[SYS_setpty] sys_setpty,
};
Sys-gọi Vector (syscall.h):
#define SYS_setpty 22
thực hiện (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);
Macro (usys.S):
SYSCALL(setpty)
Chức năng cuộc gọi:
setpty(3, 50);
Output:
function pid: 16843009
function pty: 16843009
Các giá trị luôn là con số chính xác giống nhau: 16843009. Tôi có kiểm tra xem liệu cprintf có hoạt động chính xác hay không bằng cách gán giá trị cho pid và pty. Tôi đã dành khoảng 6 giờ cố gắng mọi kết hợp có thể có của tất cả mọi thứ tôi có thể nghĩ đến và tôi bắt đầu nghĩ rằng không có cơ chế tích hợp để truyền các giá trị thông qua một cuộc gọi hệ thống trong XV6. Tui bỏ lỡ điều gì vậy? Cảm ơn bạn trước.
Tôi bị kẹt ở cùng một điểm mà bạn có thể phấn khởi? – WannaBeCoder
Đó là một vài tháng kể từ khi tôi chơi với điều này, tôi sẽ cố gắng nhưng tôi không rõ ràng về những gì bạn cần được xây dựng. – bertmoog
Nhờ câu trả lời của riêng bạn +1, tôi đã nhận được cách chuyển các tham số từ không gian người dùng đến không gian hạt nhân. Tuy nhiên tôi không thể thực hiện việc lập lịch dựa trên mức độ ưu tiên. :( – WannaBeCoder