操作系统是什么?
操作系统是利用一个利用一个或多个处理器的硬件资源,为系统用户提供一组服务,它还代表用户管理辅助存储器和输入/输出(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指令用于常规调用
- 常规调用时没有堆栈切换
中断、异常和系统调用比较
源头
- 中断:外设
- 异常:应用程序意想不到的行为
- 系统调用:应用程序请求操作提供服务
响应方式
- 中断:异步
- 异常:同步
- 系统调用:异步或同步
处理机制
- 中断:持续,对用户应用程序是透明的
- 异常:杀死或者重新执行意想不到的应用程序指令
- 系统调用:等待和持续
1.5 存储器的层次结构
计算机存储器的设计受到三个因素的限制
- 容量
- 速度
- 成本
但各项技术之间又往往存在着以下的关系
- 存期时间越快,每“位”价格越高
- 容量越大,每“位”价格越低
- 容量越大,存取速度越慢
对一个实际的计算机系统,存储器的价格与计算机其他部件的价格相比应该是合理的,因而存储器的设计往往需要在各项技术之间找到一个平衡点,但同时存储器的速度必须能跟得上处理器的速度。解决这些问题的方法在于使用存储器层次结构
自上而下
- 每个比特的价格递减
- 容量递增
- 存取时间递增
- 处理器访问存储器的频率递减
容量较大、价格较便宜的慢速存储器,是容量较小、价格较贵的快速存储器的后备。
存储器层次结构能够成功的关键是低层访问频率递减。
假定有一个二级存储器(内存+高速缓存),内存存取时间为1us,高速缓存存取时间为0.1us,且高
速缓存的命中率为95%,则访问一个字节的平均存取时间为:0.95×0.1+0.05×(0.1+1)=0.15(us) ```
程序访问的局部性原理
在执行程序期间,处理器的指令访存和数据访存呈现“簇”状(一组数据集合),例如:
- 循环:重复访问一小范围的指令集合;
- 数组操作:存取一簇数据。
经过很长一段时间,程序访问的“簇” 会改变,但在较短时间内,处理器主要访问存储器中固定的 “簇”。
如二级存储结构,程序当前访问的“簇”暂时存放在第一级存储器中,而第二级存储器包含所有指令和数据。
时间局部性:被引用过一次的存储器位置在最近的未来会被多次引用(通常在循环中)。
空间局部性:如果一个存储器的位置被引用,那么在最近的将来它附近的位置也会被引用
二级存储器
也称为辅助存储器,为非易失性外部存储器
用于存储程序或数据文件,其表现形式是程序员可以看到文件和记录,而不是单个字节或字
1.6 高速缓存
高速缓存对操作系统不可见,但它与其他存储管理硬件相互影响
1.6.1 动机
指令执行期间,处理器在取指时至少要访问一次内存,通常要多次访问内存用于取操作数或保存结果。但是处理器和内存的速度不匹配,处理器速度的提高一直快于内存访问速度的提高,即处理器执行指令的速度受限。为了解决这个问题,利用局部性原理,在处理器和内存之间提供一个容量小而速度快的存储器,也就是高速缓存。
1.6.2 高速缓存原理
高速缓存的目的是使访问速度接近现有最快的存储器(寄存器组),同时保持价格便宜的大存储容量。
1.6.3 高速缓存设计
此内容这里只简单的概括主要设计因素
在进行虚拟存储器和磁盘高速缓冲设计时,还需要解决如下六类问题
- 高速缓存大小
- 块大小
- 映射函数
- 置换算法
- 写策略
- 高速缓存的级数
高速缓存大小:小容量高速缓存会对性能产生明显的影响
块大小:高速缓存与内存之间的数据
映射函数:决定数据块占据哪个高速缓存单元
- 设计时要考虑两方面的约束:
- 读入一个块时,另一个块可能会被置换出高速缓存
- 映射函数越灵活,完成搜索以确定某个指定块是否位于高速缓存中的功能所需要的逻辑电路越复杂
1.7 直接内存存取
执行I/O操作三种可能的技术:可编程I/O、中断驱动I/O、 直接内存存取(DMA)
可编程I/O
I/O模块执行请求的动作并设置I/O状态寄存器中相应的位; 处理器执行I/O指令后,要定期检查I/O的状态,以确定I/O操作是否已经完成。
问题: 处理器在等待I/O操作完成期间需不断询问I/O模块的状态,严重降低了整个系统的性能。
中断驱动I/O
处理器给I/O模块发送I/O命令,然后继续做其它有用的工作, 当I/O模块准备好与处理器交换数据时,将打断处理器的执行并请求服务,处理器执行数据传送,然后恢复以前的执行过程
尽管比可编程I/O更有效,但处理器仍需要主动干预在存储器和I/O模块之间的数据传送,任何数据传送都必须完全通过处理器
直接内存存取(DMA)
由系统总线中的一个独立模块完成,或者并入一个I/O模块执行。
当处理器希望读或写一块数据时,给DMA模块产生一条命令,发送以下信息:
- 是否请求一次读或写
- 所涉I/O设备的地址
- 进行读或写的存储器起始位置
- 需要读或写的字数
DMA模块直接与存储器交互,传送整个数据块,一次传送一个字,无须处理器参与。传送完成,DMA模块发一个中断信号给处理器。因此,只在开始传送和传送结束时处理器才会参与
问题:在DMA传送过程中,当处理器需要访问总线时,因存在竞争,处理器将暂停一个总线周期,处理器的执行速度会变慢。尽管如此,仍比中断驱动和可编程I/O更有效
1.8 多处理器和多核计算机组织结构
对称多处理器(SMP)
SMP是具有以下特点的独立计算机系统:
- 具有两个或两个以上可比性能的处理器;
- 所有处理器共享内存和I/O设备,并通过总线或其他内部连接方式互连,从而每个处理器的访存时间大致上相同;
- 所有处理器共享对I/O设备的访问,通过相同的通道或者可以连接到相同设备的不同通道;
- 所有处理器可以执行相同的功能;
整个系统由一个统一的操作系统控制,为多个处理器及其程序提供作业、进程、文件和数据元素等各种级别的交互。
SMPd的突出特点是多处理器的存在对用户是透明的。
优点:
- 性能:如果计算机要做的工作包 含可以并行完成的部分, 那么它能提供更好的性能
- 可伸缩性:厂商可以提供一系列不同 价格和性能指标的产品, 其中产品性能可通过系统 中的处理器数量来配置
- 可用性:单个处理器的失效不会导 致停机
- 渐增式成长:用户可通过增加处理器的 数量来提高系统的性能
下图为其组织结构
多核计算机
多核(muliticore)计算机是指将两个或多个处 理器(核)组装在同一块芯片上。也称为芯片多处理器。
每个核上通常会包含组成一个独立处理器的所有零部件,如寄存器、流水线硬件、控制单元,以 及L1指令和数据高速缓存。现代多核芯片还可以包含L2高速缓存,甚至在某些芯片中包含L3高速缓存。
集群
附:计算机体系结构发展的五个时代
参考教材
《操作系统——精髓与设计原理(第九版)》 [美] William Stallings 著 陈向群 陈渝 译 电子工业出版社
课堂笔记,如有错误之处,敬请指正!
本文同时发布在CSDN中,链接:
https://blog.csdn.net/tangkcc/article/details/114794501
https://blog.csdn.net/tangkcc/article/details/114829480