[操作系统OS]第一章:操作系统启动、中断、异常和系统调用

操作系统启动

操作系统存在硬盘disk中,通过BIOS(基本IO处理系统)使得计算机开机的时候得以检测各种外设,然后才能加载相应的软件进行执行。

  1. 通电时首先段寄存器CS和指令寄存器IP能够确定一个内存地址,例如CS:IP = 0xf000:fff0,计算机BIOS写死就从这个地址开始执行代码完成接下来的动作
  2. 接着进行POST(加电自检),检查自身的设备能否正常工作(寻找显卡驱动啊,显示器,键盘…是否正常)
  3. 将Bootloader从硬盘中放置到内存中去(等等BIOS的一些基本功能)

加载方式:Bootloader一般放在硬盘的第一个主引导扇区中,BIOS通过访问这个扇区将BootLoader加载到内存中(一般来说地址为0x7c00),一般来说计算机第一个主引导扇区为512字节(说明Bootloader小于512Byte)。读取完成之后,跳转到CS:IP = 0000:7C00也就是加载的BootLoader内存所在地址。然后CPU的控制权就交给了BootLoader

  1. 然后Bootloader加载OS从硬盘到内存中,之后再跳转到OS在内存中的地址,将CPU交给OS去执行OS的代码
  2. CPU执行操作系统

操作系统与设备和程序交互(中断、异常和系统调用)

  • 系统调用:(来源于应用程序)应用程序主动向操作系统发出服务请求,来获得操作系统来提供的一些功能,同步或者异步时间点(返回结果时的处理时间不能预测)发生,一般是阻塞等待系统完成其他操作然后进行执行,不会重复发送同一条请求指令
  • 异常:(来源于不良的应用程序)非法指令或其它花的处理状态(e.g.内存出错),同步时间点发生(知道什么时候会发生,比如进行了除零操作就一定会发生之类的),会杀死或者重新执行意想不到的应用程序指令
  • 中断:(来源于外设)来自不同的硬件设备的计时器和网络的中断,异步时间点发生(不知道什么时候会发生),对用户程序透明也就是用户程序感知不到外设时不时的中断

中断处理机制

中断的处理是打断正常流程的操作,需要硬件和软件层面都做出相应的处理来进行相关的恢复操作以达到会用户程序无感知的目的。
**硬件(外设):**设置中断标记(CPU初始化),使得CPU知道中断产生,并根据中断是哪种中断,为此会产生对应的中断号,接着将中断号发给操作系统,从而操作系统可以根据这个中断号找到对应的处理历程

  • 将内部/外部事件设置中断标记
  • 中断事件的ID(程序访问的中断向量地址)

**软件(操作系统):**保存被打断的执行的现场,也就是处理状态,然后根据CPU给出的中断号查找到对应处理历程的地址,然后跳转至该地址执行来完成对应的处理操作。处理完成之后,恢复之前保存的处理状态

  • 保存当前处理状态
  • 中断服务程序处理
  • 清除中断标记
  • 恢复之前保存的处理状态

异常处理机制

执行到特定指令之后触发了异常事件,也会产生一个异常的id号,然后操作系统一样保存需要处理状态、执行异常的指令的地址、当前寄存器的一些内容等等,操作系统根据编号寻找相应的处理历程执行相应操作。处理完成之后对处理状态进行恢复,之后,重新执行这条指令,用户程序得以继续执行

系统调用处理机制

通常情况下,存在与每个系统调用相关的序号,系统调用接口根据这些序号来维护表的索引。系统调用接口调用内核态中预期的系统调用,并返回系统调用的状态和其它任何返回值。用户不需要知道系统调用是如何实现的,只需要获取API和了解操作新系统将什么作为返回结果。操作系统接口的细节大部分都隐藏在API中,并通过运行程序支持的库来管理。

  • 用户态:应用程序在执行的过程中,CPU执行的特权级的状态(很低,不能访问特殊机器指令和IO)。
  • 内核态:应用程序在执行的过程中,CPU执行的特权级的状态(高,操作系统可以执行CPU任何一条指令)。

系统调用时涉及到特权级从用户态到内核态的转换,应用程序和操作系统有各自的堆栈,这两个变化比函数调用的开销更大,但更安全和可靠。(而单个态中的程序调用是在一个栈空间实现参数的调用和返回)

跨越操作系统边界的开销(值得且必须)

  • 建立中断/异常/系统调用号与对应服务例程映射关系的初始化开销,并且需要维护处理历程表
  • 建立内核堆栈(操作系统和应用程序的堆栈不一样)
  • 操作系统不信任应用程序发出的请求,需要对其请求进行验证参数(操作系统会检查数据)
  • 内核态数据导出到用户态的地址空间时存在内存拷贝开销(DMA copy 无法减少)只能减少cpu copy和用户态内核态切换次数
  • 内核态独立地址空间TLB
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值