linux系统调用的来龙去脉(上)

一口Linux 2022-05-23 11:50

击上方“一口Linux”,选择“置顶/星标公众号


干货福利,第一时间送达!


作者:头条 程序猿李巍


《linux系统调用的来龙去脉》分为上下两篇,本文为上篇。

1.前言

开始正题前先讲两个生活小案例来引出系统调用的意义。

案例一:图书馆

安居不用架高堂,书中自有黄金屋。娶妻莫恨无良媒,书中自有颜如玉。

图书馆是我喜欢去的一个地方,相信大家也都去过。在图书馆我们可以自由阅读任何书,广泛地汲取各种知识。正是由于所有人都可以自由地阅读任意书籍,所以经常就会出现书籍位置出现错乱,书籍页面出现损坏,甚至还会出现书籍遗失的情况。


实例二:收藏馆
价值连城的艺术品往往存放在特定温度和湿度的存储柜中,为了确保艺术品的安全,通常将它们存放到安全级别很高的收藏馆中。如果客户希望参观它们,先需要提交申请,进入收藏馆后,由专门的人员拿出艺术品供客户参观欣赏。这样保证了艺术品不受破坏,也保证了艺术品的安全。



根据上述两个例子得出以下结论:
如果每个用户都能自由使用“
资源”,随着时间的推移,“资源”就会出现损坏。
如果“
资源”由“专业人员”管理,每个用户只能间接的使用“资源”,这样就可以安全的长久的使用“资源”。

2.如何保证系统安全性

操作系统提供给应用程序运行环境,让各种应用得以运行。在应用程序运行过程中有些操作是非常危险的,如果每个应用程序都能自由进行任何操作,就有可能带来如下各种问题:

1、多个应用程序直接去操作硬件外设,就会出现相互冲突,可能会出现需要应用程序A的读取数据,被应用程序B读取的情况。

2、多个应用程序被加载到内存,应用程序A占用了一个内存区域Z,应用程序B自己强制清空内存区域Z,那么就给应用程序A带来致命问题。

3、部分应用程序需要硬件中断让自己在合适的时机开始执行,如果其它应用程序把中断关掉,那么这些依靠中断触发的应用程序将再也得不到执行。


在应用程序运行过程中有些危险的操作将会对其它应用程序造成伤害,甚至会对操作系统造成伤害,导致系统崩溃。如果所有应用程序都可以使用这些操作,那么整个系统将是不稳定的,不安全的

如何防止应用程序对其它应用程序和操作系统造成伤害?

造成这种问题的原因是每个应用程序都可以自由的使用关键“资源”,这就类似上文提到的图书馆模式,每个人都可以自由阅读所有书籍,所以容易出现书籍损坏(影响其它人阅读)。

为了让应用程序都能正常运行不受其它应用程序伤害,为了系统能安全,稳定的长久运行,系统需要使用收藏馆模式。在收藏馆模式下关键“资源”由“专业人员”管理,每个应用程序只能间接的使用“资源”。

3.特权级

为了让系统系统能安全,稳定的长久运行,必须有一个有特权的“专业人员”对核心资源进行管理,那么就带来两个问题:
1、专业人员的特权是什么?
2、如何获取特权?

特权是啥?
计算机的硬件和软件是共同在发展,为了适应操作系统,处理器发展出两种权限模式:
用户模式和特权模式。
以ARM V7 体系架构为例,为了提高稳定性,ARM V7 体系处理器有7种运行模式,每种运行模式的使用权限不一样,有六种特权模式和一种用户模式,如下图所示:



由图可知:FIQ,IRQ,SVC,ABT,UND,SYS这六种模式是特权模式,USR是用户模式。
在用户模式下有些指令是无法操作的,如进行MMU或cache的操作,在特权模式下任何指令都是可以操作的

这就回答了第一个问题“专业人员的特权是什么”,“专业人员”可以使用处理的特权模式,这样“专业人员”就可以在处理器上进行任何操作。而应用程序则在用户模式下,只运行在处理器上进行部分操作。在ARM V7 体系架构种SVC模式是为“专业人员”提供的特权模式。

如何获取特权?

硬件中断是在电平变化时引发中断操作,而软中断是通过一条具体指令SWI,当CPU执行到SWI指令时会触发中断,进入中断程序(中断模式是特权模式)。

以ARM V7 体系架构为例,软件中断指令(SVC)用于产生软中断,实现从用户模式变换到特权模式。



SVC汇编指令如下:

SVC  {cond}  immed_24
//其中immed_24 24位立即数,值为从0~16777215之间的整数。

这就回答了第二个问题“如何获取特权?”,使用软件中断指令进入中断,“专业人员”在中断模式下,中断模式也是特权模式。

