长话短说,就记下笔记,期待期末90+,同时希望能帮助到有需要的同学。
练习题:【第一章】操作系统概述练习题
目录
一、操作系统的目标和作用
OS的目标:方便性、有效性、可扩充性、开放性。
OS的作用:(书上P003)
● 作为用户与计算机硬件系统之间的接口
- 命令方式:指由OS提供了一组联机命令 (语言), 用户可通过键盘输入有关命令,来直接操纵计算机系统。
- 系统调用方式:OS提供了一组系统调用,用户可在自己的应用程序中通过相应的系统调用,来操纵计算机。(下文详细介绍)
- 图标–窗口方式:用户通过屏幕上的窗口和图标来操纵计算机系统和运行自己的程序。
● 作为计算机系统资源的管理者 (处理机管理,存储器管理,I/O设备管理,文件管理)
● 实现了对计算机资源的抽象(用作扩充机器)
I/O设备管理软件提供读写接口,文件管理软件提供操作文件接口。通常把覆盖了这些软件的机器称为扩充机器或虚拟器。它向用户提供了一个对硬件操作的抽象模型,用户可利用该模型提供的接口使用计算机,无需了解物理接口实现的细节,从而使用户更容易地使用计算机的硬件资源。由此可见,OS是铺设在计算机硬件上的多层软件的集合。
总的来说:OS是直接控制和管理计算机硬件、软件资源,合理地对各类作业进行调度,以方便用户使用的程序集合。
二、操作系统的发展过程
2.1 无OS
- 用户独占全机
- CPU等待人工操作
- 减少了CPU的空闲时间
- 提高了I/O速度
2.2 有OS
【1】批处理系统
批处理是指计算机系统对一批作业自动进行处理的一种技术。
1、单道批处理系统
为实现对作业的连续处理,需要先把一批作业以脱机方式输入到磁带上,并在系统中配上监督程序(Monitor),在它的控制下,使这批作业能一个接一个地连续处理,直至磁带上的所有作业全部完成,这样便形成了早期的批处理系统。虽然系统对作业的处理是成批进行的,但在内存中始终只保持一道作业,故称为单道批处理系统 。
虽然其提高了系统资源的利用率和系统吞吐量,但是缺点也显而易见:
内存中仅有一道程序,在程序运行中发出I/O请求后,CPU处于等待状态。
2、多道批处理系统
用户所提交的作业先存放在外存上,排成一个“后备队列”,由作业调度程序按照一定的算法从队列中选择若干作业进入内存(后续会讲解),这些作业共享CPU和系统中的各种资源。
由于存在多个程序,因此CPU可以在一个作业的I/O阶段进行另一个作业的处理。多道程序交替运行,使CPU始终处于忙碌状态。
【2】分时系统
如果说推动多道批处理系统形成和发展的主要动力,是提高资源利用率和系统吞吐量,那么,推动分时系统形成和发展的主要动力,则是用户的需求。或者说,分时系统是为了满足用户需求所形成的一种新型OS。它与多道批处理系统之间,有着截然不同的性能差别。
概念:是一种联机的多用户交互式的操作系统。其将系统处理机时间与内存空间按一定的时间间隔,轮流地切换给各终端用户的程序使用。由于时间间隔很短,每个用户的感觉就像他独占计算机一样。
表现:
- 人—机交互
- 共享主机
特征:
- 多路性、独立性、及时性、交互性
【3】实时操作系统
所谓“实时”,是表示“及时”,而实时系统是指系统能及时(或实时)响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致地运行。
实时系统的类型:
-
实时控制系统:要求计算机能尽快处理测量系统测得的数据,以尽快实施响应控制。如:工业控制;导弹发射;飞机飞行。
-
实时信息系统:要求计算机能对终端设备发来的服务请求及时予以正确的回答。如:订票系统;情报检索系统
特征:
- 快速的响应时间、有限的交互能力、 高可靠性
【4】三种基本操作系统的比较:
三、操作系统的基本特征
前面所介绍的多道批处理系统、分时系统和实时系统还共同具备:并发、共享、虚拟、异步四个基本特征。
3.1 并发
区别并发和并行:
- 并发:指两个或多个事件在同一时间间隔内发生。
-
并行:指两个或多个事件在同一时刻发生。
3.2 共享
指系统中的资源供内存中的多道程序所共同使用。
目前主要有以下两种共享方式(一定要注意区分):
● 互斥共享方式
系统中的某些资源,如打印机、磁带机,虽然它们可以提供给多个进程(线程)使用,但为使所打印或记录的结果不致造成混淆,应规定在一段时间内只允许一个进程(线程)访问该资源,我们把这种资源共享方式称为互斥式共享。
● 同时访问方式
允许在一段时间内由多个进程 “同时”对它们进行访问。这里所谓的“同时”往往是宏观上的,而在微观上,这些进程可能是交替地对该资源进行访问。
并发和共享是多用户(多任务)OS的两个最基本的特征。它们又是互为存在的条件。
3.3 虚拟
指通过某种技术把一个物理实体变成若干个逻辑上的对应物。
物理实体(前者)是实的, 即实际存在的;而后者是虚的,是用户感觉上的东西。相应地,用于实现虚拟的技术,称为虚拟技术。在OS中利用了多种虚拟技术,分别用来实现虚拟处理机、虚拟内存、 虚拟外部设备和虚拟信道等。
在OS中是利用时分复用和空分复用技术来实现“虚拟”的,这里不做探讨(P016有介绍)
3.4 异步性
由于资源等因素的限制,使进程的执行通常都不是“一气呵成”,那么系统中并发执行的多道程序“走走停停”,以不可预知的速度向前推进。
四、操作系统的主要功能
引入OS的主要目的:为多道程序的运行提供良好的运行环境,以保证多道程序能有条不紊、高效地运行,并能最大程度地提高系统中各种资源的利用率和方便用户的使用。为此,在传统的OS中应具备处理机管理、存储器管理、设备管理和文件管理等基本功能。此外,为了方便用户使用OS,还需要向用户提供方便的用户接口。
由于这一章主要讲OS概述,所以详细内容请期待下次更新哦!
【1】处理机管理功能
- 进程控制
- 进程同步
- 进程通信
- 调度
【2】存储器管理功能
- 内存分配
- 内存保护
- 地址映射
- 内存扩充
【3】设备管理功能
- 缓冲管理
- 设备分配
- 设备处理
【4】 文件管理功能
- 文件存储空间的管理
- 目录管理
- 文件的读/写管理和保护
【5】OS与用户之间的接口
- 用户接口
- 程序接口
【6】现代操作系统的新功能
- 系统安全
- 网络的功能和服务
- 支持多媒体
五、操作系统的运行机制
主要介绍上图涉及的基本概念,建议一定要理解,之后学到后面,这张图将会焕然一新!
我们普通程序员写的程序就是:“ 应用程序 ”
微软、苹果哪些负责实现操作系统的高手,写的就是“ 内核程序 ”。
由很多内核程序组成的叫:“操作系统内核”,或俗称“内核”。它是OS中最重要最核心的部分,也是最接近硬件的部分。
应用程序只能使用“非特权指令”,如加法、减法指令等。
但是如内存清零指令,这些特权指令影响很大,只能内核程序来使用。
CPU有两种状态:内核态 和 用户态
CPU有个叫程序状态寄存器(PSW),来标记是什么状态。
- 处于内核态,说明此时正在运行的是内核程序,此时可以执行特权指令
- 处于用户态,说明此时正在运行的是应用程序,此时只能执行非特权指令
这里看不懂,继续往下面看,看完体系结构和中断后,说不定就茅舍顿开了!
六、操作系统体系结构
建议还是认真去看看书上P24~P33的文字介绍,不然学到后面,你就会发现学的很散。
在分别介绍它们之前,先带大家介绍下:内核
内核是操作系统最基本、最核心的部分。实现操作系统内核功能的哪些程序就是内核程序。
上图中时钟管理、中断处理和原语,就顺便在这里简介以下吧,后面会详解的。
● 时钟管理:实现记时功能
● 中断处理:实现中断机制
● 原语:是一种特殊的程序,处于操作系统最底层,是最接近硬件的部分。这种程序的运行具有原子性(其运行只能一气呵成,不可中断)。运行时间较短,调用频繁
● 注意:
- 操作系统内核需要运行在内核态
- 操作系统的非内核需要运行在用户态
6.1 模块化结构
模块化是将操作系统按功能划分为若干个具有一定独立性的模块。每个模块具有某方面的管理功能,并规定好各模块间的接口,使各模块之间能通过接口进行通信。还可以进一步将各模块细分为若干个具有一定功能的子模块,同样也规定好各子模块之间的接口。把这种设计方法称为模块-接口法,如下图所示为由模块、子模块等组成的模块化操作系统结构。
特性:
● 将内核划分为多个模块,各模块之间相互协作。
● 内核=主模块+可加载内核模块
- 主模块:只负责核心功能,如进程调度、内存管理
- 可加载内核模块:可以动态加载新模块到内核,而无需重新编译整个内核 (优势)
优点:
● 模块间逻辑清晰易于维护,确定模块间接口后,即可多模块同时开发
● 支持动态加载新的内核模块(如按照设备驱动程序、安装新的文件系统模块到内核),增强OS适应性
● 任何模块都可以直接调用其他模块,无需采用信息传递进行通信,效率高
缺点:
● 模块间的接口定义未必合理、实用
● 模块间相互依赖, 更难调试和验证
6.2 分层结构
最底层是硬件,最高层是用户接口,每层可调用更低一层。
特性:
● 内核分多层,每层可单向调用更低一层提供的接口
优点:
● 便于调试和验证, 自底向上逐层调试验证
● 易扩充和易维护, 各层之间调用接口清晰固定
缺点:
● 仅可调用相邻低层,难以合理定义各层的边界
● 效率低, 不可跨层调用, 系统调用执行时间长
6.3 大内核 和 微内核
微内核特性:只把中断、原语、进程通信等最核心的功能放入内核。进程管理、文件管理、设备管理等功能以用户进程的形式运行在用户态 。
大内核特性:所有的系统功能都放在内核里(大内核结构的OS通常也采用了“模块化”的设计思想)
微内核优点:
● 内核小功能少、易于维护,内核可靠性高
● 内核外的某个功能模块出错不会导致整个系统崩溃
大内核优点:
● 性能高,内核内部各种功能都可以直接相互调用
微内核缺点:
● 性能低,需要频繁的切换用户态/核心态。
● 用户态下的各功能模块不可以直接相互调用, 只能通过内核的"消息传递"来间接通信
大内核缺点:
● 内核庞大功能复杂, 难以维护
● 大内核中某个功能模块出错, 就可能导致整个系统崩溃
6.4 外核(略)
非常少见!!!
七、中断和异常
CPU上会运行两种程序,一种是操作系统内核程序(整个系统的管理者),一种是应用程序。
在合适的情况下,操作系统内核会把CPU的使用权主动让给应用程序(第二章进程管理相关内容)。但是你不能一直占着CPU,一直运行这个应用程序啊!!!
那么“ 中断 ”就是让操作系统内核夺回CPU使用权的唯一途径。
扩充:
内核态 -> 用户态:执行一条特权指令(修改PSW的标志位为“用户态”),这个动作意味着操作系统将主动让出CPU的使用权。
用户态 -> 内核态:由“中断”引发,触发中断信号意味着操作系统将强行夺回CPU的使用权。
中断机制的基本原理:
首先检查中断信号是内中断还是外中断,然后会根据中断信号的类型去查询“中断向量表”,以此来找到相应的中断处理程序在内存中的位置。
显然,中断处理程序一定内核程序,需要运行在“内核态”。
7.1 内中断
与当前执行的指令有关,中断信号来源于CPU内部。
【陷阱、陷入】:由陷入指令引发,是应用程序故意引发的
【故障】:由错误条件引起的, 可能被内核程序修复。内核程序修复故障后会把CPU使用权还给应用程序,让它继续执行下去。如: 缺页故障。
【终止】由致命错误引起, 内核程序无法修复该错误,因此一般不再将CPU使用权还给引发终止的应用程序,而是直接终止该应用程序。如:整数除0,非法使用特权指令。
发生情况举例:
例1:试图在用户态下执行特权指令(比如黑客向正在运行的应用程序植入一条特权指令)
例2:执行除法指令时发现除数为0
例3:有时候应用程序想请求操作系统内核的服务,此时会执行一条特殊的指令(陷入指令),该指令会引发一个内部中断信号。
执行 “陷入指令”,意味着应用程序主动地将CPU控制权还给操作系统内核。例如:
“系统调用” 就是通过陷入指令完成的。
7.2 外中断
与当前执行的指令无关,中断信号来源于CPU外部。
例1:时钟中断(由时钟部件发来的中断信号)
因为这个时钟部件每隔一个时间片(如50ms)会给CPU发送一个时钟中断信号,因此这可以用来实现多道程序并发运行(特别重要)。
解释:比如CPU在运行应用程序1,50ms之后会收到一个时钟中断信号,那么CPU转而运行时钟中断的内核程序,当处理完成后,内核程序发现应用程序1已经运行了50ms了,因此为了公平起见,接下来让另一个应用程序上CPU运行…………
例2:I/O中断(由输入/输出设备发来的中断信号)
比如说某一个应用程序可能会请求打印机的打印服务,那么打印机在打印输出完成后,会向CPU发送中断信号,用来通知CPU我的任务已经完成了,接下CPU处理I/O中断的内核程序……
其实每条指令执行结束后,都会例行检查是否有外中断信号需要处理。
八、系统调用
知识点回顾:
操作系统作为用户和计算机硬件之间的接口,需要向上提供一些简单易用的服务。主要包括命令接口和程序接口。其中程序接口由一组系统调用组成。
GUI:图形用户界面
联机命令接口(交互式命令接口):适用于分时或实时操作系统,cmd中的各种命令就是联机命令接口
脱机命令接口(批处理命令接口):适用于批处理系统,写好了一个.bat文件再在cmd中执行它就是脱机命令接口
系统调用:是操作系统提供给应用程序(程序人员)使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以通过系统调用来请求获得操作系统内核的服务。
系统调用与库函数的区别:
- 有的库函数是对系统调用的进一步封装(使程序员编程方便,如“创建一个新文件”的函数)
- 有的库函数没有使用系统调用(如“取绝对值”的函数)
系统调用是非常必须的,等下一章我们学到进程同步,当两个进程并发的共享一个资源时,比如说一个文件,你在写,我也在写,最终不乱七八糟了嘛?
解决方法(原理):由操作系统内核对共享资源进行统一的管理, 并向上提供“系统调用”, 用户进程想要使用打印机这种共享资源, 只能通过系统调用向操作系统内核发出请求。内核会对各个请求进行协调处理。
应用程序通过系统调用请求操作系统的服务。而系统中的各种共享资源都由操作系统内核统一掌管,因此凡是与共享资源有关的操作(如存储分配、I/O操作、文件管理等), 都必须通过系统调用的方式向操作系统内核提出服务请求,由操作系统内核代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。
系统调用的过程:
正如在内中断哪里讲的,“系统调用” 就是通过陷入指令完成的。
此时正在运行的是应用程序,CPU处于用户态,应用程序向CPU传入陷入指令(即内中断信号),然后转入相应的中断处理程序(即系统调用的入口程序),此时CPU就转换成内核态,并判断用户需要那种系统调用服务。
注意:
1、陷入指令时在用户态执行的,执行陷入指令之后立即引发一个内中断,从而CPU进入核心态
2、发出系统调用请求是在用户态,而对系统调用的相应处理在核心态下进行。
3、陷入指令是唯一一个只能在用户态执行,而不可在核心态执行的指令
九、结尾
最后,非常感谢大家的阅读。我接下来还会更新第二章:【进程的描述与控制】 ,如果本文有错误或者不足的地方请在评论区(或者私信)留言,一定尽量满足大家,如果对大家有帮助,还望三连一下啦!
Reference
【1】 汤子瀛, 哲凤屏, 汤小丹,梁红兵. 计算机操作系统[第四版]. 西安电子科技大学出版社