操作系统的基本概念
操作系统的概念
计算机系统自下而上可大致分为:硬件、操作系统、应用程序、用户(与计组的分层不同)
操作系统管理各种计算机硬件,为应用程序提供基础,是计算机硬件与用户之间的中介
- 硬件提供基本的计算资源
- 应用程序规定按何种方式使用这些资源来解决用户的计算问题
- 操作系统控制和协调各用户的应用程序对硬件的分配与使用
操作系统 Operating System 是指控制和管理整个计算机系统的硬件与软件资源,合理地组织、调度计算机的工作与资源的分配,进而为用户和其他软件提供方便接口与环境的程序集合,操作系统是计算机系统中最基本的系统软件
操作系统的特征
操作系统是一种系统软件,但与其他系统软件和应用软件有很大的不同,它有自己的特殊性即基本特征,基本特征有:
并发 Concurrence
并发是指两个或多个事件在同一时间间隔内发生;在操作系统中,引入进程的目的是使程序能并发执行
操作系统的并发性是指同时存在多个运行的程序,具有处理和调度多个程序同时执行的能力
并发和并行的区别:
- 并发:同一时间间隔,即一段时间内,宏观上有多道程序在同时执行,而微观上这些程序仍是分时交替执行的
- 并行:同一时刻能完成两种或两种以上的工作;并行性是指系统可以进行并发,并行性需要有相关硬件的支持
共享 Sharing
资源共享即共享,是指系统中的资源可供内存中多个并发执行的进程共同使用,共享可分为以下两种资源共享方式
互斥共享方式
系统中的某些资源,如打印机,虽然可供多个进程使用,但为使得所打印或记录的结果不致造成混淆,应规定在一段时间内只允许一个进程访问该资源,不能出现打印机第一行打印 A 文档的内容、第二行打印 B 文档的内容
进程 A 使用某资源时,其他人想要使用就必须等 A 使用完了才可以使用,即使 A 被分时系统暂停了
这种资源共享方式称为互斥式共享,而把在一段时间内只允许一个进程访问的资源称为临界资源或独占资源
计算机系统中的大多数物理设备及某些软件中所用的栈、变量和表格,都属于临界资源,它们都要求被互斥地共享
同时访问方式
系统中还有另一类资源,这类资源允许在一段时间内由多个进程同时访问
这里所说的同时通常是宏观上的,而在微观上,这些进程可能是交替地对该资源进行访问即分时共享的
进程 A 被分时系统暂停后,进程 B 就可以使用,但从微观来看资源被交替的使用
可供多个进程“同时”访问的典型资源是磁盘设备,即允许若干个用户“同时”访问该文件
并发和共享是操作系统两个最基本的特征,两者之间互为存在的条件:
- 资源共享是以程序的并发为条件的,若系统不允许程序并发执行,则自然不存在资源共享问题
- 若系统不能对资源共享实施有效的管理,则必将影响到程序的并发执行,甚至根本无法并发执行
虚拟 Virtual
虚拟是指把一个物理上的实体变为若干逻辑上的对应物。物理实体(前者)是实的,即实际存在的;而后者是虚的,是用户感觉上的事物。用于实现虚拟的技术,称为虚拟技术
操作系统中利用了多种虚拟技术来实现虚拟处理器、虚拟内存和虚拟外部设备等
虚拟处理器技术:
采用让多道程序并发执行的方法,来分时使用一个处理器,让每个终端用户都感觉有一个中央处理器在专门为它服务
利用多道程序设计技术把一个物理上的 CPU 虚拟为多个逻辑上的 CPU,称为虚拟处理器
虚拟存储器技术:
将一台机器的物理存储器变为虚拟存储器,从逻辑上扩充存储器的容量
这时用户所感觉到的内存容量是虚的,我们把用户感觉到的存储器称为虚拟存储器
虚拟设备技术:
将一台物理 I/O 设备虚拟为多台逻辑上的 I/O 设备,并允许每个用户占用一台逻辑上的 I/O 设备
使原来仅允许在一段时间内由一个用户访问的设备变为在一段时间内允许多个用户同时访问的共享设备
操作系统的虚拟技术可归纳为:时分复用技术,如处理器的分时共享;空分复用技术,如虚拟存储器
异步 Asynchronism
一个程序想要使用一个临界资源,若没有其他程序就可以直接使用,否则要等其他程序释放了才可以使用
多道程序环境允许多个程序并发执行,但由于资源有限,进程的执行并不是一贯到底的,而是走走停停的,它以不可预知的速度向前推进(有人抢资源慢一点,没人抢资源快一点),这就是进程的异步性
异步性使得操作系统运行在一种随机的环境下,可能导致进程产生与时间有关的错误
只要运行的环境相同(如同样是有人抢资源的情况下),操作系统就须保证多次运行进程后都能获得相同的结果
操作系统的目标和功能
用户是雇主,计算机是机器,操作系统是有熟练技能的工人,能够控制和协调各个部件的工作,即操作系统对资源的管理
同时,工人必须接收雇主的命令,这就是“接口”,有了工人,机器就能发挥更大的作用,因此工人就成了“扩充机器”
操作系统有以下功能:
系统资源的管理者
处理机管理
在多道程序环境下,处理机的分配和运行都以进程(或线程)为基本单位,因而对处理机的管理可归结为对进程的管理
并发是指在计算机内同时运行多个进程,主要管理进程何时创建、何时撤销、如何管理、如何避免冲突、合理共享
进程管理的主要功能包括进程控制、进程同步、进程通信、死锁处理、处理机调度等
存储器管理
存储器管理是为了给多道程序的运行提供良好的环境,方便用户使用及提高内存的利用率
主要包括内存分配与回收、地址映射、内存保护与共享和内存扩充等功能
文件管理
计算机中的信息都是以文件的形式存在的,操作系统中负责文件管理的部分称为文件系统
文件管理包括文件存储空间的管理、目录管理及文件读写管理和保护等
设备管理
设备管理的主要任务是完成用户的 I/O 请求,方便用户使用各种设备,并提高设备的利用率
主要包括缓冲管理、设备分配、设备处理和虚拟设备等功能
用户与硬件之间的接口
为了让用户方便、快捷、可靠地操纵计算机硬件并运行自己的程序,操作系统还提供了用户接口
操作系统提供的接口主要分为两类:
- 命令接口:用户利用这些操作命令来组织和控制作业的执行
- 程序接口:编程人员可以使用它们来请求操作系统服务
命令接口
按作业控制方式的不同,可将命令接口分为联机命令接口和脱机命令接口,分别对应联机控制方式和脱机控制方式
联机命令接口,交互式命令接口:适用于分时或实时系统的接口,它由一组键盘操作命令组成
用户通过控制台或终端输入操作命令,向系统提出各种服务要求,如 Windows 里面使用
cmd调用命令脱机命令接口,批处理命令接口:适用于批处理系统,它由一组作业控制命令组成,用户不能直接干预作业的运行
事先用相应的作业控制命令写成一份作业操作说明书,连同作业一起提交给系统,如 Windows 的 .bat 文件
程序接口
程序接口由一组系统调用(也称广义指令)组成,用户只能通过用户程序间接使用系统调用来请求操作系统为其提供服务
图形接口 GUI 最终通过调用程序接口实现的,用户通过在图形界面上单击或使用快捷键,就能很方便地使用操作系统
严格来说,图形接口不是操作系统的一部分,但图形接口所调用的系统调用命令是操作系统的一部分
*操作系统用作扩充机器
没有任何软件支持的计算机称为裸机,它仅构成计算机系统的物质基础,在用户面前的是经过若干层软件改造的计算机
裸机在最里层,其外面是操作系统,操作系统所提供的资源管理功能和方便用户的各种服务功能,将裸机改造成功能更强、使用更方便的机器;因此,我们通常把覆盖了软件的机器称为扩充机器或虚拟机
操作系统的发展与分类
手工操作阶段
用户在计算机上算题的所有工作都要人工干预,如程序的装入、运行、结果的输出等
手工操作阶段(此阶段无操作系统)有两个突出的缺点:
- 用户独占全机,虽然不会出现因资源已被其他用户占用而等待的现象,但资源利用率低
- CPU 等待手工操作,CPU 的利用不充分
唯一的解决办法就是用高速的机器代替相对较慢的手工操作来对作业进行控制
批处理阶段
为了解决人机矛盾及 CPU 和 I/O 设备之间速度不匹配的矛盾,出现了批处理系统,操作系统开始出现
单道批处理系统
单道批处理系统是在解决人机矛盾及 CPU 和 I/O 设备速率不匹配的矛盾中形成的
单道批处理系统的主要特征如下:
- 自动性:在顺利的情况下,磁带上的一批作业能自动地逐个运行,无须人工干预
- 顺序性:磁带上的各道作业顺序地进入内存,先调入内存的作业先完
- 单道性:内存中仅有一道程序运行,当该程序完成或发生异常情况时,才换入其后继程序进入内存运行
问题:每次主机内存中仅存放一道作业,每当它在运行期间发出输入/输出请求后,高速的 CPU 便处于等待低速的 I/O 完成的状态,为了进一步提高资源的利用率和系统的吞吐量,引入了多道程序技术
多道批处理系统
多道程序设计技术允许多个程序同时进入内存并允许它们在 CPU 中交替地运行,这些程序共享系统中的各种硬/软件资源
当一道程序因 I/O 请求而暂停运行时,CPU 便立即转去运行另一道程序,让系统的各个组成部分都尽量去“忙”,使其整体在单位时间内的效率翻倍
多道批处理系统的设计和实现要比单道系统复杂很多,因为要充分利用各种资源,就要涉及各种资源的调度问题
多道程序设计的特点:
- 多道:计算机内存中同时存放多道相互独立的程序
- 宏观上并行:内存中的多道程序都处于运行过程中
- 微观上串行:内存中的多道程序轮流占有 CPU,交替执行
多道程序设计技术的实现需要解决下列问题:
- 如何分配处理器
- 多道程序的内存分配问题
- I/O 设备如何分配
- 如何组织和存放大量的程序和数据,以方便用户使用并保证其安全性与一致性
在批处理系统中采用多道程序设计技术就形成了多道批处理操作系统
优点:
- 资源利用率高,多道程序共享计算机资源,从而使各种资源得到充分利用
- 系统吞吐量大,CPU 和其他资源保持“忙碌”状态
缺点:用户响应的时间较长;不提供人机交互能力,用户既不能了解自己的程序的运行情况,又不能控制计算机
分时操作系统
所谓分时技术,是指把处理器的运行时间分成很短的时间片,按时间片轮流把处理器分配给各联机作业使用
若某个作业不能在分配给它的时间片内完成计算,则暂停该作业,把处理器让给其他作业使用,等待下一轮再继续运行
由于计算机速度很快,作业运行轮转得也很快,因此给每个用户的感觉就像是自己独占一台计算机
分时操作系统是指多用户共享一台主机,这些终端连接在主机上,用户可以同时与主机进行交互操作而互不干扰
实现分时系统最关键的问题是如何使用户能与自己的作业进行交互,即系统应能及时接收并及时处理命令并返回结果
分时系统操作系统是在多道批处理系统加上人机交互,具有与批处理系统不同的特征
分时系统的主要特征如下:
- 同时性,多路性:允许一台计算机与若干台终端相连接,终端上的这些用户可以同时或基本同时使用计算机
- 交互性:用户通过终端采用人机对话的方式直接控制程序运行,与同程序进行交互
- 独立性:系统中多个用户可以彼此独立地进行操作,互不干扰,感觉不到别人也在使用这台计算机
- 及时性:分时系统采用时间片轮转方式使一台计算机同时为多个终端服务,使用户请求能在很短时间内获得响应
虽然分时操作系统较好地解决了人机交互问题,但在一些应用场合,需要系统能对外部的信息在规定的时间(比时间片的时间还短)内做出处理(比如飞机订票系统或导弹制导系统),实时操作系统应运而生
实时操作系统
为了能在某个时间限制内完成某些紧急任务而不需要时间片排队,诞生了实时操作系统
这里的时间限制可以分为两种情况:
- 硬实时系统:某个动作必须绝对地在规定的时刻或规定的时间范围发生,如飞行器的飞行自动控制系统
- 软实时系统:能够接受偶尔违反时间规定且不会引起任何永久性的损害,如飞机订票系统、银行管理系统
在实时操作系统的控制下,计算机系统接收到外部信号后及时进行处理,并在严格的时限内处理完接收的事件
实时操作系统的主要特点是及时性和可靠性
*网络操作系统
网络操作系统把计算机网络中的各台计算机有机地结合起来,提供一种统一、经济而有效的使用各台计算机的方法,实现各台计算机之间数据的互相传送
网络操作系统最主要的特点是网络中各种资源的共享及各台计算机之间的通信
*分布式计算机系统
分布式计算机系统是由多台计算机组成并满足下列条件的系统:
- 系统中任意两台计算机通过通信方式交换信息
- 系统中的每台计算机都具有同等的地位,即没有主机也没有从机
- 每台计算机上的资源为所有用户共享
- 系统中的任意台计算机都可以构成一个子系统,并且还能重构
- 任何工作都可以分布在几台计算机上,由它们并行工作、协同完成
用于管理分布式计算机系统的操作系统称为分布式计算机系统,该系统的主要特点是:分布性和并行性
分布式操作系统与网络操作系统的本质不同是,分布式操作系统中的若干计算机相互协同完成同一任务
*个人计算机操作系统
个人计算机操作系统是目前使用最广泛的操作系统,它广泛应用于文字处理、电子表格、游戏中,常见的有 Windows、Linux 和 Macintosh 等
操作系统的发展历程如图所示:

