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

2 つの質問があります。

  • 2つの数値の違いを見つけるためにシステムコールを使用する必要がある理由を知りたいですか?
  • 一般に、システムコールを使用する必要があるのはいつですか?
4

1 に答える 1

0

2つの数値の違いを見つけるためにシステムコールを使用する必要があるのはなぜですか? - このコードをどこで見たかわかりませんが、単純なマイナスを使用して経過時間を計算できます。

なぜシステムコールが必要なのですか? - 1982 年のプロセッサは「プロテクト モード」と呼ばれるものを使用しているため、プロテクト モードで実行している間、CPU はハードウェア接続されており、アクセスが制限されていることを意味します。したがって、ハードウェアを使用するたびに (画面への印刷、ファイルへの書き込み、ネットワーク カード経由での送信など)、プロテクト モードではこれを実行できません。そのため、システム コールを使用してカーネルに実行を依頼すると (カーネルは保護モードでは実行されません)、カーネルが実行したり、問題を報告したり、権限がないことを通知したりすることがあります。つまり、一言で言えば、ハードウェアの使用などの特権的なことを行うには、システム コールが必要です。

于 2014-04-25T12:22:07.000 に答える