2013-07-08 21 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硬连线让你有限的东西访问,而它在保护模式下运行。所以每次你想使用硬件时(打印到屏幕上,写入文件,通过网卡发送内容等),你都不能在保护模式下使用硬件。所以你使用系统调用来要求内核为你做(内​​核不能在保护模式下运行),并且内核可能会这样做,可能会报告问题或者只是告诉你没有权限。所以,简而言之:您需要系统调用才能使用硬件等特权功能。