启动,中断,异常和系统调用

一. 计算机系统启动过程
CPU加电之后,第一条指令在哪里?
(内存分成RAM和ROM,ROM大小大约1M左右,这就是我们熟知的BIOS固件)
根据CS和IP寄存器的值,求出执行的第一条指令的位置。

PC就是访问的第一条指令的起始位置,PC换算出的物理地址为0xFFFF0,这个地址就是1MB往下16字节的位置。
这块代码它为了从磁盘上读数据,BIOS里需要提供这样一些功能,分别为:
1.基本的输入输出
2.然后系统的配置信息
3.开机自检程序
4.系统自启动程序
依据这些设置,系统执行它的启动程序。就是把硬盘里的加载程序和操作系统内容先后加载到cpu当中当中来。
在这里插入图片描述
具体过程:
在BIOS初始化完成之后,BIOS它就会从磁盘上把引导散区的程序(
引导散区长度512字节) 读取到cpu的指定位置0x7C00。然后cpu就跳转到该固定位置,把控制权转到从磁盘上读进来的这个程序,我们称他为 “加载程序”(Bootloader)。Bootloader将操作系统的代码从硬盘读到内存里头来,并且能把控制权交给操作系统,跳到OS的起始地址来继续执行操作系统功能,这样OS就可以在内存中进行必要工作。

二. 中断,异常和系统调用
前面提到,控制权转给操作系统内核,但是在操作系统内核之上还有很多的应用程序,可以信任的内核必须对外界提供某种访问的接口,另外我们需要提出中断机制,当外设与系统有交互的时候需要知道怎么来处理,还有应用程序在执行过程当中对于意外的情况要知道怎么来处理。操作系统内核和外界打交道基本上就是中断,异常和系统调用。
1.中断,异常,系统调用之比较
中断:是外设对操作系统提出的处理请求。
异常:是非法指令或者其他原因导致的指令执行失败之后的处理请求,处理方法可能会是说我终止程序,也可能会是说解决遇到的问题之后重新执行这条指令。
系统调用:应用程序主动向操作系统发出的服务请求。
在这里插入图片描述
这里的同步和异步是指:函数或方法被调用的时候,调用者是否得到最终结果。直接得到最终结果的,就是同步调用。不直接得到最终结果的,就是异步调用。
2.中断和异常处理机制
硬件上:
(1)在CPU做初始化的时候要对中断使能,使能之后我才能够进行中断的处理。
(2)依据外部/内部事件,外设产生中断标记,CPU根据中断标记产生中断号,把中断号发给操作系统
(3)操作系统根据中断号查询到中断服务例程的起始地址,跳到地址执行。
软件上(中断):
(1)保存当前处理状态
(2)中断服务例程处理
(3)清除中断标记
(4)恢复之前保存的处理状态
软件上(异常):
(1)保存现场
(2)异常处理:杀死产生异常的程序/重新执行异常指令
(3)恢复现场
3.系统调用的概念及实现
在这里插入图片描述
在这里插入图片描述
4.程序调用和系统调用不同之处
在这里插入图片描述
用户态和内核态是CPU的两个不同工作状态。CPU的工作状态,内核态可以执行更高等级的指令,例如控制磁盘、屏幕等IO,读写整个内存等等,用户态只能执行有限的指令,比如±*/运算。
所谓的进入内核态,就是CPU进入更高特权级的工作模式
5.系统调用开销
在这里插入图片描述

发布了2 篇原创文章 · 获赞 0 · 访问量 97

猜你喜欢

转载自blog.csdn.net/weixin_43864534/article/details/104098904