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——>检查分区表是否正确——>加载分区引导记录——>控制权交给分区引导记录——>跳入加载程序——>加载程序从启动配置中读取启动配置信息——>依据启动配置信息,加载程序从磁盘中读取操作系统代码和数据(内核镜像)——>跳到操作系统代码的起始位置——>控制权交给操作系统内核代码


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

中断的作用

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

系统调用

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

系统调用实例

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

中断嵌套

  • 硬件中断服务例程可被打断

  • 不同硬件中断源可能硬件中断处理时出现

  • 硬件中断服务例程中需要临时禁止中断请求

  • 中断请求会保持到CPU左除响应

  • 异常服务例程可被打断

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

指令与代码的区别

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

两种处理器状态

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

  • 用户态(目态)
    此时CPU只能执行非特权指令

  • 核心态(管态)
    此时CPU无论是特权指令还是非特权指令都可以执行

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

系统调用的实现

  • ①每个系统调用对应一个系统调用号(如第三节图所示)

    系统调用接口根据系统调用号来维护表的索引

  • ②系统调用接口调用内核态中的系统调用功能实现,并返回系统调用的状态和结果

  • ③用户不需要知道系统调用的实现

  • ④需要设置调用参数和获取返回结果

  • ⑤操作系统接口的细节大部分都隐藏在应用编程接口后

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

  • ①系统调用:INT和IRET指令用于系统调用

    系统调用时,堆栈切换(一个是系统堆栈,一个是函数堆栈)和特权级的切换

  • ②函数调用:CALL和RET用于常规调用

    常规调用时没有堆栈切换

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小怪兽会微笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值