操作系统笔记-启动流程、中断、异常、系统调用
系统启动流程
在操作系统的启动过程中主要涉及了BIOS、bootloader、MBR、OS代码之间的交互过程,本次简要的介绍一下大致执行流程。
首先要了解的是计算机没启动时的状态,这里假设程序在内存中是按顺序从0开始排列的,没启动状态下的内存由BIOS程序代码、数据组成,它占据的空间是0到ox7c00的范围。硬盘中的排列是0到512字节存储bootloader的代码和数据,接着存储os的代码和数据。CPU中通过CS和IP确定下一条取指的地址,默认指向BIOS的第一条指令所在的地址,按照这里的假设CS、IP的指向就是0。
按下电源键以后,cpu开始执行BIOS的代码,它按照顺序开始取指执行,BIOS代码主要做的事就是自检,即检查硬件是否工作正常,然后读取硬盘0到512字节的内容存入内存中,之后跳转到bootloader代码所在的内存地址继续执行。
当cpu跳转至bootloader后,即代表控制权交给了bootloader,bootloader才会真正加载os,它会读取硬盘上的os,将其加载到ox7c00开始的位置,当所有代码都加载结束后,bootloader会将cs和ip的指向转为7c00,接着cpu就会从7c00即os所在的位置开始执行代码,此时操作系统就开始启动了。
中断
CPU执行指令分为三个阶段,取指,执行,检查中断,其中的中断是指其他硬件需要cpu执行操作的请求,比如当网卡收到数据后,就会向cpu发出中断信号,要求cpu处理接收到的数据,如果cpu要处理中断,则必须保存目前运行的进程和寄存器状态,以便在中断结束后继续回到原来的进行执行,这称为保存进程执行的上下文。
异常
异常是指在程序运行过程中,因为某些原因导致程序出错,无法执行下去,此时为了保护操作系统,必须要杀死进程,异常分为很多种类。
系统调用
应用程序的代码运行环境和os的代码运行环境不同,这是为了保护硬件,应用程序执行的环境称为用户态,os执行的环境称为内核态,当应用程序需要调用硬件资源时,它会通过一个os提供的函数执行,此时环境切换到内核态,当os执行完成后,会将结果返回给应用程序,并且将环境切换回去,这整个过程就称为系统调用。
三者之间的对比(源头、时间、响应方式)
源头:中断由硬件设备产生、异常由程序产生、系统调用由应用程序产生
时间:中断持续时间短,用户几乎体会不到,异常会导致程序结束执行,系统调用持续时间由具体的系统调用而定
响应方式:中断为异步响应,异常为同步响应,系统调用可以是异步的也可以是同步的