总结:为了让系统系统能安全,稳定运行,重要资源有“专业人员”操作,应用程序可以通过软中断指令“召唤”“专业人员”来完成相关操作


4.内核态

在计算机软件系统中包含一个名为操作系统的程序集合,在这个程序集合包括内核,设备驱动程序,启动引导程序,shell程序,文件管理工具等,其中最重要的程序称为内核(kernel)计算机的软件系统的模式和能力由内核决定,内核为操作系统中的所有事物提供了主要的功能,同时决定了上层应用软件的很多特性。



用户界面和应用程序是操作系统的外在表象,
内核才是操作系统的内在核心!系统的其它部分必须依赖内核这个程序。
通俗的描述就是:
内核是操作系统中最重要的一个程序!操作系统中的其它程序都依赖这个内核程序!



内核为何如此重要?内核在操作系统中完成了以下
两个重要功能
1、与计算机硬件交互。
2、为计算机系统中的应用程序提供执行环境。


内核可以被称作管理者,因此前文说到的“专业人员”就是指的内核。内核运行在计算机的特权模式下,这样使得内核有了“无所不能”的能力,通常我们将运行在特权模式下的内核称为“内核态”,运行在用户模式的用户程序称为“用户态”。内核拥有特权,无所不能,系统的其它部分都依赖内核,操作系统中内核就是一个王者般的存在。


5.系统调用

为了保证操作系统的安全性,比如创建进程或者硬件交互这种操作不能由应用程序去完成,而必须让操作系统内核来完成。但是应用程序就有比如创建进程或者硬件交互这种操作需求,如何满足应用程序的需求?
系统调用提供了应用程序和操作系统之间的接口,应用程序通过系统调用实现其与操作系统的通信,并可取得操作系统的服务。



当应用程序中需要操作系统提供服务时,如创建进程或执行 I/O 操作,应用程序必须使用系统调用。处理器捕获到该命令后,
便将处理器的状态从用户态转换为内核态(特权模式),然后操作系统在特权模式下执行相应的程序,执行完成后,系统又将处理器状态从内核态转换到用户态,继续执行应用程序。

系统调用是应用程序请求操作系统内核完成某功能的一种过程调用,它与一般的过程调用的最大差别:

1.状态不同。一般的过程调用其调用程序和被调用程序运行在相同的状态,而系统调用是调用程序是运行在用户态,而被调用程序是运行在内核态态。
2.
状态转换。由于系统调用的调用和被调用过程工作在不同的系统状态,因而不能由调用过程直接转向被调用过程,需要通过软中断机制。用户态触发中断,处理器产生中断,系统切换到内核态(特权态),经操作系统内核根据传入的调用号,执行相应的系统调用处理程序。

系统调用本质上是应用程序请求操作系统内核完成某功能时的一种过程调用。通俗的说法就是遇到事情叫大哥出马!


6.系统调用模型

由于linux系统调用比较复杂,因此我们先讲述系统调用的模型,然后再讲述linux的系统调用实现。
系统调用的本质是:
应用程序请求操作系统内核完成某个功能。



我们根据系统调用的本质,将系统调用分解成如下
三板斧
第一板斧:系统调用请求。
应用程序可以根据自身需求自由调用系统请求,应用程序传递参数给系统调用请求函数,在系统调用请求函数内部,通过指令触发软中断。以ARM V7A 体系架构为例,软件使用SVC指令产生软中断。

第二板斧:处理器响应请求进入特权模式。
由于在系统调用请求函数内部执行软中断指令,此时处理器暂停当前用户程序,进入软中断函数,此时处理器进入特权模式,在中断函数中完成一些准备工作后,执行功能函数。

第三板斧:在特权模式下内核完成某个功能。
一个特定功能的函数被软中断函数调用,执行功能函数期间处理器处于特权模式下。

系统调用的三板斧模型如下:



根据系统调用模型,用C语言实现一个简单的系统调用,C语言代码实例如下:



实现的3个函数功能如下:
request函数是一个调用接口函数,实现软中断触发功能。
irq_handler函数为软中断响应函数,该函数主要是完成调用功能函数。
function函数为在内核态实现的特定功能。

C语言实现的系统调用的基本模型的调用流程如下:



上述这个简单的系统调用,
实现了一个具体功能为function函数的系统调用,并且这个系统调用只有一个功能函数,实现了从零到一的过程
接下来增加难度,
不是只实现1个具体功能,而是要实现10个功能,如何实现?



两种策略可以实现多个功能的系统调用:
策略1使用多个软中断,每个软中断函数执行一个功能函数


策略2使用一个软中断,在软中断函数中根据传入的参数,执行不同的功能函数



