操作系统(一)
操作系统是一个资源管理的分配器
操作系统将CPU抽象成进程,磁盘抽象成文件,内存抽象成地址空间来给应用程序使用
操作系统是系统软件,应用于硬件
操作系统位于应用软件之下,为应用软件提供服务支撑
操作系统的特征:并发、共享、虚拟、异步
操作系统的启动
- CPU, I/O, 内存通过总线连接
- DISK:存放OS;BIOS:基本I/O处理系统( basic I/O system); Bootloader: 加载OS到内存中。
- 当电脑通电时,段寄存器CS和指令寄存器IP能够确定一个内存地址,例如CS:IP = 0xf000:fff0
- POST(加电自检),寻找显卡和执行BIOS。(显示器,键盘…是否正常)。
为什么应用程序不能直接访问硬件而是通过操作系统?
- 计算机运行时,内核是被信任的第三方
- 只有内核可以执行特权命令
- 为了方便应用程序
中断、异常、系统调用的不同和特点
- 从源头看:
- 中断:外设
- 异常:应用程序意想不到的行为;比如说,指令异常导致计算机无法工作,一些恶意程序越 过权限访问其他内存的地址
- 系统调用:应用程序请求操作提供服务;比如:打开文件,关闭,读取文件,发送网络包等等
- 处理时间:
- 中断:异步(不知道什么时候发生)
- 异常:同步(知道什么时候发生,比如:除0操作,发生了之后立马异常)
- 系统调用:异步或同步
- 响应状态
- 中断:持续,对用户应用程序是透明的
- 异常:杀死或者重新执行意想不到的应用程序指令
- 系统调用:等待和持续
中断、异常和系统调用
-
中断、异常处理机制
中断是外设的时间,异常时CPU的事件;中断/异常迫使CPU访问一些被中断和异常服务访问的功能
-
中断处理机制
硬件:设置中断标记(CPU初始化)
- 将内部/外部事件设置中断标记
- 中断事件的ID(程序访问的中断向量的地址)
软件(操作系统):
- 保存当前处理状态
- 中断服务程序处理
- 清除中断标记
- 恢复之前保存的处理状态
-
异常处理机制
异常:异常编号
- 保存现场
- 异常处理:杀死产生异常的程序指令;重新执行异常指令
- 恢复现场
-
系统调用
-
一条指令会触发一个系统调用
-
程序访问主要是通过高层次的API接口而不是直接进行系统调用
-
通常情况下,存在与每个系统调用相关的序号,系统调用接口根据这些序号来维护表的索引。
-
系统调用接口调用内核态中预期的系统调用,并返回系统调用的状态和其它任何返回值。
-
用户不需要知道系统调用是如何实现的,只需要获取API和了解操作新系统将什么作为返回结果。操作系统接口的细节大部分都隐藏在API中,并通过运行程序支持的库来管理。
-
-用户态:应用程序在执行的过程中,CPU执行的特权级的状态(很低,不能访问特殊机器指令和IO)。
-
内核态:应用程序在执行的过程中,CPU执行的特权级的状态(高,操作系统可以执行CPU任何一条指令)。
-
系统调用时涉及到特权级从用户态到内核态的转换,应用程序和操作系统有各自的堆栈,这两个变化比函数调用的开销更大,但更安全和可靠。(而程序调用是在一个栈空间实现参数的调用和返回)。
-
跨越操作系统边界的开销
- 在执行时间上超过程序调用
- 开销包括:
- 建立中断/异常/系统调用号与对应服务例程映射关系的初始化开销
- 建立内核堆栈(操作系统和应用程序的堆栈不一样);
- 验证参数(操作系统会检查数据);
- 内核态映射到用户态的地址空间,更新页面映射权限(内存拷贝开销);
- 内核态独立地址空间TLB。
-