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语言代码

    运行结果

    嵌入汇编代码

    运行结果:

  • 相关阅读:
    about_并查集
    MST_prim
    MST_kruskal
    物联网的未来:关于物联网的10个预测
    如何展现云计算安全领导力
    虚拟机发展依然强劲,但会被容器取代吗?
    如何从人工智能部署中获取最大价值
    维特根斯坦:为何夸大人工智能是对人性的贬损?
    区块链技术还在不断创新
    区块链真正能用来干什么?这5件事说清楚了
  • 原文地址:https://www.cnblogs.com/huyufeng/p/5299170.html
Copyright © 2011-2022 走看看