对比上述两种策略:
策略1使用多个软中断,这种模式每个软中断对应一个功能函数,这样
系统响应速度会快一些,但是劣势非常明显,系统调用的数量直接受处理器硬件影响,系统移植性较差

策略2使用一个软中断,这种方式在触发软中断时向软中断函数传入一个调用号,在中断中函数中根据调用号执行指定的功能函数,由于多进行了一些操作,系统响应速度会慢一点,但是优势也非常明显,系统调用的个数几乎不受限制,对处理器硬件要求低,系统移植性强

Linux系统调用就是使用的策略2,综上所述系统调用可以拆分为以下3个基本要素
1、调用请求,传入参数和调用号,触发软中断。
2、响应请求,进入中断函数,根据调用号执行指定的功能函数
3、功能实现,在内核态下实现特定功能。

end



一口Linux 


关注,回复【1024】海量Linux资料赠送

精彩文章合集

文章推荐

【专辑】ARM
【专辑】粉丝问答
【专辑】所有原创
专辑linux入门
专辑计算机网络
专辑Linux驱动
【干货】嵌入式驱动工程师学习路线
【干货】Linux嵌入式所有知识点-思维导图


点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看

一口Linux 写点代码,写点人生!
评论
  • 戴上XR眼镜去“追龙”是种什么体验?2024年11月30日,由上海自然博物馆(上海科技馆分馆)与三湘印象联合出品、三湘印象旗下观印象艺术发展有限公司(下简称“观印象”)承制的《又见恐龙》XR嘉年华在上海自然博物馆重磅开幕。该体验项目将于12月1日正式对公众开放,持续至2025年3月30日。双向奔赴,恐龙IP撞上元宇宙不久前,上海市经济和信息化委员会等部门联合印发了《上海市超高清视听产业发展行动方案》,特别提到“支持博物馆、主题乐园等场所推动超高清视听技术应用,丰富线下文旅消费体验”。作为上海自然
    电子与消费 2024-11-30 22:03 98浏览
  • 当前,智能汽车产业迎来重大变局,随着人工智能、5G、大数据等新一代信息技术的迅猛发展,智能网联汽车正呈现强劲发展势头。11月26日,在2024紫光展锐全球合作伙伴大会汽车电子生态论坛上,紫光展锐与上汽海外出行联合发布搭载紫光展锐A7870的上汽海外MG量产车型,并发布A7710系列UWB数字钥匙解决方案平台,可应用于数字钥匙、活体检测、脚踢雷达、自动泊车等多种智能汽车场景。 联合发布量产车型,推动汽车智能化出海紫光展锐与上汽海外出行达成战略合作,联合发布搭载紫光展锐A7870的量产车型
    紫光展锐 2024-12-03 11:38 103浏览
  • 艾迈斯欧司朗全新“样片申请”小程序,逾160种LED、传感器、多芯片组合等产品样片一触即达。轻松3步完成申请,境内免费包邮到家!本期热荐性能显著提升的OSLON® Optimal,GF CSSRML.24ams OSRAM 基于最新芯片技术推出全新LED产品OSLON® Optimal系列,实现了显著的性能升级。该系列提供五种不同颜色的光源选项,包括Hyper Red(660 nm,PDN)、Red(640 nm)、Deep Blue(450 nm,PDN)、Far Red(730 nm)及Ho
    艾迈斯欧司朗 2024-11-29 16:55 175浏览
  • 作为优秀工程师的你,已身经百战、阅板无数!请先醒醒,新的项目来了,这是一个既要、又要、还要的产品需求,ARM核心板中一个处理器怎么能实现这么丰富的外围接口?踌躇之际,你偶阅此文。于是,“潘多拉”的魔盒打开了!没错,USB资源就是你打开新世界得钥匙,它能做哪些扩展呢?1.1  USB扩网口通用ARM处理器大多带两路网口,如果项目中有多路网路接口的需求,一般会选择在主板外部加交换机/路由器。当然,出于成本考虑,也可以将Switch芯片集成到ARM核心板或底板上,如KSZ9897、
    万象奥科 2024-12-03 10:24 68浏览
  • 最近几年,新能源汽车愈发受到消费者的青睐,其销量也是一路走高。据中汽协公布的数据显示,2024年10月,新能源汽车产销分别完成146.3万辆和143万辆,同比分别增长48%和49.6%。而结合各家新能源车企所公布的销量数据来看,比亚迪再度夺得了销冠宝座,其10月新能源汽车销量达到了502657辆,同比增长66.53%。众所周知,比亚迪是新能源汽车领域的重要参与者,其一举一动向来为外界所关注。日前,比亚迪汽车旗下品牌方程豹汽车推出了新车方程豹豹8,该款车型一上市就迅速吸引了消费者的目光,成为SUV
    刘旷 2024-12-02 09:32 119浏览
  •         温度传感器的精度受哪些因素影响,要先看所用的温度传感器输出哪种信号,不同信号输出的温度传感器影响精度的因素也不同。        现在常用的温度传感器输出信号有以下几种:电阻信号、电流信号、电压信号、数字信号等。以输出电阻信号的温度传感器为例,还细分为正温度系数温度传感器和负温度系数温度传感器,常用的铂电阻PT100/1000温度传感器就是正温度系数,就是说随着温度的升高,输出的电阻值会增大。对于输出
    锦正茂科技 2024-12-03 11:50 111浏览
  • RDDI-DAP错误通常与调试接口相关,特别是在使用CMSIS-DAP协议进行嵌入式系统开发时。以下是一些可能的原因和解决方法: 1. 硬件连接问题:     检查调试器(如ST-Link)与目标板之间的连接是否牢固。     确保所有必要的引脚都已正确连接,没有松动或短路。 2. 电源问题:     确保目标板和调试器都有足够的电源供应。     检查电源电压是否符合目标板的规格要求。 3. 固件问题: &n
    丙丁先生 2024-12-01 17:37 102浏览
  • 光伏逆变器是一种高效的能量转换设备,它能够将光伏太阳能板(PV)产生的不稳定的直流电压转换成与市电频率同步的交流电。这种转换后的电能不仅可以回馈至商用输电网络,还能供独立电网系统使用。光伏逆变器在商业光伏储能电站和家庭独立储能系统等应用领域中得到了广泛的应用。光耦合器,以其高速信号传输、出色的共模抑制比以及单向信号传输和光电隔离的特性,在光伏逆变器中扮演着至关重要的角色。它确保了系统的安全隔离、干扰的有效隔离以及通信信号的精准传输。光耦合器的使用不仅提高了系统的稳定性和安全性,而且由于其低功耗的
    晶台光耦 2024-12-02 10:40 120浏览
  • TOF多区传感器: ND06   ND06是一款微型多区高集成度ToF测距传感器,其支持24个区域(6 x 4)同步测距,测距范围远达5m,具有测距范围广、精度高、测距稳定等特点。适用于投影仪的无感自动对焦和梯形校正、AIoT、手势识别、智能面板和智能灯具等多种场景。                 如果用ND06进行手势识别,只需要经过三个步骤: 第一步&
    esad0 2024-12-04 11:20 58浏览
  • 学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&
    youyeye 2024-11-30 14:30 78浏览
  • 11-29学习笔记11-29学习笔记习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-02 23:58 73浏览
  • 《高速PCB设计经验规则应用实践》+PCB绘制学习与验证读书首先看目录,我感兴趣的是这一节;作者在书中列举了一条经典规则,然后进行详细分析,通过公式推导图表列举说明了传统的这一规则是受到电容加工特点影响的,在使用了MLCC陶瓷电容后这一条规则已经不再实用了。图书还列举了高速PCB设计需要的专业工具和仿真软件,当然由于篇幅所限,只是介绍了一点点设计步骤;我最感兴趣的部分还是元件布局的经验规则,在这里列举如下:在这里,演示一下,我根据书本知识进行电机驱动的布局:这也算知行合一吧。对于布局书中有一句:
    wuyu2009 2024-11-30 20:30 125浏览
  • 概述 说明(三)探讨的是比较器一般带有滞回(Hysteresis)功能,为了解决输入信号转换速率不够的问题。前文还提到,即便使能滞回(Hysteresis)功能,还是无法解决SiPM读出测试系统需要解决的问题。本文在说明(三)的基础上,继续探讨为SiPM读出测试系统寻求合适的模拟脉冲检出方案。前四代SiPM使用的高速比较器指标缺陷 由于前端模拟信号属于典型的指数脉冲,所以下降沿转换速率(Slew Rate)过慢,导致比较器检出出现不必要的问题。尽管比较器可以使能滞回(Hysteresis)模块功
    coyoo 2024-12-03 12:20 116浏览
  • 遇到部分串口工具不支持1500000波特率,这时候就需要进行修改,本文以触觉智能RK3562开发板修改系统波特率为115200为例,介绍瑞芯微方案主板Linux修改系统串口波特率教程。温馨提示:瑞芯微方案主板/开发板串口波特率只支持115200或1500000。修改Loader打印波特率查看对应芯片的MINIALL.ini确定要修改的bin文件#查看对应芯片的MINIALL.ini cat rkbin/RKBOOT/RK3562MINIALL.ini修改uart baudrate参数修改以下目
    Industio_触觉智能 2024-12-03 11:28 87浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