2019-2020-1 20199315仕事の5週目の「Linuxカーネルの原理と分析」

第IV章、 "Paodingjieniu Linuxカーネル解析"

システムコール(上)3層のメカニズム

ユーザモード、カーネルモードと割り込み

システムは、オペレーティング・システム・ロケーション・ダイアグラムの呼び出し:

Intelx86 CPU4は、異なるレベル、すなわち、0,1,2,3、より少ない数の、より高い特権を行います。LinuxのCaozuojitongは、カーネルモードとユーザモードに対応し、ここで2つだけの特権レベル0と3を使用しました。
値のEIPは、任意のアドレスであってもよく、32ビットx86マシン、カーネルモードでの処理4GBのアドレス空間が存在する:カーネルモードは、CSの場合EIP点範囲:ユーザモードとカーネルモードのための非常に重要な識別方法は、CSでありますこの4GBのアドレス空間をアクセスすることができ、ユーザモードあなただけ0x00000000-0xbfffffffアドレス空間にアクセスすることができます。

このシステムはまた、メインモードカーネルモードを入力するようにユーザモードから中断するコール、割り込みハンドラです。

システムコールの概要

システムの重要性は、ユーザ・モード・プロセスおよびハードウェア・デバイスのためのインターフェースのセットを提供するオペレーティングシステムと対話するために呼び出します。システムコールは、以下の機能と特徴を持っている:
1。で、基盤となるハードウェアプログラミングからユーザーを解放し
、セキュリティが大幅システムの改善2.
3.ポータビリティがプログラムすることができます

実験棟実験4

1. APIライブラリ関数を使用すると、システムコールをトリガー

C言語のソースコード:


#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main(void)
{
    int u_id;
    u_id=getpid();
    printf("u_id=%u\n",u_id);
    return 0;
}

結果:

システムコールを開始2.Cコード組み込みアセンブリコード

次のようにソースコードは次のとおりです。


#include<stdio.h>
#include<unistd.h>
int main(void)
{
    int u_id;
    asm volatile(
           "movl $0x14,%%eax\n\t"        /* 将系统调用号赋给eax寄存器 */
           "int  $0x80\n\t"                  /* 执行系统调用 */
           "movl %%eax, %0\n\t"             /* 将系统调用执行后的返回值赋给变量 */
           :"=m" (u_id)
           );
    printf("u_id=%u\n",u_id);
    return 0;
}

結果:

これは不十分な場合には、批判を喜ばと感謝される、Linuxの学習コンテンツの私の5週目です。

上記

おすすめ

転載: www.cnblogs.com/qianxiaoxu/p/11706743.html