0

我看过这个例子:

#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;
 }

我有两个问题:

  • 我想知道为什么需要使用系统调用来查找两个数字之间的差异?
  • 一般来说,我们什么时候需要使用系统调用?
4

1 回答 1

0

为什么需要使用系统调用来查找两个数字之间的差异?- 我不知道你在哪里看到过这段代码,但你当然可以用一个简单的减号来计算经过了多少时间。

为什么我们需要系统调用?- 因为自从 1982 年的处理器使用一种叫做“保护模式”的东西,这意味着 CPU 是硬连线的,可以让你有限地访问东西,同时它在保护模式下运行。因此,每次您想使用硬件(打印到屏幕、写入文件、通过网卡发送内容等)时,您都无法在受保护模式下执行此操作。因此,您使用系统调用要求内核为您执行此操作(内核不会在保护模式下运行),并且内核可能会执行此操作,可能会报告问题或只是告诉您您没有权限。因此,简而言之:您需要系统调用来执行特权操作,例如使用硬件。

于 2014-04-25T12:22:07.000 回答