操作系统的启动
DISK磁盘是用于存放OS的,BIOS是基本的IO处理系统,当加电之后能够开始检测外设例如显卡等然后执行BIOS,当加载完成之后,从磁盘的第一个主引导扇区(512字节)去找BootLoader将之加载到内存中然后跳转到CS:IP=0000:7c00,并传递控制权,接下来由Boot
Loader找到OS,然后讲OS读到内存中并转交控制权。
定义
- 系统调用(来源于应用程序): 应用程序主动向操作系统发出服务请求。
- 异常(来源于应用程序):异常是来源于不良的应用程序的非法指令(内存出错等)
- 中断(来源于外设): 中断是来自不同硬件设备到额计时器和网络的中断
在计算机运行中,内核是被信任的第三方,出于于安全考虑应用程序不能直接操作外设,出于方便的角度,是为了由操作系统提供统一的对外接口。
中断操作:异步
异常操作:同步
系统调用:异步或同步
中断处理
硬件:设置中断标记【CPU初始化】
- 将内部、外部事件设置终端标记
- 中断事件的id
软件(OS):
- 保存当前处理状态
- 中断服务程序处理(根据id查表)
- 清楚中断标记
- 恢复之前保存的处理状态
异常处理:异常编号
- 保存现场(指令,以及地址等)
- 异常处理:1、杀死产生异常的程序 2、重新执行异常指令
- 恢复现场
系统调用
例如应用程序调用printf(),会触发操作系统调用Write().
- 程序访问主要是通过高层次的API接口而不是直接进行系统调用
Win32 API用于WIndows、POSIX API用于 POSIX-Based systems(包括unix、linux、macos所有版本)、 java API并不属于操作系统的接口而是用于JVM
用户态
应用程序执行时cpu所处于的一种特权状态。拥有较低的权限,不能直接访问机器指令和io
内核态
操作系统执行时cpu所处的状态。可以完全操控整个计算机
当产生系统调用时会完成用户态到内核态的权限。
跨越操作系统边界的开销
在执行时间上的开销超过程序调用
开销:建议中断/异常/系统调用号与对应服务映射关系初始化的开销、建立内核堆栈的开销、验证应用程序发出参数的开销、内核态映射到用户态的地址空间更新页面映射权限的开销、内核态独立地址空间TLB的开销