zoukankan      html  css  js  c++  java
  • 2019-2020-1 20199315《Linux内核原理与分析》第五周作业

    《庖丁解牛Linux内核分析》第四章

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

    用户态、内核态和中断

    系统调用在操作系统中的位置示意图:

    Intelx86 CPU有4中不同的执行级别,分别是0、1、2、3,数字越小,特权越高。Linux操作系统中只是采用了其中的0和3两个特权级别,分别对应内核态和用户态。
    用户态和内核态很显著的区分方法是CS:EIP的指向范围,内核态时,CS:EIP的值可以是任意的地址,在32位的x86机器中有4GB的进程地址空间,内核态下的这4GB的地址空间都可以访问;用户态下则只能访问0x00000000-0xbfffffff的地址空间。

    系统调用也是一种中断,中断处理是从用户态进入内核态的主要方式。

    系统调用概述

    系统调用的意义是操作系统为用户态进程与硬件设备进行交互提供了一组接口。系统调用有以下功能和特性:
    1.把用户从底层的硬件编程中解放出来
    2.极大地提高系统的安全性
    3.使用户程序具有可移植性

    实验楼实验四

    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
    ",u_id);
        return 0;
    }
    
    
    

    运行结果:

    2.C代码中嵌入汇编代码出发一个系统调用

    源代码如下:

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

    运行结果:

    此为本人Linux学习第五周的内容,如有不足,还请批评指正,不胜感激。

    以上

  • 相关阅读:
    TP5.1 分页CSS样式(转载)
    简单的layui二级联动
    关于layui部分表单不显示的问题(Select, checkBox)
    MySQL 开启远程访问权限 | 宝塔系统
    tp5.1 本地正常, 线上route.php不起作用的问题
    cocos自动图集
    微信小程序video
    nuxt https
    接口数据加密
    node里读取命令行参数
  • 原文地址:https://www.cnblogs.com/qianxiaoxu/p/11706743.html
Copyright © 2011-2022 走看看