Linux系统调用

一、概述

        现代操作系统中,内核提供了用户进程与内核进行交互的一组接口。这些接口让应用程序受限地访问硬件设备,提供了创建新进程并与已有进程进行通信的机制,也提供了申请操作系统其它资源的能力。这些接口就称为系统调用接口,Linux系统也提供了类似的接口,用来完成应用程序到内核的访问。


二、系统调用的作用

  1. 它为用户控件提供了一种硬件的抽象接口。
  2. 系统调用保证了系统的稳定和安全。
  3. 提供了进程地址空间的保护,是的每个应用程序都工作在自己的虚拟空间,从而隔离物理地址的访问。
三、接口设计格言——提供机制而不是策略
        应用程序一般不会直接调用系统调用,而是调用一些应用程序接口(API),比如C库提供的一些API。应用程序只跟API打交道,不关心系统调用,同样系统调用只跟内核打交道,不关心应用程序如何调用系统调用。这就是典型的策略与机制分离的设计思想,内核只负责设计机制,而是用的策略由应用程序来设计。

四、系统调用相关
        1. 系统调用实现了以下步骤:陷入内核,传递系统调用号和参数,执行系统调用并返回值给用户空间。
        2. 系统调用需要关联到系统调用号,Linux为每个系统调用分配唯一系统调用号,一旦确定就不再更改,即使是删除了某个系统调用,也需保持其调用号而不影响其它。
        3. 系统调用运行在内核空间,也即运行在当前进程上下文,current指针指向当前进程,也正因为如此,系统调用也可实现休眠,并且可被其它进程抢占,所以要注意系统调用的设计实现。调用结束返回到当前进程用户空间。
        4. 系统调用会对传入的参数进行严格的检验,尤其是指针。
        5. 系统调用的实现虽然比较简单,看驱动开发工程师都不会去实现一个新的系统调用,而是采用其它的方法来实现类似的访问,比如实现一个设备节点,通过ioctl来进行read、write。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值