操作系统是什么?
操作系统是利用一个利用一个或多个处理器的硬件资源,为系统用户提供一组服务,它还代表用户管理辅助存储器和输入/输出(I/O)设备
1.1 基本构成
计算机由处理器、存储器和输入/输出部件组成,每类部件都有一个或多个模块,这些部件以某种方式互联,以实现计算机执行程序的主要功能。
计算机有4个主要的结构化部件:
- 处理器
- 内存
- 输入/输出模块(I/O)
- 系统总线
处理器(Processor)
控制计算机的操作,执行数据处理功能。只有一个处理器时,它通常指中央处理器(CPU)
內存(Main Memory)
- 存储数据和程序
- 此类存储器通常时易失性的,即当计算机关机或意外断电时,内存的内容会丢失
相对于此的是磁盘存储器,当计算机关机时,它的内容不会丢失
- 通常也称为实存储器( real memory)或主存储器( primary memory )
I/O模块(I/O Modules)
在计算机和外部环境之间移动数据
外部环境有各种外部设备组成,包括辅助存储器设备(eg.硬盘)、通信设备和终端
系统总线(System Bus)
在处理器、内存和输入/输出模块间提供通信的设施
上图的俯视图中:
处理器的一种功能是与存储器交换数据,它通常使用两个内部寄存器:
- 内存地址寄存器(MAR):用于确定下次读写的存储器地址
- 内存缓冲寄存器(MBR):用于放入要写入存储器的数据或从存储器中读取的数据
同理
- 输入/输出地址寄存器(I/O AR或I/O地址寄存器):用于确定一个特定的输入/输出设备
- 输入/输出缓冲寄存器(I/O BR或I/O缓冲寄存器):用于输入/输出模块和处理器间交换数据
内存模块有一组单元组成,这些单元由顺序编号的地址定义,每个单元包含一个二进制数,它可解释为一个指令或数据。
输入/输出模块在外部设备与处理器和存储器之间传送数据。输入/输出模块包含内存缓冲区,用于临时保存数据,知道它们被发送出去。
1.2 微处理器的发展
微处理器可以在一个芯片上容纳一个处理器内核,它的发明为台式计算机和便携式计算机带来了一场硬件革命。
多核微处理器
- 一个芯片上容纳多个处理器内核,共享执行单元
- 每个核还可以配多个硬件线程——逻辑处理器
片上系统(SoC)
- 片上系统不仅指CPU和高速缓存在一个芯片上,也包括系统中的其它硬件,如DSP、GPU、I/O设备(无线电和codecs)和内存
- 满足便携式设备的需求
图形处理单元GPU
- 利用单指令多数据技术,有效计算数据集
- 可以用于普通数值处理,如游戏的物理仿真计算或大型电子表格的计算
数字信号处理器DSP
- 对流信号如音频或视频进行处理
- 用于嵌入式I/O设备,如调制解调器
- 用于编码/解码语音和视频(多媒体数字信号编码器/解码器,codecs)
- 提供对加密和安全技术的支持
1.3 指令的执行
处理器执行的程序是由一组保存在存储器中的指令组成,最简单的指令处理包括两步:
单个指令所需要的处理成为一个指令周期,基本指令周期如下图
- 每个指令开始时,处理器从存储器中取一条指令,在典型的处理器中,程序计数器PC保存下一次要取的指令地址
- 取到的指令放在处理器中的指令寄存器IR中。指令中包含确定处理器将要执行的操作的位,处理器解释指令并执行对应的操作。这些动作大体可以分为4类
处理器-存储器:数据可以从处理器传送到存储器,或从存储器传送到处理器
处理器-I/O:通过处理器和I/O模块间的数据传送,数据可以输出到外部设备,或从外部设备向处理器输入数据
数据处理:处理器可以执行很多与数据相关的算术操作或逻辑操作
控制:某些指令可以改变执行顺序
1.4 中断
中断是一种机制,即允许其它模块(I/O、存储器)在处理器正常处理过程中打断其工作。
中断分类
中断分类 | 产生原因 |
---|---|
程序中断 | 在某种条件下由指令执行的结果产生 |
时钟中断 | 有处理器内部的计时器产生,允许操作系统按一定的规律执行函数 |
I/O中断 | 由I/O控制器产生,用于发信号通知一个操作系统的正常完成或各种错误条件 |
硬件失效中断 | 有诸如掉电或存储器奇偶校验错之类的故障产生 |
中断是提高处理器效率的一种手段
- 利用中断功能,处理器可以在I/O操作的执行过程中执行其他指令。
- 多数I/O设备处理速度都要远慢于处理器,未引入中断机制前,处理器必须暂停等待该设备,严重浪费处理器时间
中断与指令周期
中断处理
处理机制
硬件
在CPU初始化时设置中断使能标志
- 依据内部或外部事件设置中断标志
- 依据中断向量调用相应中断服务例程
软件
- 现场保存(CPU+编译器)
- 中断服务处理(服务例程)
- 清除中断标记(服务例程)
- 现场恢复(CPU+编译器)
简单处理过程
因中断导致的存储器和寄存器变化
多个断点
正在处理一个中断时,可以发生一个或多个中断。比如:一个程序正在从一条通信线上接收数据,同时要求打印结果。有两种方法:
- 正在处理一个中断时,禁止再发生中断
- 使用优先级策略
相应的,就产生了两种处理方式:
顺序中断处理
当正在处理一个中断时,禁止中断(对任何新的中断请求信号不予理睬,处理完这个再处理下一个)
缺点:没有考虑相对优先级和时间限制的要求
嵌套中断处理
定义中断优先级,允许高优先级的中断打断低优先级的中断处理程序的运行。
中断嵌套
硬件中断服务例程可被打断
- 不同硬件中断源可能在硬件中断处理时出现
- 硬件中断服务例程中需要临时禁止中断请求
- 中断请求会保持到CPU做出响应
异常服务例程可被打断
- 异常服务例程执行时可能出现硬件中断
异常服务例程可嵌套
- 异常服务例程可能出现缺页
中断、异常和系统调用
系统调用(system call) | 应用程序主动向操作系统发出的服务请求 |
---|---|
异常(exception) | 非法指令或者其他原因导致当前指令执行失败(如:内存出错)后的处理请求 |
中断(hardware interrupt) | 来自硬件设备的处理请求 |
系统调用
- 操作系统提供服务的编程接口
- 通常由高级语言编写(C或者C++)
- 程序访问通常是通过高层次的API接口而不是直接进行系统调用
- 三种最常用的应用程序编程接口(API)
※ Win32 API 用于 Windows
※ POSIX API 用于 POSIX-based systems (包括UNIX,LINUX,Mac OS X的所有版本)
※ Java API 用于JAVA虚拟机(JVM)
系统调用的实现
- 每个系统调用对应一个系统调用号。
系统调用接口根据系统调用号来维护表的索引
- 系统调用接口调用内核态中的系统调用功能实现,并返回系统调用的状态和结果。
- 用户不需要知道系统调用的实现。
需要设置调用参数和获取返回结果
操作系统接口的细节大部分都隐藏在应用程序编程接口后, 通过运行程序支持的库来管理
函数调用与系统调用的不同处
系统调用:
- INT和IRET指令用于系统调用
- 系统调用时,实现堆栈切换和特权级的转换
函数调用
- CALL和RET指令用于常规调用
- 常规调用时没有堆栈切换
中断、异常和系统调用比较
源头
- 中断:外设
- 异常:应用程序意想不到的行为
- 系统调用:应用程序请求操作提供服务
响应方式
- 中断:异步
- 异常:同步
- 系统调用:异步或同步
处理机制
- 中断:持续,对用户应用程序是透明的
- 异常:杀死或者重新执行意想不到的应用程序指令
- 系统调用:等待和持续
参考教材
《操作系统——精髓与设计原理(第九版)》 [美] William Stallings 著 陈向群 陈渝 译 电子工业出版社
课堂笔记,如有错误之处,敬请指正!