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

    《Linux内核分析》

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

    4.1 用户态、内核态和中断

    • 与系统调用打交道的方式是通过库函数的方式
    • 用户态与内核态的区分
      • 内核态:高的执行级别下,代码可以执行特权指令,访问任意的物理内存
      • 用户态:低级别指令
    • 系统调用也是一种中断
      • 中断处理是从用户态进入内核态的主要方式
      • 当用户态切换到内核态时,就要把用户态寄存器上下文保存起来,同时要把内核态的寄存器的值放到当前CPU中

    4.2 系统调用概述

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

    4.2.1 操作系统提供的API和系统调用的关系

    • API:应用程序编程接口
      • 只是函数定义
      • 系统调用时通过软中断向内核发出了中断请求
    • libc函数库定义的一些API内部使用了系统调用的封装例程,唯一目的是发布系统调用
      • 每个系统调用对应一个系统调用的封装例程
      • 函数库再用这些封装例程定义出给程序员调用的API
    • 不是每个API都对应一个特定的系统调用(一对一,一对多,多对一)
    • 返回值
      • 大多数系统调用的封装例程返回一个整数,其值的含义依赖于对应的系统调用
      • 返回值-1在多数情况下表示内核不能满足进程的请求
      • libc中进一步定义的errno变量包含特定的出错码

    4.2.2 出发系统调用及参数传递方式

    • 当用户态进程调用一个系统调用时,CPU切换到内核态并开始执行一个system_call和系统调用内核函数
    • 传参
      • 内核实现了很多不同的系统调用
      • 使用EAX寄存器传递一个名为系统调用号的参数

    4.3 使用库函数API和C代码中嵌入汇编代码触发同一个系统调用

    4.3.1 使用库函数API触发一个系统调用

    • 代码
    #include<stdio.h>
    #include<sys/types.h>
    int main(void)
    {
        int u_id;
        printf("%u
    ",u_id);
        return 0;
    }
    
    • 运行截图

    4.3.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
    	"      //将系统调用执行后的返回值赋给变量tt
                :"=m"(u_id)  
                );
        printf("%u
    ",u_id);
        return 0;
        }
    
    • 运行截图

  • 相关阅读:
    Spark:大数据的“电光石火”
    Android开发-取消程序标题栏或自定义标题栏
    Android中实现圆角矩形及半透明效果。
    Android中设定背景图片平铺。
    收到的电邮附件为Winmail.dat?
    Runas命令:能让域用户/普通User用户以管理员身份运行指定程序。
    AD域服务器|两台DC无法进行复制同步
    IIS服务器运行一段时间后卡死,且无法打开网站(IIS管理无响应,必须重启电脑)
    Outlook不能打开附件(提示:无法创建文件xx,请右键单击要在其中创建文件的文件夹..)
    点击自动显示/隐藏DIV代码。(简单实用)
  • 原文地址:https://www.cnblogs.com/hsj910/p/11677494.html
Copyright © 2011-2022 走看看