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

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

前言


本章学习目标

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


目录



  • 计算机体系结构
  • OS与设备和程序的交互
  • 中断、异常、系统调用的区别
  • 中断和异常的处理
  • 中断(Interrupt)的处理过程
  • 异常(Exception)的处理过程
  • 系统调用System Call
  • 系统调用的实现
  • 函数调用和系统调用的区别
  • 开销


正文


计算机体系结构


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


计算机启动,按下电源。这个过程从原理来看,电源启动后,操作系统是从硬盘上存储,然后点到CPU工作的。

BIOS:基本I/O处理系统,计算机开机后检测各种外设。检测外设之后才能去加载相应的软件进行执行。

DISK(硬盘):除去存储数据的功能,也拥有存放OS的功能。

Bootloader:启动时,加载OS。把OS从硬盘放到内存中,令CPU可以执行OS

2ba5474ccec8e43be2386e4932c3e6b3_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png


在整个计算机内存里,一部分空间BIOS已经预先占用了。BIOS要做的第一步就是从某一个特定的地址开始执行,如果这个地址以x86为例,他的值是固定的(0xf000:fff0)。

两个寄存器合在一起,形成一个具体的内存地址(固定的)。一开始加电,从该地址开始执行,包括自检(检测自身设备是否可以正常工作)

POST(加电自检):寻找显卡和和执行BIOS(初始化检查,包括外设;把BootLoader从disk放到memory)。启动电源时,显示器会亮起,然后随着内部元件的工作,显示请开始显示不同的图形界面,所以加电过程中显卡是一定在工作的。除此之外,BIOS也会初始化检测对系统进行操作的外设(如键鼠等事件),以及数据存储(Disk硬盘等)。

BootLoader一般放在硬盘的第一个主引导扇区(一般512byte)。易于BIOS寻找。BIOS将BootLoader加载到内存中(BootLoader掌握CPU控制权),然后BootLoader 再加载OS到内存中,然后CPU控制权交给OS(跳到OS的起始地址,然后开始执行工作【前期的初始化工作、创建应用程序】)


OS与设备和程序的交互


操作系统的接口(interface):系统调用(system call)、异常(exception)、中断(interrupt)

外设:中断 IO 应用程序:系统调用、异常

·系统调用:APP(来源)主动向OS发出服务请求

·异常:由APP产生(来源),非法指令或者其他错的处理状态(内存出错)

·中断:来源于外设。来自不同的硬件设备的计时器和网络的中断

Q)为什么应用程序不能直接访问外设?

A)在计算机中内核是被信任的第三方,只有内核可以执行特权指令(安全角度:app恶意访问会破坏系统);同时操作系统方便了应用程序. 给上层应用提供一个简单的接口,令上层应用不需要针对下层不同device(设备)设置不同程序,让程序写得更加通用、可移植。

应用程序是不可信任的,可能会有恶意程序对整个系统进行破坏。


中断、异常、系统调用的区别


1.源


中断:外设

键鼠的操作,产生字符事件、移动事件等


异常:app的意外

APP并不想主动产生,是意外发生。

Ex)除0操作,这是计算机系统会无法正常工作的指令个,这种情况下要求OS发现并及时处理。

Ex)恶意程序要越过权限去访问一个受保护的地址空间,这种情况下OS要及时截获

Ex)APP执行时,资源不足以满足需求,这时操作系统悄悄在后端分配资源,解决问题

总之,异常就是让OS能够应对和解决各种事件。


系统调用:应用程序请求OS提供服务。是APP主动提出的,有明确的指令和相应的参数。比如打开/关闭文,~读写文件、发送网络包等都是系统调用,这都是由OS来完成的,应用程序只需要设置好对应的接口和参数,即具体实现由OS完成。


2.处理时间


中断:一般是异步事件。


异步就是当事件发生时,APP并不知道这个事件什么时候发生的。异步不可预测

异常:同步,同步就是触发问题的时间点是固定的,比如a/0这个除零操作必然会发生异常。发生异常一定是指定某条特定指令时一定发生。


系统调用:同步或异步。系统调用发出指令后,读取指令的过程是同步的。每一条指令对应一种正常或异常的状态。但是返回数据的这个过程是可以异步的


系统调用后返回的时间:读数据操作

