zoukankan      html  css  js  c++  java
  • 系统调用的工作机制

    系统调用

    何为系统调用:

    系统调用是操作系统为用户态进程与硬件设备进行交互提供的一组接口。

    系统调用的意义:

    • 把用户从底层的硬件编程中解放出来
    • 极大地提高了系统的安全性
    • 使用户程序具有可移植性

    何为API:

    应用编程接口(application program interface),和系统调用是不同的。

    API与系统调用:

    不是每个API都对应一个特定的系统调用。

    • API可能直接提供用户态的服务,如,一些数学函数
    • 一个单独的API可能调用了几个系统调用
    • 不同的API可能调用了同一个系统调用

    系统调用例程及服务例程:

    当用户态进程调用一个系统调用时,CPU切换到内核态并开始执行一个内核函数。

    传参:

    系统调用号被用来指明需要的系统调用,使用eax寄存器。

    系统调用也需要输入输出参数:

    • 实际的值
    • 用户态进程地址空间的变量的地址
    • 甚至是包含指向用户态函数的指针的数据结构的地址

    系统调用三层皮:

    • API
    • 中断向量
    • 中断服务程序
    1. 当用户态进程调用一个系统调用时,CPU切换到内核态并开始执行一个内核函数。

    2. Linux中是通过执行int $0x80来执行系统调用,这条汇编指令产生向量为128的编程异常 —— 即中断向量0x80与System_call绑定起来。

    3. 系统调用号将函数xyz()和中断服务程序sys_xyz关联起来。

    实验:

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

    选取了20号系统调用getpid

    使用man查看getpid的说明

    c语言代码

    运行结果

    嵌入汇编代码

    运行结果:

  • 相关阅读:
    Wiin10 深色模式 暗色 省电 经济 护眼dark mode energy saving ecol
    云主机终端现实中文
    systemctl enable与systemctl start的区别
    centos技巧
    用国内的vps登录亚马逊的ec2
    小米 redmi note 8 打开开发者选项
    javascript数组、对象和Null的typeof同为object,区分解决办法
    组件中是否可以判断slot是否有内容?
    xlsx-style 行高设置
    修改xlsx-style 源码 解决报错
  • 原文地址:https://www.cnblogs.com/huyufeng/p/5299170.html
Copyright © 2011-2022 走看看