文章目录

  • 1. 启动
  • 1.1 计算机体系结构概述
  • 1.2 计算机内存和硬盘布局
  • 1.3 开机顺序
  • 2. 中断、异常和系统调用
  • 2.1 背景
  • 2.2 中断、异常和系统调用相比较
  • 2.3 中断和异常处理机制
  • 2.4 系统调用的概念
  • 2.5 系统调用的实现
  • 2.6 程序调用与系统调用的不同之处
  • 2.7 开销


1. 启动

1.1 计算机体系结构概述

CPU, I/O, 内存通过总线连接

DISK:存放OS

BIOS:基本I/O处理系统

Bootloader:加载OS

BIOS 13H 中断指令参考 bios中断调用大全pdf_BIOS 13H 中断指令参考

1.2 计算机内存和硬盘布局

BIOS 13H 中断指令参考 bios中断调用大全pdf_运维_02

1.3 开机顺序

BIOS 13H 中断指令参考 bios中断调用大全pdf_BIOS 13H 中断指令参考_03

当电脑通电时,段寄存器CS和指令寄存器IP能够确定一个内存地址,例如CS:IP = 0xf000:fff0.
POST(加电自检),寻找显卡和执行BIOS。(显示器,键盘…是否正常)。
步骤:

  • BIOS: 将Bootloader从磁盘的磁盘的引导扇区(512字节)加载到0x7c00;跳转到CS:IP=0000:7c00的内存区域(以便下一步)
  • Bootloader:将操作系统的代码和数据从硬盘加载到内存中;跳转到操作系统的起始地址。

2. 中断、异常和系统调用

2.1 背景

  • 系统调用(来源于应用程序):应用程序主动向操作系统发出服务请求
  • 异常(来源于不良的应用程序):非法指令或者其他坏的处理结果(如:内存出错)
  • 中断(来源于外设):来自不同的硬件的计时器和网络的中断

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

  1. 计算机中,内核是被信任的第三方
  2. 只有内核可以执行特权命令
  3. 为了方便应用程序,通过操作系统向上层提供一个更简单一致的接口

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

BIOS 13H 中断指令参考 bios中断调用大全pdf_应用程序_04

  • 源头不同:
    中断:外设(如键鼠)
    异常:应用程序意想不到的行为(如除0操作)
    系统调用:应用程序请求操作提供服务
  • 处理时间不同:
    中断:异步(程序不知道什么时候产生)
    异常:同步(程序执行到某条特定指令一定会产生)
    系统调用:异步或同步(发出请求点是同步,返回点可能异步)
  • 处理响应不一样:
    中断:持续,对用户程序是透明的
    异常:杀死或者重新执行意想不到的程序指令
    系统调用:等待和持续

2.3 中断和异常处理机制

  • 中断/异常处理机制
    中断是外设的事件,异常是CPU的事件;中断/异常迫使CPU访问一些被中断和异常服务访问的功能。
  • 中断处理机制
    ①硬件:设置中断标记(CPU初始化)
    a.将内部/外部事件设置中断标记;
    b.中断事件的ID(程序访问的中断向量地址)
    ②软件(操作系统):
    a.保存当前处理状态
    b.中断服务程序处理
    c.清除中断标记
    d.恢复之前保存的处理状态
  • 异常处理机制
    异常:异常编号
    -保存现场
    -异常处理:杀死产生异常的程序;重新执行异常指令
    -恢复现场

2.4 系统调用的概念

BIOS 13H 中断指令参考 bios中断调用大全pdf_应用程序_05

  • 一条指令会触发一个系统调用
  • 程序访问主要是通过高层次的API接口而不是直接进行系统调用。(Win32——Windows,Java API——JVM……)
  • 系统调用时涉及到特权级从用户态到内核态的转换,应用程序和操作系统有各自的堆栈,这两个变化比函数调用的开销更大,但更安全和可靠。(而程序调用是在一个栈空间实现参数的调用和返回)。

2.5 系统调用的实现

  • 通常情况下,存在与每个系统调用相关的序号,系统调用接口根据这些序号来维护表的索引。
  • 系统调用接口调用内核态中预期的系统调用,并返回系统调用的状态和其它任何返回值。
  • 用户不需要知道系统调用是如何实现的,只需要获取API和了解操作新系统将什么作为返回结果。操作系统接口的细节大部分都隐藏在API中,并通过运行程序支持的库来管理。
  • 用户态:应用程序在执行的过程中,CPU执行的特权级的状态(很低,不能访问特殊机器指令和IO)。
  • 内核态:应用程序在执行的过程中,CPU执行的特权级的状态(高,操作系统可以执行CPU任何一条指令)。

2.6 程序调用与系统调用的不同之处

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

2.7 开销

中断、异常和系统调用跨越了操作系统和外设上的相关边界,跨越边界需要一定代价,代价是为了确保系统安全稳定运行。

  • 在执行时间上超过程序调用
  • 开销包括:
    ① 建立中断/异常/系统调用号与对应服务例程映射关系的初始化开销;
    ② 建立内核堆栈(操作系统和应用程序的堆栈不一样);
    ③ 验证参数(操作系统会检查数据);
    ④ 内核态映射到用户态的地址空间,更新页面映射权限(内存拷贝开销);
    ⑤ 内核态独立地址空间TLB。