首页 > 其他分享 >操作系统的中断、异常、和系统调用

操作系统的中断、异常、和系统调用

时间:2023-02-24 20:25:10浏览次数:36  
标签:调用 操作系统 中断 系统 应用程序 异常

中断和异常的处理机制

都具有硬件和软件的处理过程,合在一起才能完成操作系统的一个具体的服务
为了区分异常、终端的来源,需要模拟出一个类似于键值对的数据,key是中断号或异常号,区分出键盘还是鼠标。中断与异常都是打断一个应用程序的运行去处理一个更加紧急的事件,而为了保证应用程序的安全,就必须有保存与恢复机制,以保证应用程序完成中断与异常之后继续运行。
完成中断或异常分为两部分,一个是硬件,一个是软件

中断

  • 硬件部分
    设置中断标记[CPU初始化]
    1.将内部、外部事件设置中断标记
    2.中断事件ID
    依据这些信息来找到需要处理的进程
  • 软件部分(指操作系统)
    1.保存当前处理状态或保存现场(程序执行进度、内容;便于回复程序后继续往下执行)
    2.根据CPU提供的中断号跳到中断地址去执行,这个过程中根据外设的具体情况完成相应的操作
    3.处理完成之后,清除中断标记
    4.恢复之前保存的处理状态

异常

  • 出现异常后得到异常编号
    1.保存现场
    2.根据异常编号处理异常
  • 1.如果异常的指令是不再执行程序,那就会杀死产生异常的程序
  • 2.如果OS判断是OS的服务所产生的问题,进行服务弥补工作,而后重新执行异常指令
    3.回复现场

系统调用

系统调用来源于应用程序需要OS提供一些服务,应用程序于OS之间需要一个接口,这个接口名字就是系统调用接口
比如一个程序需要用户输入字符串,而后将字符串输出,这个过程中就触发了一个系统调用,就是write系统调用,这个调用会携带一些参数,包含用哪些设备显示字符串以及字符串的内容,回去参数后进行对设备的访问

程序访问主要是通过高层次的API接口而不是直接进行系统调用

  • Win32 API用于Windows
  • POSIX(通用可移植) API用于POSIX-based systems(包括UNIX、LINUX、MacOS X的所有版本)
  • Java API用于JAVA虚拟机(JVM 这些API不是系统调用,这只是java虚拟机提供的一些支持,做中还是会通过类似于Win32 API或POSIX API来实现相应的系统调用的服务

操作系统如何实现系统调用(System Call)

应用程序通过接口进行系统调用,一旦使用接口,会触发一种特殊的命令,使操作系统的特权级发生改变,即用户态内核态的转变

  • 用户态:特权级别很低,对于一些特殊的机器指令和I/O进行访问
  • 内核态:特权级很高,可以访问一些特权指令等等
  • 这种特权级的转换使得OS的安全性得到提高

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

  • 函数调用是在同一个栈空间完成参数的调用、传递、返回;而系统调用的过程中,内核操作系统和应用程序拥有各自的堆、栈,也就是说,当应用程序发出系统调用之后,奇幻到内核执行时需要切换堆栈,同时完成特权级发生转换时,这个过程造成高于函数调用的开销(时间),回报是安全性的提高

总结

异常、中断、系统调用的过程,实现了跨越操作系统与应用程序、操作系统与外设的边界;过程中产生了开销,但却是提高了操作系统的安全性可靠性

跨越操作系统边界的开销

  • 在执行时间上的开销超过程序调用
  • 开销:
  • 1.建立中断、异常、系统调用的代号与对应服务例程映射关系的初始化开销(建立出对应关系表)
  • 2.建立内核堆栈(操作系统有自己的堆栈,不能与应用程序的堆栈混合;所以要对这个堆栈进行维护,也就是操作系统退出时要把这部分堆栈保存,操作系统进入时,要把这部分堆栈恢复)
  • 3.验证参数(应用程序发出请求时会携带一些关于外设、数据等参数,OS对这些参数进行检查)
  • 4.内核态映射到用户台的地址空间,更新页面映射权限(操作系统处理某些数据之后,会将这些数据从内核态导入到用户态,这个过程是一个拷贝的过程)
  • 5.内核态独立空间地址
  • 这些开销使得操作系统能够保证其在一个安全可靠的环境中执行

标签:调用,操作系统,中断,系统,应用程序,异常
From: https://www.cnblogs.com/hezhipeng/p/17144777.html

相关文章

  • 中断、异常、系统调用
    启动DISK:最开始时,OS存放在DISK中,再由BIOS提供相应的支持;BIOS:是指基本I/O处理系统;功能是在计算机开机之后,让计算机系统可以检测各种外设,进而去加载相应的软件去执行。Boo......
  • yolov5的训练中断恢复
    Yolov5的恢复训练使用自带参数-resume1.train.py文件中找到函数parse_opt,修改参数–resume的默认参数为Ture        2.runs/train/exp*/weights/路径......
  • arm嵌入式工控机BL302 CAN口调用教程
    CAN接口是一种用于实现车载网络通信的接口,它可以支持多个设备之间的高速数据传输。它是由德国BOSCH公司开发的,并最终成为国际标准(ISO11898),在北美和西欧,它已经成为汽车计算......
  • 操作系统储存管理(页式、段式、段页式)
    某计算机系统的内存大小为128k,采用可变分区分配方式进行内存分配,当前系统的内存分块情况如下图所示,现有作业4申请内存9k,几种不同的存储分配算法在分配中,会产生什么样的结果......
  • 拷贝构造函数调用时机
    这里讨论两种情况下的拷贝函数调用:作为参数传值过程中的拷贝函数调用,有一个Dog类,d1是Dog类的一个实例现在通过function将d1传入,voidfunction(Dogdog);d1是dog的实参,在......
  • 自己从零写操作系统GrapeOS——3.GrapeOS参考资料
    站在巨人的肩膀上才能看的更远。我写GrapeOS主要参考了以下4本书:《30天自制操作系统》作者川合秀实《操作系统真象还原》作者郑刚《一个64位操作系统的设计与实现》作......
  • 自己从零写操作系统GrapeOS——2.学习写GrapeOS的前提条件
    学习写GrapeOS需要的前提条件主要有以下3点:1.会x86汇编2.会C语言3.会用Linux以上要求都不需要多么熟练,其中x86汇编懂基本的指令,C语言懂基本的语法,会在虚拟机中安装Linu......
  • SkeyeLive同屏直播库库功能介绍和接口说明与调用
    SkeyeLive是OpenSKEYE开源流媒体团队开发的一个集采集,编码,RTSP/RTMP推流和流媒体RTSP服务于一身的通用库,目前支持Windows,Android平台,通过SkeyeLive我们就可以避免接触到稍显......
  • linux中断处理总结
    ARM64中断处理过程:https://www.daodaodao123.com/?p=146上文总结了ARM64裸机中断处理的详细过程,这里主要总结下linux中断处理相关内容;0.为什么有中断?中断,本质上是外设发......
  • 【转载】百度飞桨PaddleOCR .NET调用库
    NETConf2021中国我做了一次《.NET玩转计算机视觉OpenCV》的分享,其中提到了一个效果特别好的OCR识别引擎——百度飞桨PaddleOCR,可离线部署,后来我逐步把它封装了一下,代码全......