操作系统-启动、中断、异常和系统调用

启动:

cpu、内存、IO

DISK:存放OS

BIOS:基本I/O处理系统

Bootloader:加载OS至内存

操作系统-启动、中断、异常和系统调用

内存预先存放BIOS,BIOS将bootloader加载至内存,bootloader将OS加载至内存

操作系统-启动、中断、异常和系统调用

操作系统与设备和程序交互:

系统调用、异常、中断

系统调用:应用程序主动向操作系统发出服务请求

异常:非法指令或者其他坏的处理状态,来源于不良的应用程序

中断:来自不同的硬件设备的计时器和网络中断(外设)

 

为什么应用程序不能直接访问外设?要通过操作系统?

答:

1.内核是被信任的第三方

2.可以执行特权指令

3.方便应用程序,屏蔽底层devices,提供简单接口

 

3者特点及区别,如何实现?

 

1.源头不同:

外设、应用程序意想不到的行为、应用程序请求操作提供服务

2.处理时间

中断:异步

异常:同步

系统调用:异步(请求点同步,返回点有可能是异步的)或同步

3.响应:

中断:持续,对用户应用程序是透明

异常:杀死或者重新执行意想不到的应用程序指令

系统调用:等待和持续

 

同步:

  • 同步的定义:是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么,这个进程将会一直等待下去,直到收到返回信息才继续执行下去。
  • 特点:
  1. 同步是阻塞模式;
  2. 同步是按顺序执行,执行完一个再执行下一个,需要等待,协调运行;

异步:

  • 是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。
  • 特点:
  1. 异步是非阻塞模式,无需等待;
  2. 异步是彼此独立,在等待某事件的过程中,继续做自己的事,不需要等待这一事件完成后再工作。线程是异步实现的一个方式

 

中断和异常的处理过程:

硬件处理过程、软件处理过程

操作系统-启动、中断、异常和系统调用

中断:

硬件:

设置中断标记【CPU初始化】

1.将内部、外部事件设置中断标记

2.中断事件的ID

将中断号发给操作系统,进而操作系统根据中断号,找到对应的处理历程

软件:

保存当前处理状态

中断服务程序执行

清楚中断标记

恢复之前保存的处理状态

所谓“透明”

异常:异常编号

保存现场

异常处理

  • 1.杀死
  • 2.重新执行异常指令

恢复现场

也是透明的

 

系统调用:

操作系统-启动、中断、异常和系统调用

  • Win32API
  • POSIX API(UNIX、LINUX、MAC OS X)
  • Java API(JVM)

用户态->内核态:控制权从APP->操作系统

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

  • 系统调用:
  1. 需要切换堆栈
  2. 需要状态转换

操作系统-启动、中断、异常和系统调用

代价:为了安全可靠

操作系统有自己的堆栈、不能和应用程序的堆栈混为一谈

操作系统不信任应用程序

内存拷贝:无法通过指针传递的方式来拷贝

 

?????TLB:页级制?????