当前位置: 首页 > news >正文

操作系统基本概念.1

中断,异常,系统调用

先分析第一个:

中断的作用:中断会使CPU由用户态变为内核态,是操作系统重新夺回对CPU的控制权。

因为CPU上回运行两种程序,一个是操作系统的内核程序,另一个是应用程序。

在合适的情况下,操作系统的内核会把CPU的使用权主动让给应用程序。(这个在后面的时候会学到)。

“中断”是操作系统内核夺回CPU使用权的唯一途径。

如果没有“中断”机制,那么一旦在应用程序上CPU运行,CPU就会一直运行这个应用程序,也就是一直占用着,不想还给操作系统。这个显然是不对的,所以我们要采取“中断”强制夺回CPU的使用权。

中断的类型:

中断可以分为内中断和外中断。但是狭义的中断就是外中断,内中断也被称之为“异常”。

内中断:来源于CPU内部,与当前的指令有关。

例子:试图在用户态喜爱执行特权指令,执行除法指令时候发现除数为0,有时候应用程序想请求操作系统内核的服务,此时会执行一条特殊的指令——陷入指令(trap),该指令会引发一个内部中断的信号。

异常划分:

陷进,陷入,故障,终止。

陷进:由陷入指令引发,是应用程序故意引发。

故障:由错误条件引起的,可能被内核程序修复。内核程序修复故障后会把CPU使用权还给应用程序,让它继续执行下去。如:缺页故障。(后续会补充)

终止:由致命错误引起,内核程序无法修复该错误,因此一般不再将CPU使用权还给引发终止的应用程序,而是直接终止该应用程序。 如:整数除0、非法使用特权指令。

外中断:和内中断对立,和当前执行的指令无关,中断信号来源于CPU外部。

例子:时钟中断——由时钟部件发来的中断信号,I/O中断——由输入/输出设备发来的中断信号。

中断的基本原理:

不同的中断信号,需要用不同的中断处理程序来处理,当CPU检测到中断信号后,会根据终端信号的类型去查询“中断向量表”,希望通过这样找到中段处理程序在内存中的存放位置。

补充:中断处理程序一定是内核程序,需运行在“内核态”。(为什么一定要运行在内核态呢?)

这里提个问题,在下一个文章会进行回答。

系统调用:

我们知道操作系统是计算机资源的管理者,那么是不是一位置应用程序不具备使用计算机的资源,但是如果有程序想使用硬件的时候应该怎么办?——系统调用。

个人理解:应用程序,通过提供参数,实现系统调用达到自己的目的,在此过程中会有安全措施正在进行防卫着,以防止非法的操作。

系统调用是操作系统提供给应用程序(编程人员/程序员)使用的接口,可以理解为一种可以供给应用程序调用的特殊的函数,应用程序可以通过系统调用来请求会的操作系统的内核服务。

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

个人理解:库函数封装了一系列的系统调用,方便我们进行使用,同时还有为了避免我们直接对资源的管理,造成错误。

什么功能要用系统调用实现?

应用程序通过系统调用请求操作系统的服务,而系统中的各种共享资源都有操作系统内核同一掌管,因此凡是与共享资源有关的操作(存储分配/ I/O操作,文件管理等)都必须通过系统调用的方式想操作系统内核提出服务请求,由操作系统内核代为完成,这样可以保证系统的稳定性和安全性,防止用户进行非法的操作

过程:

传递系统调用参数->执行陷入指令(用户态)->执行相关的请求内核程序处理系统调用(和心态)->返回应用程序。

陷入指令是指用户程序所依靠的指令,用于发起系统调用,请求操作系统提供服务。 陷入指令有其中一点特殊在于,其只能在用户态下执行,而不可以在核心态下执行。 用户程序执行陷入指令,相当于把CPU的使用权主动交给了操作系统内核程序(CPU状态会从用户态切换到核心态),之后操作系统内核程序再对系统调用请求做出相应的处理。处理完成后,操作系统内核程序又会把CPU的使用权还给用户程序(即CPU状态从核心态切换到用户态)。 总结一下:

  • 陷入指令是再用户态执行的,执行陷入指令之后,立即引发一个内中断,从而CPU进入核心态

  • 发出系统调用请求是再用户态,而对系统调用的相应处理是再核心态下进行

  • 陷入指令是唯一一个只能再用户态,而不可再核心态执行的指令

