[英]Trying to understand UNIX system calls on XV6
我試圖寫一個XV6簡單的系統調用(文件可在這里和Github上這里,以便了解他們是如何實現的)。 我已經使用了這些步驟
syscall.c
,聲明extern int sys_hello(void)
並將[SYS_hello] sys_hello
添加到static int (*syscalls[])(void)
數組中syscall.h
,將SYS_hello
定義為調用號 22user.h
,將函數原型聲明為int hello (void);
usys.S
,將SYSCALL(hello)
添加到宏中在sysproc.c
底部添加函數sys_hello(void)
int sys_hello(void) { cprintf ("Hello World System Call\\n"); return 0; }
創建的hello.c
只調用hello()
系統調用
hello.c
添加到Makefile
並運行代碼它按預期工作。
現在,我的問題是 syscall.c 中的數組似乎將命令的索引與 syscall.h 文件中的系統調用號相匹配 但是,如果我將 hello 位置移動到 syscall.c 中的第二個位置並讓syscall.h 中的系統命令號保持 22 系統命令和以前一樣工作。 哪里,我預計它會壞掉。 你能幫我理解數組 syscall.c 如何映射到 syscall.h 系統調用號嗎?
我是 XV6 和 C 的新手,所以如果這個問題看起來很愚蠢,請不要生我的氣,我只是想學習。
如果有幫助,這是指向我的 XV6 存儲庫分支的 Github 鏈接: github.com/AdityaSingh/XV6
系統調用數組是 syscall.c 使用指定的初始化語法,您可以在其中指定在哪個索引處分配值。
static int (*syscalls[])(void) = {
[SYS_fork] sys_fork,
}
SYS_fork
,定義為1個,指定在哪里分配索引sys_fork
。 因此,使用此語法元素的順序無關緊要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.