簡體   English   中英

嘗試理解 XV6 上的 UNIX 系統調用

[英]Trying to understand UNIX system calls on XV6

我試圖寫一個XV6簡單的系統調用(文件可在這里和Github上這里,以便了解他們是如何實現的)。 我已經使用了這些步驟

  1. syscall.c ,聲明extern int sys_hello(void)並將[SYS_hello] sys_hello添加到static int (*syscalls[])(void)數組中
  2. syscall.h ,將SYS_hello定義為調用號 22
  3. user.h ,將函數原型聲明為int hello (void);
  4. usys.S ,將SYSCALL(hello)添加到宏中
  5. sysproc.c底部添加函數sys_hello(void)

     int sys_hello(void) { cprintf ("Hello World System Call\\n"); return 0; }
  6. 創建的hello.c只調用hello()系統調用

  7. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM