【操作系统】第二章:OS的启动和中断、异常、系统调用(二)

简介: 【操作系统】第二章:OS的启动和中断、异常、系统调用

正文


异常(Exception)的处理过程


6da34ff9d57c13a90b7b2fe2188e32df_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

异常与中断不同,异常也是因为某个特定的指令触发了异常事件,比如除0操作。他也会有一个异常的ID,然后OS会根据这个ID保存现场(当前执行进度、这条指令地址、当前寄存器的内容等)。保存之后操作系统会根据ID进行相应处理,分为两种:


退出执行(杀死)或者重新执行[OS认为这个程序的异常原因是因为OS的服务不到位,OS会进行一定的弥补工作,然后根据刚才异常产生的现场进行恢复,让应用程序重新执行。由于OS已经将把他产生异常的原因补完,所以就不会再次产生异常,这个过程和中断相同,对应用程序是透明的。APP感受不到某条特殊指令会产生异常。


系统调用System Call


daf91a9648017e9802c473a843faa17b_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

来源于APP,需要OS提供服务,而这些服务APP不能直接执行,需要OS来执行。这些过程需要一些接口,这些接口我们称为系统调用接口。有这些接口,OS就能给我们提供各种服务。

Ex)

……………………
printf("Helloworld!");
……………………


这条指令是打印一串字符串。这条指令最终会触发一个write()系统指令。write系统调用会带一些参数,这些参数包含了要让哪个设备来显示这个字符串以及字符串的内容。很明显操作系统在获取这个参数后会访问对应的设备,比如这里就是我们的屏幕。着整个过程是操作系统完成的而不是应用程序完成的,应用程序只能发出请求。当OS完成这个请求,它会返回一个成功或者失败让APP知道,然后APP进行后续的执行工作。

上图中的右子图是一个通用接口,通过这个借口,APP可以完成各种各样的功能,对整个计算机系统进行间接的管理和控制。

为了方便应用程序能够使用OS的系统调用接口,产生了很多定义好的API。

详见下图

8418d802c90e45b7250001865d3838b5_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

POSIX:通用可移植的标准。遵循这个标准的OS,同一个程序可以跨平台执行。

JAVA API:不是系统调用,那些API只是Java虚拟机提供的支持,是由库来实现的。最终还是根据环境不同(WIN/LINUX环境)应用其他API来实现OS功能。


系统调用的实现


对于应用程序(APP),它只需要知道这个系统调用能提供什么样的功能,他的接口是什么,参数是怎么定义的就可以了。但是从操作系统的角度来说。

英文原图:

0facee361c7c0b550051c420c788e342_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

f87313f2411795772c23a35fc8bb1a05_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

APP会直接或者间接通过库(Library)来访问系统调用的接口,一旦访问API。会触发一个从用户态到内核态的转变。


用户态:应用程序 执行过程中,CPU处于一个特权级的状态。他的特权级非常低,不能够直接访问某些特殊的机器指令和直接访问IO。

内核态:OS运行过程中CPU所处于的一个状态,这个状态下OS可以执行任何一种指令,这使得安全性得到保障。


System Call Interface阶段:当我们应用程序调用一个系统调用时,完成一个用户态到内核态的装换,控制权从APP转到OS。

那么OS可以对应用程序发出的这些系统调用的参数(ID)做出标识,作出标识后,就可以对这个系统调用进行识别和完成具体的服务。


函数调用和系统调用的区别


当应用程序发出函数调用,其实是在一个栈空间完成的参数的传递和返回。

但是系统调用的执行过程中,我们的应用程序和操作系统拥有各自的堆栈,当APP发出系统调用之后,当他切换到内核里执行的时候,需要切换堆栈同时也需要完成特权级的转换 (用户态到内核态)。这些转换都会需要一定的开销,也就意味着当系统调用时,开销会比函数调用大很多。


开销


f87313f2411795772c23a35fc8bb1a05_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

由图可知,三种操作都跨越了APP和OS和外设的边界,跨越边界都有一定的代价。跨越边界是为了更加安全、可靠地执行各种上级程序。

5b4c0e74fb9df2be656391157ed2e4d0_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png映射关系的开销

表:

指令 对应服务历程
中断号x y1
异常号x y2
系统调用号x y3

为了让中断/异常/系统调用进行处理,首先要有一个对应的映射关系。(对应的系统调用号、中断号对应的哪一个服务历程,这个表要在能够让他正常工作之前就建好。OS初始环节就需要把这个表做好)


内核堆栈的开销

操作系统有自己的堆栈,不能和程序堆栈混淆。这样维护堆栈的开销也是必须的。(退出时保存堆栈,执行时堆栈恢复等)。同理,APP的执行到内核里执行时,需要保存APP的堆栈信息,当内核操作完成后,返回到APP又需要用到APP的堆栈信息。

