主要内容

启动

  • 计算机体系结构概述
  • 计算机内存和硬盘布局
  • 开机顺序

中断、异常和系统调用

  • 背景
  • 中断、异常和系统调用相比较
  • 中断和异常处理机制
  • 系统调用的概念
  • 系统调用的实现
  • 程序调用与系统调用的不同之处
  • 开销

 

操作系统的启动

  操作系统启动主要和三部分有关:CPU,存储,I/O。操作系统的启动需要这三部分的配合。再未开机之前,操作系统存放在disk(硬盘)里面。要想让操作系统运转,首先需要得到BIOS的支持。

  BIOS是英文"Basic Input Output System"的缩略词,直译过来后中文名称就是"基本输入输出系统"。它是一组被写入到主板ROM芯片上的程序,用来控制硬件。BIOS最基础的功能有三个:

  1. 加电自检。通电后,BIOS会自动检测与主板相连接的硬件设备是否运行良好。

  2. 对硬件进行初始化。BIOS能设置与硬件相关的一些参数。

  3. 加载操作系统。BIOS能寻找装载硬盘中的OS并允许。

  本文重点介绍BIOS加载操作系统的过程。在硬盘上,除了OS以外,还有一个名为Bootloader的程序,一般放在硬盘的第一个主引导扇区。BIOS在加电自检以后,会将Bootloader从硬盘移动到内存当中。之后BootLoader获得了cpu的控制权,BootLoader在硬盘当中寻找操作系统的起始扇区并确定操作系统的大小,然后将OS的代码和数据从硬盘中读到内存中去,并跳转到OS的起始地址。然后BootLoader将cpu的控制权交给OS,此时,系统加载完毕,整个计算机系统都处于OS的控制之下。

 

  

操作系统交互(设备和程序)

  操作系统主要有三种交互手段,分别是系统调用,异常和中断。它们的定义如下:

系统调用:应用程序主动向操作系统发出的服务请求。来源于应用程序,目的是让操作系统帮助应用程序完成某个任务。

异常:非法指令或者其他坏的处理状态(如:内存出错),来源于应用程序在执行过程中出现的意想不到的情况。因为异常的出现,使得操作系统必须介入处理。

中断:是外部设备向操作系统提出的请求,来源于外部设备。中断让操作系统意思到,有外部设备希望得到操作系统的支持。

为什么应用程序不能直接访问外设

  应用程序访问外部设备必须通过OS,主要原因是操作系统是可信任的软件,应用程序是不可信任的软件。操作系统可以为应用程序提供安全的服务,如果让应用程序访问外设,可能造成系统崩溃。另外,这样可以使上层应用不用关注设备底层实现的细节,使用操作系统提供的接口,可以实现应用程序通用性的提升。即:

  1. 在计算机运行中,内核是被信任的第三方
  2. 只有内核可以执行特权指令
  3. 为了方便应用程序  

中断,异常,系统调用的区别和特点

  中断 异常 系统调用
源头 外部设备 应用程序意想不到的行为 应用程序请求操作提供服务
处理时间 异步 同步 异步与同步
响应 持续(对用户持续) 杀死或者重新执行意想不到的应用程序指令 等待和持续

中断,异常,系统调用的处理机制

中断的保存与处理机制

  中断和异常都有硬件的处理过程和软件的处理过程。

硬件:设置中断标记[CPU初始化]

1.将内部、外部事件设置中断标记

2.中断事件的ID(中断事件的ID指程序访问的中断向量地址)

软件

  1. 保存当前处理状态
  2. 中断服务程序处理
  3. 清除中断标记
  4. 恢复之前保存的处理状态

异常的处理机制

异常∶异常编号

  • 保存现场
  • 异常处理
    • 杀死产生了异常的程序
    • 重新执行异常指令
  • 恢复现场

系统调用的处理机制

  OS通过系统调用为应用程序提供服务

  程序访问主要是通过高层次的API接口而不是直接进行系统调用

  • Win32 API 用于 Windows
  • POSIX API用于POSIX-based systems(包括UNIX,LINUX,Mac OS ×的所有版本)
  • Java API 用于JAVA虚拟机

通常情况下,与每个系统调用相关的序号

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

系统调用接口调用内核态中预期的系统调用

  • 并返回系统调用的状态和其他任何返回值

用户不需要知道系统调用是如何实现的

  • 只需要获取API和了解操作新系统将什么作为返回结果操作
  • 系统接口的细节大部分都隐藏在API中
    • 通过运行程序支持的库来管理(用包含编译器的库来创建函数集)

跨越操作系统边界的开销

在执行时间上的开销超过程序调用

开销:

  • 建立中断/异常/系统调用号与对应服务例程映射关系的初始化开销
  • 建立内核堆栈
  • 验证参数
  • 内核态映射到用户态的地址空间
    • 更新页面映射权限
  • 内核态独立地址空间
    • TLB