2019-2020-1 20199307《Linux内核原理与分析》第五周作业

系统调用的三层机制(上)

一、用户态、内核态和中断

知识点:
1.intel x86 CPU有四种不同的执行级别,分别是0、1、2、3,数字越小,特权越高。
2.linux操作系统只是采用了0和3两个特权级别,分别对应内核态和用户态。
3.内核态可以访问所有的内存,而用户态只可以访问0x00000000-0xbfffffff之间的内存。
3.系统调用:操作系统为用户态进程与硬件设备进行交互提供了一组接口

二、系统调用

知识点:
1.什么是系统调用:
操作系统为用户态进程与硬件设备进行交互提供了一组接口
2.系统调用的意义:
-把用户从底层的硬件编程中解放出来
-极大的提高了系统的安全性
-使用户程序具有可移植性
3.API和系统调用是不同的,API只是一个函数定义,而系统调用通过软中断向内核发出一个明确的请求。
4.系统调用的3层机制:xyz、system_call和sys_xyz
第一层:API
第二层:中断向量对应的
第三层:系统调用有不同种类的服务程序

三、使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

实验步骤:

1.使用库函数API使用系统调用:


2.C代码中嵌入汇编代码使用系统调用:


用自己的实验环境时候,出现段错误提示,由于未找到错误原因,故在实验楼继续试验:

3.代码分析:

#include <stdio.h>
#include <unistd.h>
int main(void){
    pid_t tt;
    asm volatile(
            "movl $0x14, %%eax
	"   //将系统调用号赋给eax寄存器
            "int $0x80
	"           //执行系统调用
            "movl %%eax, %0
	"      //将系统调用执行后的返回值赋给变量tt
            :"=m"(tt)     
            );
    printf("%u
",tt);
    return 0;
}
原文地址:https://www.cnblogs.com/j1551163790/p/11692007.html