验证参数的开销

操作系统不信任我们的应用程序,他会认为APP会有恶意程序的存在。所以OS在运行APP之前会进行一个安全检查,这个检查当然也会有开销。


内核态映射到用户态的开销

操作系统处理完某些数据后,会把这些数据从内核态拷贝到用户态,这个过程会有新的开销。不像应用程序内指针传递那样简单,他必须要把内核空间的数据拷贝到用户空间。


内核态的独立地址空间的开销

随着应用程序执行,有可能会引起内存状态的改变(后续课程详解)。比如页机制的转变,关于CPU的Cache(闪存)和TLB有可能会被刷新。这个刷新过程会导致额外的开销。


关于Cache和TLB相关内容请参考CSA(计算机组成原理对应章节)

小结:

这些都因为执行中断、异常、系统调用过程中可能会带来的开销,但是这些开销是必须的,有这些开销的存在才能保证OS在安全可靠的环境下运行。



目录
相关文章
|
22天前
|
运维 自然语言处理 Ubuntu
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot 是阿里云推出的一款操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行和系统运维调优等功能。通过简单的命令行操作,用户可以快速获取所需信息并执行任务,极大提升了Linux系统的使用效率。安装步骤简单,只需在阿里云服务器上运行几条命令即可完成部署。使用过程中,OS Copilot不仅能帮助查找命令,还能处理文件和复杂场景,显著节省了查找资料的时间。体验中发现,部分输出格式和偶尔出现的英文提示有待优化,但整体非常实用,特别适合Linux初学者。
98 10
|
27天前
|
移动开发 运维 前端开发
操作系统智能助手OS Copilot新功能
我是一名公司前端开发人员,专注于官网和H5页面的开发,涵盖页面构建、交互逻辑及性能优化。主要负责静态和移动端页面开发,不直接涉及云资源运维,但在项目部署时会接触云服务器。 关于Copilot的使用体验:安装过程顺畅,目前功能较少,建议增加更多功能和中文支持。核心功能包括-t代理模式(实现黑客帝国代码瀑布效果但未达预期)、-f读取文件(生成随机字符接近目标但仍需改进)和管道功能(稳定性欠佳)。总体而言,-t/-f选项实用,管道功能需完善。
|
12天前
|
存储 人工智能 编译器
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
33 10
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
9天前
|
前端开发 JavaScript 开发工具
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
52 5
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
12天前
|
JavaScript 编译器 开发工具
【02】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-准备工具安装-编译器DevEco Studio安装-arkts编程语言认识-编译器devco-鸿蒙SDK安装-模拟器环境调试-hyper虚拟化开启-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【02】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-准备工具安装-编译器DevEco Studio安装-arkts编程语言认识-编译器devco-鸿蒙SDK安装-模拟器环境调试-hyper虚拟化开启-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
34 2
【02】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-准备工具安装-编译器DevEco Studio安装-arkts编程语言认识-编译器devco-鸿蒙SDK安装-模拟器环境调试-hyper虚拟化开启-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
15天前
|
安全 前端开发 开发工具
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
51 5
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
|
9天前
云产品评测|操作系统智能助手OS Copilot新功能获奖名单公布!
云产品评测|操作系统智能助手OS Copilot新功能获奖名单公布!
|
27天前
|
运维 前端开发 应用服务中间件
操作系统智能助手OS Copilot新功能
作为一名公司的研发人员,我体验了OS Copilot的安装与使用。尽管我的工作主要涉及前后端开发,对云服务有一定了解。OS Copilot的安装过程直观顺利,但目前支持的操作系统较少。通过-t和-f功能,可以快速测试命令输出、处理批量任务及调试脚本,显著提升了工作效率。然而,管道功能在实际应用中存在识别文件路径的问题,有待改进。总体而言,OS Copilot极大地提高了我的运维效率,并成为开发中的有效工具,我对它的未来潜力充满信心。
48 11
|
4月前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
135 0
Vanilla OS:下一代安全 Linux 发行版
|
2月前
|
弹性计算 自然语言处理 Ubuntu
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot是由阿里云推出的操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行等功能,极大提升了Linux系统的使用效率。用户只需通过简单的命令或自然语言描述问题,OS Copilot即可快速提供解决方案并执行相应操作。例如,查询磁盘使用量等常见任务变得轻松快捷。此外,它还支持从文件读取复杂任务定义,进一步简化了操作流程。虽然在某些模式下可能存在小问题,但总体上大大节省了学习和操作时间,提高了工作效率。
149 2
OS Copilot-操作系统智能助手-Linux新手小白的福音

热门文章

最新文章