当程序发出请求后,OS就需要读取数据,数据读完之后,OS再将数据返回给系统调用并将之传给应用程序。这个过程中,应用程序一直属于等待状态,这种状态就是同步。

但是如果应用程序发出这个请求后马上去做其他事情,那么这个OS完成读数据后,会给应用程序发出一个异步消息告诉APP这个数据已经处理完成。也就这个指令发出请求的过程是同步的,但是返回这个过程可能是异步也可能是同步的。


同步是指:当程序1调用程序2时,程序1停下不动,直到程序2完成回到程序1来,程序1才继续执行下去。 异步是指:当程序1调用程序2时,程序1径自继续自己的下一个动作,不受程序2的的影响

同步是阻塞的,异步不阻塞进程


3.响应状态:


中断:对于中断来说,打断了当前APP的正常执行,但是APP并没有感觉到有中断产生,

因为OS透明完成(悄悄完成),所以并没有影响到APP,所以APP持续执行。


异常:后果严重时,会杀死APP,或者重新执行产生异常的指令(产生异常的指令在OS的支持下再次执行也有可能正常执行)。


系统调用:等待服务完成后继续执行,不会重复执行系统调用的指令。


中断和异常的处理


259b626a54cc465ebdf5b58e619e7725_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

首先,产生一个中断或者异常,需要知道具体这个中断或异常是哪一个特定的服务历程来服务。所以需要设置中断向量表,通过标记可以清楚的知道异常/中断所处的位置。不同的外设存在一个特定的编号,也就拥有一个特定的地址,这个地址就是针对某一个特定服务历程的。

当OS收到这个中断,根据中断表,查到对应的中断服务历程的起始地址,直接跳转到这个位置来执行就可以了。为了能够让整个系统正常工作,还需要完成一些更多的事情


中断(Interrupt)的处理过程


当中断产生后,打断了当前的正常执行来处理更加紧急的中断事件,那么打断一个程序的执行,我们需要在硬件和软件方面做出一定的保存与恢复机制。才能保证完成中断处理以后整个系统仍然能够正常进行。

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

硬件:外设是一个硬件,当他需要OS给予相应的支持之后,那需要产生一个标记,让CPU知道中断的产生。CPU看到这个中断标记后,可以产生一个具体的中断号(ID),然后把中断号发给OS,从而让OS根据中断号找到对应的处理历程。

17a0d1e171c0a43fad45f817e565dbb5_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

软件:软件方面就是操作系统本身。

首先要保存被打断的执行现场(保持当前的处理状态,这个程序执行到什么地方了,执行的寄存器的内容等,都需要保存起来,这样才能令中断处理完成后的程序继续衔接打断之前的工作内容)

其次,根据CPU给的中断号查到对应的中断处理历程的地址,然后跳过去执行,这个过程会根据外设产生的中断的具体情况来完成响应操作。Ex)这个外设是网卡,来一个数据包,则这个终端历程需要把数据包取出来做出相应的处理。

处理完之后,应该让被打断的程序继续执行,这就需要恢复上述提到的保存的数据。

中断的整个执行过程是对应用程序透明的,应用程序感受不到中断的产生。

