启动、中断、异常和系统调用 \orange{\huge{启动、中断、异常和系统调用}} 启动、中断、异常和系统调用
启动
D I S K DISK DISK:存放 O S OS OS。
B I O S BIOS BIOS:基本 I / O I/O I/O处理系统.
B o o t l o a d e r Bootloader Bootloader:加载 O S OS OS, 将 O S 从硬盘加载到内存使得 C P U 可以执行 O S \red{将OS从硬盘加载到内存使得CPU可以执行OS} 将OS从硬盘加载到内存使得CPU可以执行OS。一般存放在硬盘的第一个主引导扇区,使得 O S OS OS非常方便的寻找。 O S OS OS将 B o o t l o a d e r Bootloader Bootloader加载到内存中之后, C P U CPU CPU的控制权就交给了 B o o t l o a d e r Bootloader Bootloader。 B o o t l o a d e r Bootloader Bootloader将很多关于 O S OS OS本身的数据加载到内存中,大大增加 O S OS OS的加载速度。
P
O
S
T
POST
POST:加电自检。
操作系统与设备和程序交互
外设
\red{外设}
外设:异常、中断
软件
\red{软件}
软件:系统调用
系统调用:
\blue{系统调用:}
系统调用:
应用程序
主动
\red{主动}
主动向操作系统发出服务请求。
异常:
\blue{异常:}
异常:
非法指令或者其他的坏的处理状态。
中断:
(
多指设备
)
\blue{中断:}(\red{多指设备})
中断:(多指设备)
来自不同硬件设备的计时器和网络的中断。
为什么上层软件不能够直接调用底层硬件?
计算机的 O S OS OS是内核,相对来讲上层的软件是比较边缘的,上层的软件是“不值得信任的”,而内核 O S OS OS是可以获得信任权的。只有内核才能够执行特权的指令。并且通过 O S OS OS调用底层硬件更加快捷方便。
中断、异常、系统调用辨析
产生根源: \red{产生根源:} 产生根源:
- 中断:外设有了问题。
- 异常:应用程序意向不到的行为。
- 系统调用:应用程序请求操作提供服务。 主动要求 \color{olive}{主动要求} 主动要求
处理时间: \red{处理时间:} 处理时间:
- 中断:异步
- 异常:同步
- 系统调用:异步( 返回时间 \color{olive}{返回时间} 返回时间)或者同步
响应: \red{响应:} 响应:
- 中断:持续,对用户应用程序是透明的。
- 异常:杀死或者重新执行意向不到的应用程序。
- 系统调用:等待和持续。
中断和异常的处理机制
硬件: \red{硬件:} 硬件:
设置中断标记( C P U CPU CPU初始化)
- 将内部、外部事件设置中断标记。
- 中断事件的 I D ID ID。
整体流程: \blue{整体流程:} 整体流程:硬件中设定好中断标记后,如果出现了中断,会产生一个中断标记号( I D ID ID), C P U CPU CPU将中断标记号发送给 O S OS OS, O S OS OS就可以通过中断标记号分析出哪里出现了中断。
软件: \red{软件:} 软件:
中断
- 现场保护:保存当前处理状态。
- 中断服务程序处理。
- 清楚中断标记。
- 恢复之前保护的处理现场。
异常:异常编号
- 保存现场
- 异常处理:杀死产生异常的程序,重新执行异常指令等操作
- 恢复现场
系统调用
程序访问主要是通过高层次的 A P I 接口而不是直接进行系统调用。 \red{程序访问主要是通过高层次的API接口而不是直接进行系统调用。} 程序访问主要是通过高层次的API接口而不是直接进行系统调用。
用户态: \red{用户态:} 用户态: O S OS OS的状态之一,在这个状态下有很多涉及高等权限的指令是无法被执行的。
内核态: \red{内核态:} 内核态: O S OS OS状态之一,在这个状态下 所有 \color{olive}{所有} 所有的指令 O S OS OS都能够执行,权限非常的大。
完整流程:
\blue{完整流程:}
完整流程:
当软件进行系统调用的时候会发生
用户态
→
内核态
用户态→内核态
用户态→内核态两态之间的转换。两态转换后将操作权限由软件转移给
O
S
OS
OS,再由
O
S
OS
OS完成后续的操作。
函数调用和系统调用
函数调用: \red{函数调用:} 函数调用:软件进行函数调用的时候,使用的是 同一个堆栈 \color{olive}同一个堆栈 同一个堆栈,只需要在这一个堆栈进行传参和返回参数即可。 速度很快 \blue{\huge{速度很快}} 速度很快
系统调用: \red{系统调用:} 系统调用:系统调用的时候, 与软件相关的堆栈和处于内核态的 O S 使用的堆栈不是一个堆栈 \color{olive}与软件相关的堆栈和处于内核态的OS使用的堆栈不是一个堆栈 与软件相关的堆栈和处于内核态的OS使用的堆栈不是一个堆栈,这就使得系统调用的时候也需要多个堆栈之间的数据传输。 非常安全 \blue{\huge{非常安全}} 非常安全