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

    运行结果

    嵌入汇编代码

    运行结果:

  • 相关阅读:
    json字符串数组判断其中
    json字符串数组判断其中
    jquery select chosen禁用某一项option
    数据库培训知识
    人员管理模块代码总结2015/8/12整理
    正则表达式在STARLIMS中的应用总结
    控件属性表
    Form-公共代码
    Server-Script公共代码
    Celient-Script公共代码
  • 原文地址:https://www.cnblogs.com/huyufeng/p/5299170.html
Copyright © 2011-2022 走看看