OS学习笔记-3(清华大学慕课)系统启动流程及中断处理

网友投稿 283 2022-09-21

OS学习笔记-3(清华大学慕课)系统启动流程及中断处理

系统启动流程

1.BIOS部分 电脑接通电源——>CPU通电,对寄存器做初始化——>CPU去内存中ROM部分(有RAM and ROM)里找指令——>ROM有个0-1MB的20位地址空间,BIOS就放在这里面,CPU此时会使用CS和IP(CS:IP,CS左移4位加IP)找到并访问地址为=FFFFFFF0的指令,该指令又会跳到BIOS的初始代码处——>此时BIOS相当于就启动起来了,此时会提供以下功能(基本输入输出,系统设置,系统启动程序)——>BIOS系统自检——>此时如果我们不进入BIOS使用它的功能,BIOS会执行默认设置的系统启动程序

2.加载操作系统部分 将主引导记录(BIOS-MBR,再后来是BIOS-GPT,现在基本98%都是UEFI标准)从磁盘的引导扇区(512B)加载进BIOS的0X:7C00位置——>跳转到0000:7C00——>控制权交给主引导记录Bootloader——>检查分区表是否正确——>加载分区引导记录——>控制权交给分区引导记录——>跳入加载程序——>加载程序从启动配置中读取启动配置信息——>依据启动配置信息,加载程序从磁盘中读取操作系统代码和数据(内核镜像)——>跳到操作系统代码的起始位置——>控制权交给操作系统内核代码

中断、异常和系统调用比较

中断的作用

方便与外界交互处理程序发生异常情况提供给应用程序系统调用服务

系统调用

应用程序主动给操作系统内核发出的服务请求

系统调用实例

C语言中调用printf()函数——>触发系统调用write()

中断嵌套

硬件中断服务例程可被打断不同硬件中断源可能硬件中断处理时出现硬件中断服务例程中需要临时禁止中断请求中断请求会保持到CPU左除响应

异常服务例程可被打断异常服务例程执行时可能出现硬件中断

指令与代码的区别

例如C语言中的代码经过编译器翻译,得到机器语言指令。其中高级语言的代码翻译(编译)的结果可能会对应多条指令。简单来说,指令就是处理器CPU能识别、执行的最基本的命令。

两种处理器状态

因为指令是被CPU所识别、执行的命令,所以上述根据指令是否可以被用户程序使用的划分方式就存在一个问题,CPU如何判断当前是否可以执行特权指令,即当前内存中存放的程序并交给CPU来处理的是否是用户程序。因此,操作系统给定了两种处理器状态

①用户态(目态) 此时CPU只能执行非特权指令②核心态(管态) 此时CPU无论是特权指令还是非特权指令都可以执行

至于如何控制CPU的这两种状态:用程序状态字寄存器PSW中的某个标志位来标识当前处理器处于什么状态,比如0为用户态,1为核心态

系统调用的实现

①每个系统调用对应一个系统调用号(如第三节图所示)系统调用接口根据系统调用号来维护表的索引②系统调用接口调用内核态中的系统调用功能实现,并返回系统调用的状态和结果③用户不需要知道系统调用的实现④需要设置调用参数和获取返回结果⑤操作系统接口的细节大部分都隐藏在应用编程接口后

函数调用和系统调用的不同

①系统调用:INT和IRET指令用于系统调用系统调用时,堆栈切换(一个是系统堆栈,一个是函数堆栈)和特权级的切换②函数调用:CALL和RET用于常规调用常规调用时没有堆栈切换

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:1.数学建模简介
下一篇:SocialMarketing:凯迪拉克《芯上人》:走出一条不一样的“跨界花路”!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~