此外,还有嵌入式操作系统、服务器操作系统、智能手机操作系统等
额外:这里的脱机处理指把穿孔卡输入进磁带,CPU 直接从磁带提取数据,以提高 I/O 速度,可能仅提高 I/O 没使用批处理
操作系统的运行环境
操作系统的运行机制
计算机系统中有两种指令:特权指令和非特权指令,特权指令是指计算机中不允许用户直接使用的指令
相应的有两种处理器状态,核心态和用户态:
核心态:可以运行特权指令和非特权指令,这里面的程序叫做管理程序(系统内核程序),用来管理用户态的程序
如 I/O 指令、置中断指令,存取用于内存保护的寄存器等,为了安全起见代替用户态执行这些指令
用户态:只能运行非特权指令,里面的程序是用户自编程序(应用程序)
现代计算机几乎都是层次式的结构,与硬件关联较紧密的模块处于最低层,其次是运行频率较高的程序
这两部分内容构成了操作系统的内核,这部分内容的指令操作工作在核心态

内核是计算机上配置的底层软件,是计算机功能的延伸,大多数操作系统的内核包括 4 方面的内容:
时钟管理
在计算机的各种部件中,时钟是最关键的设备
时钟的第一功能是计时,操作系统需要通过时钟管理,提供标准的系统时间;通过时钟中断的管理,可以实现进程的切换
- 在分时操作系统中采用时间片轮转调度
- 在实时系统中按截止时间控制运行
- 在批处理系统中通过时钟管理来衡量一个作业的运行程度
因此,系统管理的方方面面无不依赖于时钟
中断机制
中断机制是操作系统各项操作的基础,现代操作系统是靠中断驱动的软件
键盘或鼠标信息的输入、进程的管理和调度、系统功能的调用、设备驱动、文件访问等,无不依赖于中断机制
?中断机制中,只有一小部分功能属于内核,它们负责保护和恢复中断现场的信息,转移控制权到相关的处理程序
这样可以减少中断的处理时间,提高系统的并行处理能力?(相关控制处理程序不属于内核?)
原语
原语 Atomic Operation 是具有以下特点的程序(原语各自完成一个规定的操作):
- 处于操作系统的最低层,是最接近硬件的部分,通常可有硬件实现
- 这些程序的运行具有原子性,其操作只能一气呵成(主要从系统安全性和便于管理考虑)
- 这些程序的运行时间都较短,而且调用频繁
定义原语的直接方法是关闭中断,让其所有动作不可分割地完成后再打开中断
系统中的设备驱动、CPU 切换、进程通信等功能中的部分操作都可定义为原语,使它们成为内核的组成部分
系统控制的数据结构及处理
为了实现有效的管理,系统需要一些基本的操作,常见的操作有以下 3 种:
进程管理:进程状态管理、进程调度和分派、创建与撤销进程控制块等
选择题:进程调度可不需要硬件支持,它仅需要软件来进行调度
存储器管理:存储器的空间分配和回收、内存信息保护程序、代码对换程序等
设备管理:缓冲区管理、设备分配和回收等
核心态指令实际上包括系统调用类指令和一些针对时钟、中断和原语的操作指令
中断和异常的概念
在操作系统中引入核心态和用户态后,就要考虑它们如何切换,操作系统内核工作在核心态,而用户程序工作在用户态
在实际操作系统中,CPU 运行上层程序时唯一的进入核心态的途径就是通过中断或异常
使用状态寄存器的一位记录是核心态或用户态,发生中断时,由**硬件改为核心态**,中断程序执行完后由特权指令改回用户态
中断是操作系统中非常重要的一个概念,对一个运行在计算机上的实用操作系统而言,缺少了中断机制,将是不可想象的
操作系统的发展过程大体上就是一个想方设法不断提高资源利用率的过程,而中断在程序并未使用某种资源时,把它对那种资源的占有权释放,从而提高资源利用率
中断和异常的定义
中断 Interruption,外中断:来自 CPU 执行指令以外的事件的发生,如设备发出的 I/O 结束中断
时钟中断,表示一个固定的时间片已到,让处理机处理计时、启动定时运行的任务等
异常 Exception,内中断:源自 CPU 执行指令内部的事件,如程序的非法操作码、缺页、陷入指令等
对异常的处理一般要依赖于当前程序的运行现场,而且异常不能被屏蔽,一旦出现应立即处理