目录
相关文章
|
9天前
|
移动开发 前端开发 测试技术
操作系统智能助手OS Copilot新功能
作为一名前端开发人员,我主要负责公司官网和H5页面的开发,包括页面构建、交互逻辑实现及性能优化。近期试用了Copilot,顺利安装并体验了其代理模式、读取文件和管道功能。通过这些功能尝试生成《黑客帝国》风格的代码瀑布流效果,并使用文件详细描述需求,取得了不错进展。然而,在使用管道功能解释C++代码时遇到了一些问题,需进一步探索解决。 以上内容简洁地介绍了我的工作职责以及Copilot的试用体验,包括顺利的部分和遇到的问题。
操作系统智能助手OS Copilot新功能
|
9天前
|
测试技术 数据库 开发工具
云产品评测|操作系统智能助手OS Copilot新功能
我是一名测试工程师,主要负责App和Web端的测试,有时会使用阿里云服务器进行服务端问题定位及数据库等云资源的操作。在使用OS Copilot过程中遇到了一些问题: 1. **命令执行失败**:在解决Vim中文乱码时,Copilot建议的命令看似正确,但实际并未创建或修改`.vimrc`文件。 2. **任务文件解析问题**:使用`-f`功能解析任务文件时,Copilot未能正确执行获取容器日志的任务。 3. **管道功能不稳定**:管道功能对文件内容解释有效,但在某些情况下需要更明确的提示词才能正常工作。
|
9天前
|
弹性计算 人工智能 自然语言处理
操作系统智能助手OS Copilot新功能上线,快来体验吧
阿里云智能助手OS Copilot是一款基于大模型的Linux操作系统智能助手,支持自然语言问答、辅助命令执行、系统运维调优等功能。通过自然语言处理技术,OS Copilot能够帮助用户轻松完成复杂的命令操作和系统管理任务,极大提升了操作便捷性和效率。用户可以通过简单的对话获取所需的操作指令,降低了对专业技能的要求。
|
8天前
|
弹性计算 运维 JavaScript
操作系统智能助手OS Copilot新功能测评
本文介绍了使用co命令修改主机名称、安装Node环境及Vue项目的过程,以及遇到的脚本无限循环和任务执行失败等问题。通过co命令可以简化命令执行流程,但过程中遇到了一些问题,如日志读取报错和命令不正确等。最终通过简化任务和限制查询数据量解决了部分问题,并成功安装了Node环境和运行Vue项目。
|
9天前
|
监控 Java Docker
云产品评测-操作系统智能助手OS Copilot新功能
作为一名Java开发人员,我日常负责微服务开发与部署,常用Docker容器化部署。最近试用OS Copilot显著提升了工作效率。版本0.9.0的`co --version`命令表现良好,特别是`-t`功能能高效查询过滤日志,如查询容器liangmu-sign最近5天的错误日志。然而,`-f`功能和管道功能在处理复杂任务时表现不佳,未能正确完成日志分析和保存任务。总体而言,`-t`功能实用,但其他功能有待改进。
37 11
|
9天前
|
弹性计算 前端开发 程序员
操作系统智能助手OS Copilot新功能
作为一名旅游公司的程序员,我主要负责旅游网站的前后端开发。近期体验了OS Copilot的安装与使用,过程顺利。-t功能用于测试命令输出,非常实用;-f功能可批量执行部署脚本,提升效率;管道功能虽有潜力,但遇到了文件路径问题。总体而言,OS Copilot显著提高了我的工作效率,但仍需完善文档和增加更多功能。
|
8天前
|
人工智能 运维 应用服务中间件
云产品评测|操作系统智能助手OS Copilot新功能
作为一名全栈开发,我在日常维护阿里云服务器时,由于对Linux不熟悉,常常感到运维困难。最近尝试了阿里云推出的OS Copilot,发现它极大简化了操作。通过简单的命令如`co nginx是否安装`和`co 将nginx设置为开启自启动 -t`,可以轻松完成复杂的任务。使用`-f`参数还能处理复杂任务,例如从Nginx日志中提取最常访问的IP地址。此外,Copilot还支持管道解析,帮助解读文件内容。总体而言,OS Copilot显著提升了我的工作效率和信心,建议进一步增加功能和优化体验。
|
3月前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
104 0
Vanilla OS:下一代安全 Linux 发行版
|
22天前
|
弹性计算 自然语言处理 Ubuntu
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot是由阿里云推出的操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行等功能,极大提升了Linux系统的使用效率。用户只需通过简单的命令或自然语言描述问题,OS Copilot即可快速提供解决方案并执行相应操作。例如,查询磁盘使用量等常见任务变得轻松快捷。此外,它还支持从文件读取复杂任务定义,进一步简化了操作流程。虽然在某些模式下可能存在小问题,但总体上大大节省了学习和操作时间,提高了工作效率。
91 2
OS Copilot-操作系统智能助手-Linux新手小白的福音
|
14天前
|
弹性计算 运维 Ubuntu
os-copilot在Alibaba Cloud Linux镜像下的安装与功能测试
我顺利使用了OS Copilot的 -t -f 功能,我的疑惑是在换行的时候就直接进行提问了,每次只能写一个问题,没法连续换行更有逻辑的输入问题。 我认为 -t 管道 功能有用 ,能解决环境问题的连续性操作。 我认为 -f 管道 功能有用 ,可以单独创建可连续性提问的task问题。 我认为 | 对文件直接理解在新的服务器理解有很大的帮助。 此外,我还有建议 可以在非 co 的环境下也能进行连续性的提问。
54 7