启动:
cpu、内存、IO
DISK:存放OS
BIOS:基本I/O处理系统
Bootloader:加载OS至内存
内存预先存放BIOS,BIOS将bootloader加载至内存,bootloader将OS加载至内存
操作系统与设备和程序交互:
系统调用、异常、中断
系统调用:应用程序主动向操作系统发出服务请求
异常:非法指令或者其他坏的处理状态,来源于不良的应用程序
中断:来自不同的硬件设备的计时器和网络中断(外设)
为什么应用程序不能直接访问外设?要通过操作系统?
答:
1.内核是被信任的第三方
2.可以执行特权指令
3.方便应用程序,屏蔽底层devices,提供简单接口
3者特点及区别,如何实现?
1.源头不同:
外设、应用程序意想不到的行为、应用程序请求操作提供服务
2.处理时间
中断:异步
异常:同步
系统调用:异步(请求点同步,返回点有可能是异步的)或同步
3.响应:
中断:持续,对用户应用程序是透明的
异常:杀死或者重新执行意想不到的应用程序指令
系统调用:等待和持续
同步:
- 同步的定义:是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么,这个进程将会一直等待下去,直到收到返回信息才继续执行下去。
- 特点:
- 同步是阻塞模式;
- 同步是按顺序执行,执行完一个再执行下一个,需要等待,协调运行;
异步:
- 是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。
- 特点:
- 异步是非阻塞模式,无需等待;
- 异步是彼此独立,在等待某事件的过程中,继续做自己的事,不需要等待这一事件完成后再工作。线程是异步实现的一个方式
中断和异常的处理过程:
硬件处理过程、软件处理过程
中断:
硬件:
设置中断标记【CPU初始化】
1.将内部、外部事件设置中断标记
2.中断事件的ID
将中断号发给操作系统,进而操作系统根据中断号,找到对应的处理历程
软件:
保存当前处理状态
中断服务程序执行
清楚中断标记
恢复之前保存的处理状态
所谓“透明”
异常:异常编号
保存现场
异常处理
- 1.杀死
- 2.重新执行异常指令
恢复现场
也是透明的
系统调用:
- Win32API
- POSIX API(UNIX、LINUX、MAC OS X)
- Java API(JVM)
用户态->内核态:控制权从APP->操作系统
函数调用与系统调用的区别:
- 系统调用:
- 需要切换堆栈
- 需要状态转换
代价:为了安全可靠
操作系统有自己的堆栈、不能和应用程序的堆栈混为一谈
操作系统不信任应用程序
内存拷贝:无法通过指针传递的方式来拷贝
?????TLB:页级制?????