中断处理的过程
大部分计算机,中断处理流程如下:
关中断:在保护断点和现场期间不能被新的中断所打断,必须关中断
否则若断点或现场保存不完整,就不能正确地恢复并继续执行现行程序
保存断点:断点可以压入堆栈,也可以存入主存的特定单元中,断点信息无法由软件访问,故由硬件实现
引出中断服务程序:中断服务程序的入口地址的获得方式,硬件向量法和软件查询法
- 硬件向量法:通过硬件产生中断向量地址,再由中断向量地址找到中断服务程序的入口地址
- 软件查询法:用软件编程的办法寻找入口地址
注意:硬件产生的实际上是中断类型号,而中断类型号指出了中断向量存放的地址,因此能产生中断向量地址
保存现场和屏蔽字:进入中断服务程序后首先要保存现场和中断屏蔽字,现场信息是指用户可见的工作寄存器的内容
注意:现场和断点,这两类信息都不能被中断服务程序破坏,现场信息可以直接用指令保存到栈中,由软件实现
开中断:允许更高级中断请求得到响应,实现中断嵌套
执行中断服务程序:这是中断请求的目的
关中断:保证在恢复现场和屏蔽字时不被中断
恢复现场和屏蔽字:将现场和屏蔽字恢复到原来的状态
开中断、中断返回:中断服务程序的最后一条指令通常是一条中断返回指令,返回到原程序的断点处,继续执行原程序
1~3 在 CPU 进入中断周期后,由中断隐指令(硬件自动)完成;4~9 由中断服务程序完成
系统调用
所谓系统调用,是指用户在程序中调用操作系统所提供的一些子功能,系统调用可视为特殊的公共子程序
操作系统掌管所有共享资源,为了让资源并发和安全的执行,用户程序必须通过系统调用让操作系统代为完成
这些系统调用按功能大致可分为如下几类:
- 设备管理:完成设备的请求或释放,以及设备启动等功能
- 文件管理:完成文件的读、写、创建及删除等功能
- 进程控制:完成进程的创建、撤销、阻塞及唤醒等功能
- 进程通信:完成进程之间的消息传递或信号传递等功能
- 内存管理:完成内存的分配、回收以及获取作业占用内存区大小及始址等功能
系统调用涉及资源管理,所以理应由操作系统内核完成,运行在核心态,用户通过陷入指令来调用系统调用
这么设计的目的是:用户程序不能直接执行对系统影响非常大的操作,必须通过系统调用的方式请求操作系统代为执行,以便保证系统的稳定性和安全性,防止用户程序随意更改或访问重要的系统资源,影响其他进程的运行
操作系统的运行环境就可以理解为:用户程序需要管理程序服务时,通过陷入指令进入核心态,运行管理程序;运行出现异常,被迫进入核心态;管理程序运行结束时,就退出中断处理程序或异常处理程序,返回断点处继续执行

