• 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;
    }
  • 相关阅读:
    phpcms新建模板页教程
    Linux方向职业规划
    Codeforces Round #417 (Div. 2)-A. Sagheer and Crossroad
    Codeforces Round #396(Div. 2) A. Mahmoud and Longest Uncommon Subsequence
    ACM hdu 3336 Count the string
    ACM KMP 格式输入导致TLE
    swing JTable 更新数据
    swing JTable
    HashMap 和 HashTable 区别
    Java中next()和nextLine()
  • 原文地址:https://www.cnblogs.com/j1551163790/p/11692007.html
Copyright © 2020-2023  润新知