2013-07-08 61 views
0

我已經看到了這個例子中,_syscall宏:使用用戶空間應用

#include <stdio.h> 
#include <linux/unistd.h> 
#include <sys/syscall.h> 

#define __NR_getjiffies  320 
#define __NR_diffjiffies 321 
#define __NR_pdiffjiffies 322 

_syscall0(long, getjiffies); 
_syscall1(long, diffjiffies, long, ujiffies); 
_syscall2(long, pdiffjiffies, long, ujiffies, long*, presult); 

int main() 
{ 
    long jifs, result; 
    int err; 

    jifs = getjiffies(); 

    printf("difference is %lx\n", diffjiffies(jifs)); 

    err = pdiffjiffies(jifs, &result); 

    if (!err) { 
    printf("difference is %lx\n", result); 
    } else { 
    printf("error\n"); 
    } 

    return 0; 
} 

我有兩個問題:

  • 我想知道,爲什麼一個需要使用系統調用找到兩個數字之間的區別?
  • 一般我們什麼時候需要使用系統調用?

回答

0

爲什麼需要使用系統調用來查找兩個數之間的差異? - 我不知道你在哪裏看過這段代碼,但是你肯定可以用一個簡單的minus來計算經過了多少時間。

爲什麼我們需要系統調用? - 因爲自從1982年的處理器使用了一種叫做「保護模式」的東西,這意味着CPU硬連線讓你有限的東西訪問,而它在保護模式下運行。所以每次你想使用硬件時(打印到屏幕上,寫入文件,通過網卡發送內容等),你都不能在保護模式下使用硬件。所以你使用系統調用來要求內核爲你做(內​​核不能在保護模式下運行),並且內核可能會這樣做,可能會報告問題或者只是告訴你沒有權限。所以,簡而言之:您需要系統調用才能使用硬件等特權功能。