在操作系统这一层面上,我们关心的是系统核心态和用户态的软件实现与切换
下面列举一些由用户态转向核心态的例子:
- 用户程序要求操作系统的服务,即系统调用
- 发生一次中断
- 用户程序中产生了一个错误状态
- 用户程序中企图执行一条特权指令
从核心态转向用户态由一条指令实现,这条指令也是特权命令,一般是中断返回指令
注意:由用户态进入核心态,所用的堆栈也可能需要由用户堆栈切换为系统堆栈,但这个系统堆栈也是属于该进程的
若程序的运行由用户态转到核心态,则会用到访管指令,访管指令只能是在用户态使用的,它不是特权指令
大内核和微内核
对操作系统在核心态应该提供什么服务、怎样提供服务,形成了两种主要的体系结构:大内核和微内核
大内核:将操作系统的主要功能模块都作为系统内核,运行在核心
优点:高性能
缺点:内核代码庞大,结构混乱,难以维护
微内核:只把最基本的功能保留在内核
优点:内核功能少,结构清晰,方便维护
缺点:需要频繁地在核心态和用户态之间切换,性能低
但相当多的实验数据表明,体系结构不是引起性能下降的主要因素,体系结构带来的性能提升足以弥补切换开销带来的缺陷
📝 个人补充与原笔记精华
IMPORTANT
- 处于内核态(核心态、管态)时,运行的是内核程序,此时可以执行特权指令。
- 处于用户态(目态)时,运行的是应用程序,此时只能执行非特权指令。
NOTE
陷入指令是唯一一个只能在用户态执行,而不能在核心态执行的指令。执行陷入指令后立刻引发一个内中断,从而 CPU 进入核心态。
