第4章システムコール(上)3層のメカニズム
まず、研究ノート
1. intel处理器一共有四种运行级别,linux使用了0,3两种运行级别,分别为内核态,用户态。
2. 内核态可以访问所有的内存,而用户态只可以访问0x00000000-0xbfffffff之间的内存。
3. 系统调用具有以下功能和特性:
把用户从底层的硬件编程中解放出来。操作系统为我们管理硬件,用户态进程不用直接与硬件设备打交道。
极大的提高系统的安全性。如果用户态进程直接与硬件设备打交道,会产生安全隐患,可能引起系统崩溃。
使用户程序具有可移植性。用户程序与具体的硬件已经耦合并用接口代替了,不会有紧密的关系,便于在不同系统间移植。
4. 系统调用的执行过程:
API->SYSTEM_CALL->SYS_XXX 其中system_call是运行在内核态的,是所有系统调用在内核的入口点,他在开始的时候保存用户态进程的执行上下文,结束后回复用户态进程的执行上下文,中间通过传入的系统调用号调用对应的中断服务程序。(中断:从用户态进入内核态) sys_xxx是对应的系统调用封装例程。
第二に、試験記録
1. APIライブラリ関数を使用すると、システムコールをトリガー
C言語のコードを次のように:
結果は以下の通りであります:
システムコールを開始2.Cコード組み込みアセンブリコード
次のようにソースコードは次のとおりです。
結果は以下の通りであります:
3.コード分析。
#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" //将系统调用执行后的返回值赋给变量tt
:"=m"(u_id)
);
printf("%u\n",u_id);
return 0;
}
概要
システムコール機構の理解
- このシステムは、ユーザーモードプロセスは、ハードウェアにアクセスするための方法です呼び出して、割り込みを介してユーザによってカーネルモードに述べている(int型は0x80)。
- ユーザは、システム・プログラム・モードを呼び出すと、CPUは、カーネルモードに入り、カーネル関数を実行します。
- システムコール手順:関数インタフェース(API)を提供し、パッケージライブラリ - > SYSTEM_CALL(すべての入口システムコール)、入口(EAXスタック)に基づいて呼番号システムを、システムが呼び出すために、対応するルーチンを呼び出し、
- システムは-ebx、ECX、EDX(EAX除く)パラメータとして使用する6つのレジスタを呼び出し、以上の6つのパラメータレジスタは、リンクに保存される場合、ESI、EDI、EBPは、パラメータをカーネル・モード・メモリを動作させることができます上記メモリに記憶されています。