操作系统-启动、中断、异常和系统调用

一、 启动

计算机组成: cpu,内存,io

操作系统存放位置: 硬盘

BIOS:基本I/O处理系统,计算机启动时加载的第一个程序,在内存中,有一部分空间被BIOS占用,加电时会从特定地址执行,执行自检,将bootloader从硬盘中加载到内存中去(一般bootloader在磁盘第一个扇区)

Bootloader: 将OS从硬盘中加载到内存(找到操作系统硬盘所在扇区,将操作系统读到内存中去)

二、 中断、异常和系统调用

1. 定义

系统调用(来源于应用程序):应用程序主动向操作系统发出服务请求

异常(来源于不良的应用程序):非法指令或其他坏的处理状态(内存出错)

中断(来源于外设):来自不同的硬件设备的计时器和网络的中断

2. 设置中断、异常、系统调用原因

  • 在计算机运行中,内核是被信任的第三方,应用程序不可信任
  • 只有内核可以执行特权指令
  • 为了方便应用程序,屏蔽底层硬件

3. 中断、异常、系统调用的区别

源头上看:

  • 中断:外设
  • 异常:应用程序意 向不到的行为
  • 系统调用:应用程序请求操作提供服务

处理时间:

  • 中断:异步(不知道什么时候产生)
  • 异常:同步
  • 系统调用:异步或同步

响应:

  • 中断:持续、对用户应用程序透明
  • 异常:杀死或者重新执行意想不到的应用程序指令
  • 系统调用:等待和持续

4. 中断和异常处理机制

1) 中断处理过程

中断表:产生中断异常之后需要知道中断、异常由哪一个特定中断服务程序来处理,为此需要建立一个表,表的key为中断号,value为特定的地址,地址为针对特定中断服务程序

硬件处理流程:

设置中断标志[cpu初始化]

  1. 将内部、外部事件何止为中断标志
  2. 中断事件的ID,发送给操作系统

软件处理流程:

  1. 保存当前处理状态
  2. 找到对应的中断处理程序,执行
  3. 清除中断标志
  4. 恢复之前保存好的处理状态

2) 异常:异常编号

  1. 保存现场
  2. 异常处理(杀死异常程序或重新执行异常指令)
  3. 恢复现场

3)系统调用

例子:

a. 系统调用概述:

  • 系统调用接口根据序号维护系统调用表索引
  • 系统调用接口调用内核态中预期的系统调用,并返回系统调用的状态和其他任何返回值
  • 用户不需要知道系统调用是如何实现的,只需要获取api和返回参数

b. 系统调用流程:

应用程序直接或间接通过lib访问系统调用接口,触发用户态到内核态的转换

用户态:特权级别低,不能直接访问机器指令

内核态:特权级别高,可以执行特权指令

c. 系统调用和一般函数调用区别:

应用程序发出函数调用后,在一个栈空间完成函数之间参数传递和返回;而应用程序和内核拥有各自的堆栈,因此调用系统调用后,需要切换堆栈(系统调用开销比一般函数调用高)

d. 跨越操作系统边界的开销:

在执行时间上开销超过系统调用

开销:

  • 建立中断/异常/系统调用号与对应服务程序映射关系的初始化开销(建立映射表)
  • 操作系统需要维护的内核堆栈
  • 操作系统不信任应用程序,接收到应用程序的调用请求后,会验证参数
  • 操作系统处理完数据之后,可能需要将结果从内核态拷贝到用户态
  • 应用程序执行可能会引起内存状态转变,tlb可能被刷新

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值