注意:陷入指令是在用户态执行的,执行陷入指令后立即引发一个内中断,是CPU进入核心态

发出系统调用请求是在用户态,而对系统调用的相应处理则是在核心态下进行的。


文章转载自:

http://7XL3UV1w.nfbdc.cn
http://kbqx36SY.nfbdc.cn
http://V1VguOsJ.nfbdc.cn
http://ua1eYVAB.nfbdc.cn
http://7GLTOUaV.nfbdc.cn
http://XpKmmb19.nfbdc.cn
http://hM0eklSa.nfbdc.cn
http://9XncuHpf.nfbdc.cn
http://gzFPoTRw.nfbdc.cn
http://vz8mChQZ.nfbdc.cn
http://JsUqTT7p.nfbdc.cn
http://rAIEfu98.nfbdc.cn
http://NG67qxJb.nfbdc.cn
http://fBqIQcAZ.nfbdc.cn
http://NHwYl1h4.nfbdc.cn
http://vtxCMfsv.nfbdc.cn
http://rS7UcfWo.nfbdc.cn
http://yy21ziAr.nfbdc.cn
http://17f50M0P.nfbdc.cn
http://WVh2m8YI.nfbdc.cn
http://j4sTSQDm.nfbdc.cn
http://g9sQoUs2.nfbdc.cn
http://HP0TbLAG.nfbdc.cn
http://xr4NjvnO.nfbdc.cn
http://lYivuIyV.nfbdc.cn
http://O6xieygV.nfbdc.cn
http://iWYGJX6o.nfbdc.cn
http://a4rppxEw.nfbdc.cn
http://IKLDUSq0.nfbdc.cn
http://xoLhWxIu.nfbdc.cn
http://www.dtcms.com/a/369837.html

相关文章:

  • Jupyter Notebook与cpolar:构建跨地域数据科学协作平台
  • 山西移动九联UNT413HS-海思MV320-2+8G-原机全量备份包
  • AI热点周报(8.31~9.6): Qwen3‑Max‑Preview上线、GLM-4.5提供一键迁移、Gemini for Home,AI风向何在?
  • 【C++】C++11的可变参数模板、emplace接口、类的新功能
  • [特殊字符] 从零到一:打造你的VSCode圈复杂度分析插件
  • JVM如何排查OOM
  • Miniconda安装与VSCode搭建远程Python、Jupyter开发环境
  • 智能客户服务支持智能体
  • Gutenberg块编辑器:WordPress 2025高效内容开发指南
  • JUC、JVM八股补充
  • windows找不到gpedit.msc(本地组策略编辑器)
  • 【洛谷】队列相关经典算法题详解:模板队列、机器翻译、海港
  • 激光频率梳 3D 轮廓测量 - 油路板的凹槽深度和平面度测量
  • 24.线程概念和控制(一)
  • Altium Designer(AD24)切换工作界面为浅灰色的方法
  • 让字符串变成回文串的最少插入次数-二维dp
  • 零基础入门深度学习:从理论到实战,GitHub+开源资源全指南(2025最新版)
  • 从文本到知识:使用LLM图转换器构建知识图谱的详细指南
  • 【开题答辩全过程】以 停车场管理系统的设计与实现为例,包含答辩的问题和答案
  • 带fat32文件系统的bin二进制文件制作教程
  • 【Redis】缓存的穿透、击穿和雪崩
  • C++经典的数据结构与算法之经典算法思想:分治法(Divide and Conquer)
  • PDF教程|如何把想要的网页保存下来?
  • DevOps实战(2) - 使用Arbess+GitPuk+Docker实现Java项目自动化部署
  • Git reset 回退版本
  • PostgreSQL与Greenplum数据库的编程语言连接
  • git在Linux中的使用
  • 全面剖析TENGJUN防水TYPE-C板上双排贴(L7.55/舌片外露1.1/双耳带螺孔):认证、防水与结构设计的三重突破
  • fastapi通过sqlmodel连接Mysql实现crud功能
  • 百度竞价推广:搜索竞价信息流推广代运营