2015-03-24 42 views
1

我一直在瀏覽OS/161中關於系統調用執行方式的代碼。從我所看到的系統調用(例如reboot())實際上被OS/161內核轉換爲調用sys_reboot()。同樣,致電fork()將被轉換爲致電sys_fork()系統調用OS/161

我的理解是否正確?

謝謝。

回答

1

每個系統調用有唯一的識別號碼,在OS161這些系統調用號碼在克恩定義/包括/克恩/ syscall.h:

#define SYS_reboot  119 

該庫程序重新啓動()放置在系統調用號碼一個寄存器(v0)並向操作系統發出陷阱,系統調用處理程序從彙編語言異常處理程序接收一個稱爲陷阱的數據結構,其中包含系統調用編號等信息。

該號碼在一個開關case語句用來選擇功能:

void syscall(struct trapframe *tf) 
    ... 
    callno = tf->tf_v0; 
    ... 
    switch (callno) { 
     case SYS_reboot: 
     err = sys_reboot(tf->tf_a0); 
     break;