操作系统的启动,中断,异常,应用程序002

在这里插入图片描述

一、操作系统的启动

1、计算机开始启动,接通电源。基本上三部分:

  1. cpu
  2. mbr
  3. i/o
  • DISK:存放OS(还有一个简单的小程序bootloader)
  • BIOS:基本i/o处理系统:电脑接通电源,开机时,BIOS 进行检查外设是否正常工作,完成基本检查作用。从而才开始加载相应的软件。
  • Bootloader:加载OS
    让从OS从硬盘放到内存当中去。然后让CPU执行 操作系统。
    操作系统一开始并没有放到内存当中,而是放到diske硬盘中,然后有BIOS提供相应的支持。

2、计算机的启动,操作系统的启动简单描述。BIOS–>bootlater–>os

  1. BIOS已经在计算机内存中占好一部分内存。从一个固定地址(CS:IP=0xf000:fff0。段寄存器:指令寄存器)开始执行。可以合成一个物理地址。
  2. 可以完成一系列工作:POST(加点自检):寻找显卡,外设
  3. BIOS将Bootlater放到硬盘第一个主引导扇区。这样BIOS很容易找到,找到第一个扇区,就可以将他加载到内存中去。第一个扇区有512字节。
  4. bootlater将OS从硬盘中,放到内存中。
  5. bootlater的控制权,交给OS(相当于跳到起始地址执行)
  6. OS就可以在内存中,进行工作,前期的初始化,后期各种应用程序。
  7. 到此为止接下来,整个系统的硬件管理都处于OS管理之下。

二、操作系统与外设和程序交互

操作系统面向外设通过中断、I/o来进行处理,管理和控制
操作系统面向应用程序是:系统调用、异常来提供服务功能和支持。

1.系统调用(来源于应用程序)

应用程序主动向操作系统发出服务请求。需要操作系统提供支持。

2.异常(来源于不良的应用程序)

非法指令或其他坏的处理状态。(如:内存出错)

3.中断(来源于外设)

来自不同的硬件设备的计时器和网络的中断。


为什么应用程序不能直接操作外设,而是通过操作系统呢?

  1. 安全角度:对应用程序不信任。操作系统是一个特殊的软件,和应用程序最大的不同是:对整个计算机有控制权力,可以执行特权指令。可信任的软件。
  2. 在计算机运行中,内核是被信任的第三方。
  3. 只有内核可以执行特权指令
  4. 操作系统为上层应用提供简单、可移植的接口,可以让上层应用不用关注底层信息,人怎关注开发软件即可。
  5. 通用、可移植。

三、操作系统如何实现和设计中断、异常、系统调用?它们三者有什么区别和特点?(源头、处理时间、相应状态)

1. 源头:

  • 中断:是来源于【外设】
    中断来源于外设,并不是CPU产生的,外设比如键盘,鼠标,网卡声卡等等。
  • 异常:是来源于应用程序,但是是应用程序意想不到的行为。所有的异常,并不是应用程序主动想去发出的请求,而发生了以后,操作系统会对这些意外的事件,做出相应的处理。
    并不是应用程序主动想去产生的事件。而是应用程序在去执行某个特定的代码的时候,发生的异常事件。比如 做除以0的操作,做之前并不知道,它是不能做除零操作的。产生事情了以后,其实这是一条不能让计算机正常工作的指令,为此,操作系统及时发现去处理。
    比如:恶意程序,越过权限去操作另外程序的地址空间。操作系统及时发现去抑制。
  • 系统调用:应用程序主动请求,操作系统提供服务。和异常都是应用程序产生的,但是系统调用是主动要求,异常是被动行为。
    比如打开文件,读写文件等等。操作系统具体来完成的,应用程序只需要定义好的系统调用的接口,把接口的参数设置好后,具体的实现是由操作系统来完成。

2. 处理时间:

  • 中断:异步
    异步:当事件产生的时候,应用程序并不知道什么时候产生。
  • 异常:同步
    同步:应用程序一定知道什么时候进行异常。
  • 系统调用:异步或者同步
    应用程序向操作系统发布请求时是同步的,但是操作系统完成事件后,向应用程序发送的可能是异步也可能是同步消息。
    系统调用有可能是异步的,系统调用当他发出请求后,返回的时间是异步的。当应用程序发出读数据,应用程序去工作其他的了,操作系统完成读数据后,它会给应用程序发出一个异步的消息说“已做完”。
    正常情况下是同步的,当应用程序调用发出之后,要读数据,操作系统进行读数据处理,最终返回应用程序。应用程序是等待状态,这样是同步。

3. 相应状态:

  • 中断:持续,对用户应用程序是透明的
    打断是当前应用程序的正常执行,但是应用程序并不知道有中断产生。因为操作系统瞧瞧的完成了,并没有影响应用程序。
  • 异常:杀死或者重新执行意想不到的应用程序。或者是重新执行。
  • 系统调用:等待和持续服务完成之后,继续执行。并不会重复执行。

四、中断和异常处理过程

1、硬件处理过程

  • 设置中断标记【CPU初始化】
    1.将内部、外部事件设置中断标记。当CPU看到标记后,会得出具体哪个中断。将中断号发给操作系统,从而操作系统根据中断号找到对应的处理过程。
    2.中断事件的ID

2、软件处理过程

1.中断:

当中断执行过程,其实对应用程序是透明的,应用程序完全不用感知中断的产生。

  • 保存当前处理状态
    当程序执行中,突然打断程序执行,操作系统需要保护被打断的执行现场,便于恢复后,程序正常运行。
  • 中断服务程序处理。
    根据CPU给的中断号,查到对应的处理的地址,根据外设产生的具体情况,来完成相应的操作。比如是网卡外设,来了一个数据包,而这个中断服务历程需要把这个数据包取出来,进行进一步处理。这就是中断服务程序处理的事情。
  • 清楚中断标记
  • 恢复之前保存的处理状态。
    当上述问题处理完之后,应该让被打断的事情继续执行,需要【恢复之前保存好的数据、地址】。从而使应用程序在完全不知情的情况下,继续执行过程。

2.异常:异常编号

对应用程序是透明的,应用程序完全不用感知异常的产生
当应用程序执行到某个特定的指令之后,这个特定指令触发了异常事件(比如除零操作),CPU就会有异常编号ID号。

  • 保护现场
    保护这条指令的地址、寄存器内容
  • 异常处理
    杀死产生了异常的程序
    重新执行异常指令(例如服务不到位,将现象弥补好。)
  • 恢复现场
    根据现场进行重新执行这条指令(根中断不一样,中断是继续执行下面的指令。)

五、系统调用的分析

  • 应用程序需要操作系统提供服务,不能让应用程序执行执行,而是操作系统执行。这个过程需要一个接口,接口称为系统调用接口。就可以让操作系统为应用程序提供各种服务。
  • 为了方便应用程序能够使用操作系统的接口,有很多定要好的API
  • 程序访问主要是通过高层次的API,接口而不是直接进行系统调用
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

Guess you like

Origin blog.csdn.net/weixin_43989347/article/details/120112341