装载、链接与库——系统调用

*昨天总结了main函数前世今生的问题,跟着源码一步步看。。。今天来看看系统调用是什么。。。→_→*

系统调用(System Call)是应用程序与操作系统与内核之间的接口

  1. 系统调用(System Call)的定义

    • 现代操作系统将可能产生冲突的系统资源(包括文件、I/O等设备)保护起来,阻止应用程序直接访问

    • 为了让应用程序有能力访问系统资源,也为了让程序借助操作系统做一些必须由操作系统支持的行为,每个操作系统都提供一套接口,以供应用程序使用

    • 这些接口往往通过中断实现,比如Linux使用0x80号端口作为系统调用的入口,Windows采用0x2E号中断作为系统调用入口

  2. 系统调用的弊端

    • 使用不便:操作系统提供的系统调用接口过于原始,没有进行很好的包装,使用起来不方便

    • 各个操作系统之间调用不兼容

    • 解决方法:运行库作为系统调用与程序之间的抽象层,可以简化使用,统一形式

    • 运行时库将不同的操作系统的系统调用包装成统一固定的接口,使得同样的代码在不同的操作系统下都可以直接编译并产生一致的效果,即源代码级别上的可移植性

  3. 系统调用的原理

    • 现代操作系统中通常有两种特权级别:用户态(User Mode)和内核态(Kernel Mode)。操作系统根据不同的特权,使不同的代码运行在不同的模式上以限制其权利,提高稳定性和安全性

    • 系统调用是运行在内核态的,而应用程序基本都是运行在用户态的

    • 操作系统一般通过中断(Interrupt)来从用户态切换到内核态

    • 中断是一个硬件或软件发出的请求,要求CPU暂停当前的工作转手去处理更重要的事情。中断一般具有两个属性,一个称为中断号(从0开始),一个称为中断处理程序(Interrupt Service Routine, ISR)不同的中断具有不同的中断号,而中断处理程序又与中断号一一对应。在内核中,有一个数组称为中断向量表(Interrupt Vector Table)这个数组的第n项包含了指向第n号中断的中断处理程序指针

    • 当中断到来时,CPU会暂停执行当前执行的代码,根据中断的中断号,在中断向量表中找到对应的中断处理程序,并调用它。中断处理程序执行完成之后,CPU会继续执行之前的代码

      CPU中断过程

  4. Linux系统调用流程

    • 在x86下,系统调用由0x80中断完成,各个通用寄存器用于传递参数,EAX寄存器用于表示系统调用的接口号。当系统调用返回时,EAX寄存器又作为调用结果的返回值

    • 每个系统调用都对应于内核源代码中的一个函数,他们都以“sys_”开头。(定义路径:linux-2.4.0\include\as

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值