启动
DISK:最开始时,OS存放在DISK中,再由BIOS提供相应的支持;
BIOS:是指基本I/O处理系统;功能是在计算机开机之后,让计算机系统可以检测各种外设,进而去加载相应的软件去执行。
Bootloader:参在于硬盘,主要功能就是加载OS,能够让OS从硬盘加载到内存中,然后让CPU可以执行操作系统
在整个内存中有一部分是由BIOS占据的,从内存中某个特定的地址开始执行,这个地址是CS:IP=0xf000:fff0(CS:段寄存器;IP:指令寄存器)这两个数据合在一起形成一个具体的内存地址;而后开始完成各种工作,比如POST加电自检(寻找显卡和执行BIOS)
- 大致的过程是:
1.内存中的BIOS将硬盘中Bootloader加载到内存(这个时候CPU的控制权由Bootloader掌握)
2.然后Bootloader再将硬盘中OS加载到内存(Bootloader将OS所占的主要的磁盘块读取到内存中,而后将控制权交由OS,OS就可以在内存中进行必要的工作,包括前期的初始化以及后期的应用程序的运行)
3.Bootloader存放在硬盘的第一个主扇区(512字节)0x7c00,这样BIOS就可以很快地找到Bootloader
操作系统的接口
- 面向外设是通过1.中断、和I/O做处理的
- 面向应用程序是通过2.系统调用和3.异常来提供相应的功能
系统调用(来原于应用程序)
- 应用程序主动向操作系统发出服务请求
异常(来源于不良的应用程序)
- 非法指令或者其他坏的处理状态,如:内存出错(应用程序出现错误,使得不得不由OS来完成相应的功能)
中断
- 来自不同的硬件设备的计时器和网络的中断
思考:为什么不能直接访问外设,而必须通过OS?
首先,OS是一种特殊的应用软件,它拥有对计算机的控制权,1.是可信任的;而一些应用程序可能存在不安全因素,会造成计算机系统的崩溃;操作系统为应用程序提供了简单一致的接口,这样应用程序就不需要根据不同的外设开发不同的应用软件,2.操作系统屏蔽掉外设的复杂性和差异性
三者的区别
- 源头
- 中断:来源于外设(键盘、鼠标、网卡、声卡、显卡产生各种事件,中断事件)
- 异常:应用程序再执行某些代码的时候产生了意外,比如除零操作;或者程序在执行时所需要的资源,在后端执行好之后再交由应用程序执行
- 系统调用:应用程序请求操作系统提供服务(有明确指令、参数来说明需要什么样的服务)
- 处理时间
- 中断:异步事件(是指这样的中断发生的时间不可预测)
- 异常:同步事件(是指在执行到某一个特定的指令之后,就一定会产生某个异常)
- 系统调用:同步(根据某一个特定的指令)或异步(正常情况下数据返回的是同步的,但比如,应用程序发出请求之后就去做别的事情了,就会造成异步的状况)
- 响应状态
- 中断:持续,中断对应用程序是透明的(应用程序感受不到被中断,比如在后台运行)
- 异常:杀死或者重新执行意想不到的应用程序指令
- 系统调用:等待和持续