前言:
在之前的【Linux】学习中,我们已经对常见指令已经开发工具等进行了详细的了解。紧接着,我们将要学习的便是关于【Linux进程】的基本知识。但是为了帮助大家更好的理解相关的知识概念,我先带领大家来学习关于《操作系统》这门课的基本知识!!!
(一)操作系统的基本概念
- 首先带大家看看常见的操作系统有哪些,具体如下:
- 对于“家里有矿”的小伙伴来说,用的可能就是苹果的 Mac OS 操作系统,凭借着出色的生态吸引了一大波的顾客;
- 对于我来说,用的最多的可能还是电脑的 Windows 和手机的安卓系统;
- 但是对于我们“程序猿”来说,掌握 linux 也是一项必修课程;
- 最后就是一些老旧的诺基亚的系统;
- 因此,从上可以看到在学习这门课之前,我们已经接触了各色的操作系统,我们可以利用平时使用操作系统的经验与我们学习的知识结合起来理解!!!
认识操作系统的基本概念,我们主要从以下两个方面来进行讲解:
- 操作系统的概念;
- 操作系统的功能与目标
1、概念剖析
接下来,我从电脑的组装过程来带大家直观的认识操作系统
大致过程如下:
说明:
- 1.在最开始,厂家把一些硬件设备先装到一起,俗称为裸机;
- 2.在出售之前,厂家一般都会为刚开始的电脑安装一款操作系统,最常见的就是我现在使用的Windows操作系统;
- 3.在我们买到相应的电脑之后,我们就会在操作系统之上安装我们需要使用的应用软件;
- 4.最后,作为用户安装好软件之后就可以正常使用相应的应用软件。
💨 对于以上过程,细心的小伙伴可能已经发现了,用户和操作系统之间有相应的交互。大家知道这是什么原因吗?对于这个问题,我在后面会为大家解答。
有了上述的认识,我们就可以引出操作系统的相关概念:
- 🔥操作系统是配置在计算机硬件上的第一层软件,是对硬件系统的首次扩充。
- 是指控制和管理整个计算机系统的硬件与软件资源,合理地组织、调度计算机的工作与资源分配,进而为用户和其他软件提供方便接口与环境的程序集合。
注意:
- ➡操作系统是计算机系统中最基本的系统软件。⬅
接下来,给大家举个直观的例子:
- 以Windows电脑的为例,大家可以打开电脑的 “任务管理器”,我们可以看到以下场景:
2、操作系统的特征🔥
操作系统是一种系统软件,但与其他系统软件和应用软件有很大的不同,它有自己的特殊性,即基本特征。操作系统的基本特征包括 并发、共享、异步、虚拟。接下来,我一一为大家讲解。
1️⃣并发
- 并发是指两个或多个事件在同一时间间隔内发生。操作系统的并发性是指计算机系统中同时存在多个运行的程序,因此它具有处理和调度多个程序同时执行的能力。在操作系统中,引入进程的目的是使程序能并发执行。
注意并行性和并发性是既相似又有区别的两个概念:
- 并行性是指两个或多个事件在同一时刻发生。在多道程序环境下,并发指在一段时间内宏观上有多个程序在同时运行,但在单处理机系统中,每一时刻却仅有一道程序执行,故微观上这些程序只能是分时地交替执行。
- 例如,在1秒钟时间内,程序 A 运行;15~30ms程序 B 运行;30~45ms程序 C 运行;45~60ms程序 D ]此可以说,在1秒钟时间间隔内,宏观上有四道程序在同时运行,但微观上,程 C 、 D 是分时地交替执行的。
- 若在计算机系统中有多个处理机,这些可以并发执行的程序便可被分配到多个处理机上,实现并行执行,即利用每个处理机来处理一个可并发执行的程序。
2️⃣共享
- 资源共享即共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。共享可分为以下两种资源共享方式。
(1) 互斥共享方式
- 系统中的某些资源,如打印机、磁带机,虽然可供多个进程使用,但为使得所打印或记录的结果不致造成混淆,应规定在一段时间内只允许一个进程访问该资源。
- 为此,当进程 A 访问某个资源时,必须先提出请求,若此时该资源空闲,则系统便将之分配给进程 A 使用,此后有其他进程也要访问该资源时(只要 A 未用完)就必须等待。仅当进程 A 访问完并释放该资源后,才允许另一个进程对该资源进行访问。我们把这种资源共享方式称为互斥式共享,而把在一段时间内只允许一个进程访问的资源称为临界资源。计算机系统中的大多数物理设备及某些软件中所用的栈、变量和表格,都属于临界资源,它们都要求被互斥地共享。
(2)同时访问方式
- 系统中还有另一类资源,这类资源允许在一段时间内由多个进程"同时"访问。
- 这里所说的"同时"通常是宏观上的,而在微观上,这些进程可能是交替地对该资源进行访问即"分时共享"的。可供多个进程"同时"访问的典型资源是磁盘设备,一些用重入码编写的文件也可被"同时"共享,即允许若干个用户同时访问该文件。
注意:
- 互斥共享要求一种资源在一段时间内(哪怕是一段很小的时间)只能满足一个请求,否则就会出现严重的问题。
小结:
并发和共享是操作系统两个最基本的特征,两者之间互为存在的条件:
- ①资源共享是以程序的并发为条件的,若系统不允许程序并发执行,则自然不存在资源共享问题:
- ②若系统不能对资源共享实施有效的管理,则必将影响到程序的并发执行,甚至根本无法并发执行。
3️⃣异步
- 是指进程以不可预知的速度向前推进。
- 在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约关系 (一般是资源问题)。
- 内存中的每个进程何时执行,何时暂停,以怎样的速度向前推进,程序总共需要多少时间才能完成等,都是不可预知的。
4️⃣虚拟
- 指通过某种虚拟技术,将一个物理实体变为若干个逻辑上的对应物。
- 物理实体是 实的,即真正存在的;而后者是虚的,使用户感觉上的事物;
- 操作系统中利用了多种虚拟技术,如虚拟处理器,虚拟 内存,虚拟外部设备等。
💨 时分复用技术
时分复用技术能提高资源利用率的根本原因是利用某设备为一用户服务的空闲时间,又去服务其他用户,使设备得到充分的利用。
- (1)虚拟处理机技术
通过多道程序设计技术,让多道程序并发执行的方法,来分时使用一台处理机的,把一台物理上的处理机虚拟为多台逻辑上的处理机。
- (2)虚拟设备技术
将一台物理I/O设备虚拟为多台逻辑上的I/O设备,并允许每个用户占用一台逻辑上的I/O设备,这样便可使原来仅允许在一段时间内由一个用户访问的设备(即临界资源),变为在一段时间内允许多个用户同时访问的共享设备。
💨 空分复用技术
利用存储器的空闲空间分区域存放和运行其他的多到程序,以此来提高内存的利用率。
3、操作系统的目标与功能
为了给多道程序提供良好的运行环境,操作系统应具有以下几方面的功能:
- 处理机管理
- 存储器管理
- 设备管理
- 文件管理
为了方便用户使用操作系统,还必须向用户提供接口。
同时,操作系统可用来扩充机器,以提供更方便的服务、更高的资源利用率。
我们可以这样理解:
- 操作系统的主要作用就是管理好这些设备,提高它们的利用率和系统的吞吐量,并为用户和应用程序提供一个简单的接口,便于用户使用
了解了操作系统的设计目标之后,接下来我们在研究一下操作系统在计算机系统中所起的作用,我们可以从用户、资源管理者及资源抽象等多个不同的角度去分析一波
1️⃣操作系统作为计算机系统资源的管理者
接下来,我将具体的说明每一个功能的含义及作用:
(1)处理机管理
- 在多道程序环境下,处理机的分配和运行都以进程(或线程)为基本单位,因面对处理机的管理可归结为对进程的管理;
- 并发是指在计算机内同时运行多个进程,因此进程何时创建,何时撤销、如何管理、如何避免冲突、合理共享就是进程管理的最主要的任务;
- 进程管理的主要功能包括进程控制、进程同步、进程通信、死锁处理、处理机调度等。
(2)存储器管理
- 存储器管理是为了给多道程序的运行提供良好的环境,方便用户使用及提高内存的利用率;
- 主要包括内存分配与回收、地址映射、内存保护与共享和内存扩充等功能。
(3)文件管理
- 计算机中的信息都是以文件的形式存在的,操作系统中负责文件管理的部分称为文件系统;
- 文件管理包括文件存储空间的管理、目录管理及文件读写管理和保护等。
(4)设备管理
- 设备管理的主要任务是完成用户的 I / O 请求,方使用户使用各种设备,并提高设备的利用率,主要包括缓冲管理、设备分配、设备处理和虚拟设备等功能。
2️⃣操作系统作为用户与计算机硬件系统之间的接口
为了让用户方便、快捷、可靠地操纵计算机硬件并运行自己的程序,操作系统还提供了用户接口。操作系统提供的接口主要分为两类:
- 一类是命令接口,用户利用这些操作命令来组织和控制作业的执行:
- 另一类是程序接口,编程人员可以使用它们来请求操作系统服务。
(1)命令接口
使用命令接口进行作业控制的主要方式有两种,即联机控制方式和脱机控制方式。按作业控制方式的不同,可将命令接口分为联机命令接口和脱机命令接口。
- 联机命令接口又称交互式命令接口,适用于分时或实时系统的接口。它由一组键盘操作命令组成;
- 用户通过控制台或终端输入操作命令,向系统提出各种服务要求;
- 用户每输入一条命令,控制权就转给操作系统的命令解释程序,然后由命令解释程序解释并执行输入的命令,完成指定的功能;
- 之后,控制权转回控制台或终端,此时用户又可输入下一条命令。
- 联机命令接口可以这样理解:"雇主"说一句话,"工人"做一件事,并做出反馈,这就强调了交互性
- 脱机命令接口又称批处理命令接口,适用于批处理系统,它由一组作业控制命令组成;
- 脱机用户不能直接干预作业的运行,而应事先用相应的作业控制命令写成一份作业操作说明书,连同作业一起提交给系统;
- 系统调度到该作业时,由系统中的命令解释程序逐条解释执行作业说明书上的命令,从面间接地控制作业的运行;
- 脱机命令接口可以这样理解:"雇主"把要"工人"做的事写在清单上,"工人"按照清单命令逐条完成这些事,这就是批处理。
(2)程序接口
- 程序接口由一组系统调用(也称广义指令)组成。用户通过在程序中使用这些系统调用来请求操作系统为其提供服务,如使用各种外部设备、申请分配和回收内存及其他各种要求。
- 当前最为流行的是图形用户界面( GUI ),即图形接口。 GUI 最终是通过调用程序接口实现的,用户通过鼠标和键盘在图形界面上单击或使用快捷键,就能很方便地使用操作系统。严格来说,图形接口不是操作系统的一部分,但图形接口所调用的系统调用命令是操作系统的一部分。
3️⃣操作系统实现了对计算机资源的扩充
- 没有任何软件支持的计算机称为裸机,他不仅构成计算机系统的物质基础,而实际呈现在用户面前的计算机系统是经过若干层软件改造的计算机。
- 裸机在最里面,其外面是操作系统;
- 操作系统所提供的资源管理功能和方便用户的各种服务功能,将裸机改造成功能更强的机器。
(二)操作系统的发展历程
- 在20世纪50年代中期,出现了第一个简单的批处理 OS ;
- 60年代中期开发出多处理系统;
- 不久又推出分时系统,与此同时,用于工业和武器控制的实时 OS 也。
- 20世纪70到90年代,是 VLSI 和计算机体系结构大发展的年代,导致了微型理机和计算机网络的诞生和发展,与此相应地,也相继开发出了微机 OS 、多处 I 网络 OS ,并得到极为迅猛的发展。
跟着上述的思维导图,接下来,我将依次给大家解释:
- 从1945年诞生的第一台计算机,到50年代中期的计算机,都属于第一代计算机。这时还未出现 OS ,对计算机的全部操作都是由用户采取人工操作方式进行的。
🔥人工操作阶段
早期的操作方式是由程序员将事先已穿孔的纸带(或卡片),装入纸带输入机(或卡片输机),再启动它们将纸带(或卡片)上的程序和数据输入计算机,然后启动计算机运行。仅当程运行完毕并取走计算结果后,才允许下一个用户上机。
这种人工操作方式有以下两方面的缺点:
- (1)用户独占全机,即一台计算机的全部资源由上机用户所独占。
- (2) CPU 等待人工操作。当用户进行装带(卡)、卸带(卡)等人工操作时, CPU 及内存资源是空闲的。
💨 从上可见,用户在计算机上算题的所有工作都要人工干预,如程序的装入、运行、结果的输出等。随着计算机硬件的发展,人机矛盾(速度和资源利用)越来越大,必须寻求新的解决办法。
唯一的解决办法就是用高速的机器代替相对较慢的手工操作来对作业进行控制。✔️
🔥脱机输入/输出方式
- 为了解决人机矛盾及 CPU 和 I / O 设备之间速度不匹配的矛盾,20世纪50年代末出现了脱机I/O技术。
- 该技术是事先把装有用户程序和数据的纸带装入纸带输入机,在一台外围机的控制下,把纸带上的数据输入到磁带上。当CPU需要这些程序和数据时,再从磁带上高速的调入内存。
这种方式的优点为:
- 1.减少了 CPU 的空闲时间。装带、卸带,以及将数据从低速 I / O 设备送到高速磁带上的操作,都是在脱机情况下由外围机完成的,并不占用主机时间,从而有效的减少了 CPU 的空闲时间
- 2.提高了 I / O 速度。当 CPU 在运行中需要输入数据时,是直接从高速的磁带上将数据输入到内存的,这便极大的提高了 I / O 速度,从而进一步减少了CPU的空闲时间。
🔥单道批处理阶段(操作系统开始出现)
20世纪50年代中期出现了第二代晶体管计算机,此时计算机虽已具有推广应用的价但计算机系统仍然非常昂贵。为了能充分地提高它的利用率,应尽量保持系统的连续,即在处理完一个作业后,紧接着处理下一个作业,以减少机器的空闲等待时间。
为实现对作业的连续处理,需要先把一批作业以脱机方式输入到磁带上,并在系统中监督程序( Monitor ),在它的控制下,使这批作业能一个接一个地连续处理。
处理过程:
- 其处理首先由监督程序将磁带上的第一个作业装入内存,并把运行控制权交给该作业;
- 当话处理完成时,又把控制权交还给监督程序,再由监督程序把磁带上的第二个作业调入计算机系统就这样自动地一个作业紧接一个作业地进行处理,直至磁带上的所有作业全部完成,这便是早期的批处理系统;
- 虽然系统对作业的处理是成批进行的,但是内存中始终只保持一道作业,因此称为单道批处理系统。
主要特征:
- 1)自动性。在顺利的情况下,磁带上的一批作业能自动地逐个运行,而无须人工干预。
- 2)顺序性。磁带上的各道作业顺序地进入内存,各道作业的完成顺序与它们进入内存的顺
- 序在正常情况下应完全相同,亦即先调入内存的作业先完成。
- 3)单道性。内存中仅有一道程序运行,即监督程序每次从磁带上只调入一道程序老人,4存运行,当该程序完成或发生异常情况时,才换入其后继程序进入内存运行。
此时面临的问题是:
- 每次主机内存中仅存放一道作业,每当它在运行期间(注意这里是"运行时"而不是"完成后")发出输入/输出请求后,高速的 CPU 便处于等待低速的 I / O 完成的状态。为了进一步提高资源的利用率和系统的吞吐量,引入了多道程序技术。
🔥多道批处理阶段(操作系统正式出现)
20世纪60年代中期,IBM公司生产了第一台小规模集成电路计算机IBM360(第三代计算机系统) 。由于它较之于晶体管计算机无论在体积、功耗、速度和可靠性上都有了显著的改善,因而获得了极大的成功。IBM公司为该机开发的OS/360操作系统是第一个能运行多道程序的批处理系统。
- 多道程序设计技术允许多个程序同时进入内存并允许它们在 CPU 中交替地运行,这些程序共享系统中的各种硬/软件资源;
- 当一道程序因 I / O 请求而暂停运行时, CPU 便立即转去运行另一道程序;
- 它不采用某些机制来提高某一技术方面的瓶颈问题,而让系统的各个组成部分都尽量去"忙",因此切换任务所花费的时间很少,可实现系统各部件之间的并行工作,使其整体在单位时间内的效率翻倍。
当然,多道批处理系统的设计和实现要比单道系统复杂很多,因为要充分利各种资源,就要涉及各种资源的调度问题。
多道程序设计的特点是多道、宏观上并行、微观上串行
- 1)多道。计算机内存中同时存放多道相互独立的程序。
- 2)宏观上并行。同时进入系统的多道程序都处于运行过程中,即它们先后开始各自的运行,但都未运行完毕。
- 3)微观上串行。内存中的多道程序轮流占有 CPU ,交替执行。
多道程序设计技术的实现需要解决下列问题
- 1)如何分配处理器。
- 2)多道程序的内存分配问题。
- 3) I / O 设备如何分配。
- 4)如何组织和存放大量的程序和数据,以方便用户使用并保证其安全性与一致性。
在批处理系统中采用多道程序设计技术就形成了多道批处理操作系统。该系统把用户提交的作业成批地送入计算机内存,然后由作业调度程序自动地选择作业运行。
优点:
- 资源利用率高,多道程序共享计算机资源,从而使各种资源得到充分利用:
- 系统存吐量大, CPU 和其他资源保持"忙碌"状态。
缺点:
- 用户响应的时间较长:不提供人机交互能力,用户既不能了解自己的程序的运行情况,又不能控制计算机。
🔥分时操作系统
1.分时系统的引入
如果说推动多道批处理系统形成和发展的主要动力是提高资源利用率和系统吞吐量。那么,推动分时系统形成和发展的主要动力,则是为了满足用户对人一机交互的需求,由此形成了一种型 OS 。
用户的需求具体表现在以下几个方面:
- 1)人一机交互。每当程序员写好一个新程序时,都需要上机进行调试。由于新编程序难免存在一些错误或不当之处,需要进行修改,因此用户希望能像早期使用计算机时一样,独占全机并对它进行直接控制,以便能方便地对程序中的错误进行修改。亦即,用户希望能进行人机交互。
- 2)共享主机。在20世纪60年代,计算机还十分昂贵,一台计算机要同时供很多用户共享使用。显然,用户们在共享一台计算机时,每人都希望能像独占时一样,不仅可以随时与计算机进行交互,而且还不会感觉到其他用户的存在。
由上所述不难得知,分时系统是指,在一台主机上连接了多个配有显示器和键盘的终端并由此所组成的系统,该系统允许多个用户同时通过自己的终端,以交互方式使用计算机,共享主机中的资源。
主要特征如下:
- 1)同时性。同时性也称多路性,指允许多个终端用户同时使用一台计算机,即一台计算机与若干台终端相连接,终端上的这些用户可以同时或基本同时使用计算机。
- 2)交互性。用户能够方便地与系统进行人机对话,即用户通过终端采用人机对话的方式直接控制程序运行,与同程序进行交互。
- 3)独立性。系统中多个用户可以彼此独立地进行操作,互不干扰,单个用户感觉不到别人也在使用这台计算机,好像只有自己单独使用这台计算机一样。
- 4)及时性。用户请求能在很短时间内获得响应,分时系统采用时间片轮转方式使一台计算机同时为多个终端服务,使用户能够对系统的及时响应感到满意。
虽然分时操作系统较好地解决了人机交互问题,但在一些应用场合,需要系统能对外部的信息在规定的时间(比时间片的时间还短)内做出处理(比如飞机订票系统或导弹制导系统),因此,实时操作系统应运而生。
🔥实时操作系统
为了能在某个时间限制内完成某些紧急任务而不需要时间片排队,诞生了实时操作系统。
这里的时间限制可以分为两种情况:
- 若某个动作必须绝对地在规定的时刻(或规定的时间范围)发生,则称为硬实时系统,如飞行器的飞行自动控制系统,这类系统必须提供绝对保证,让某个特定的动作在规定的时间内完成。
- 若能够接受偶尔违反时间规定且不会引起任何永久性的损害,则称为软实时系统,如飞机订票系统、银行管理系统。
在实时操作系统的控制下,计算机系统接收到外部信号后及时进行处理,并在严格的时限内处理完接收的事件。实时操作系统的主要特点是及时性和可靠性。
网络操作系统和分布式计算机系统
网络操作系统可以理解为网络用户与计算机网络之间的接口,他是专门为网络用户提供操作接口的的系统软件,除了管理计算机的软件和硬件资源,具备单机操作系统所有的功能外,还具有向网络计算机提供网络通信和网络资源共享功能的操作系统,并且为网络用户提供各种网络服务。
基本功能:
- 网络通信,资源管理,网络服务,网络管理,互操作,提供网络接口
分布式计算机系统是由多台计算机组成并满足下列条件的系统:
- 系统中任意两台计算机通过通信方式交换信息;
- 系统中的每台计算机都具有同等的地位,即没有主机也没有从机;
- 每台计算机上的资源为所有用户共享:系统中的任意台计算机都可以构成一个子系统,并且还能重构:
- 任何工作都可以分布在几台计算机上,由它们并行工作、协同完成。用于管理分布式计算机系统的操作系统称为分布式计算机系统。
该系统的主要特点是:
- 分布性和并行性。分布式操作系统与网络操作系统的本质不同是,分布式操作系统中的若干计算机相互协同完成同一任务。
个人计算机操纵系统
个人计算机操作系统是目前使用最广泛的操作系统,它广泛应用于文字处理、电子表格、游戏中,常见的有windows、Linux和Mac os等。
(三)程序的运行环境
这部分知识点,大家可以结合上述思维导图进行理解记忆。接下来,我们一一的对其进行讲解。
1、处理机运行模式
在正式的学习之前,我们需要了解一组概念:
- 先弄清楚一个问题,即计算机"指令"和高级语言"代码"是不同的。
- 通常所说的"编写代码"指的是用高级等)来编写程序。但 CPU 看不懂这些高级语言程序的含义,为了让这些程序能顺利执行,就需要把它们"翻的机器语言,即一条条"指令"。
- 所谓执行程序,其实就是 CPU 根据一条条的指令来执行一个个具体的操作。
计算机系统中,通常 CPU 执行两种不同性质的程序:
- 一种是操作系统内核程序;
- 另一种是用户自编程序(即系统外层的应用程序,或简称"应用程序")。
对操作系统而言,这作用不同,前者是后者的管理者,因此"管理程序"(即内核程序)要执行一些特权指管理程序"(即用户自编程序)出于安全考虑不能执行这些指令。
- 1)特权指令,是指不允许用户直接使用的指令,如 I / O 指令、置中断指令,存取用于内存保护的寄存器、送程序状态字到程序状态字寄存器等的指令。
- 2)非特权指令,是指允许用户直接使用的指令,它不能直接访问系统中的软硬件资源,仅限于访问用户的地址空间,这也是为了防止用户程序对系统造成破坏。
💨 在具体实现上,将 CPU 的运行模式划分为用户态(目态)和核心态(又称管态、内核态)。可以理解为 CPU 内部有一个小开关,当小开关为0时, CPU 处于核心态,此时 CPU 可以执行特权指令,切换到用户态的指令也是特权指令。当小开关为1时, CPU 处于用户态,此时 CPU 只能执行非特权指令,用户自编程序运行在用户态,操作系统内核程序运行在核心态。
💨 在软件工程思想和结构化程序设计方法影响下诞生的现代操作系统,几乎都是分层式的结构。操作系统的各项功能分别被设置在不同的层次上。一些与硬件关联较紧密的模块,如时钟管理、中断处理、设备驱动等处于最低层,其次是运行频率较高的程序,如进程管理、存储器管理和设备管理等。这两部分内容构成了操作系统的内核,这部分内容的指令操作工作在核心态。
内核是计算机上配置的底层软件,它管理着系统的各种资源,可以看作是连接应用程序和硬件的一座桥梁,大多数操作系统的内核包括4方面的内容。
1️⃣时钟管理
在计算机的各种部件中,时钟是最关键的设备。时钟的第一功能是计时,操作系统需要通过时钟管理,向用户提供标准的系统时间。另外,通过时钟中断的管理,可以实现进程的切换。例如,在分时操作系统中采用时间片轮转调度,在实时系统中按截止时间控制运行,在批处理系统中通过时钟管理来衡量一个作业的运行程度等。因此,系统管理的方方面面无不依赖于时钟。
2️⃣中断机制
中断机制是现代计算机系统中的基本机制之一,它在系统中起着通信网络的作用,以协调系统对各种外部事件的响应和处理,中断是实现多道程序设计的必要条件,中断是CPU 对系统发生的某个事件作出的一种反应。
- 引起中断的事件称为中断源。
- 中断源向CPU 提出处理的请求称为中断请求。
- 发生中断时被打断程序的暂停点称为断点。
- CPU暂停现行程序而转为响应中断请求的过程称为中断响应。
- 处理中断源的程序称为中断处理程序。
- CPU执行有关的中断处理程序称为中断处理。
- 而返回断点的过程称为中断返回。
- 中断的实现由软件和硬件综合完成,硬件部分叫做硬件装置,软件部分称为软件处理程序。
3️⃣原语
按层次结构设计的操作系统,底层必然是一些可被调用的公用小程序,它们各自完成一个规定的操作。它们的特点如下:
- 1)处于操作系统的最低层,是最接近硬件的部分。
- 2)这些程序的运行具有原子性,其操作只能一气呵成(出于系统安全性和便于管理考虑)
- 3)这些程序的运行时间都较短,而且调用频繁。
通常把具有这些特点的程序称为原语( Atomic Operation )。定义原语的直接方法是关闭中断,让其所有动作不可分割地完成后再打开中断。系统中的设备驱动、 CPU 切换、进程通信等功能中的部分操作都可定义为原语,使它们成为内核的组成部分。
4️⃣系统控制的数据结构及处理
系统中用来登记状态信息的数据结构很多,如作业控制块、进程控制块( PCB )、设备控制块、各类链表、消息队列、缓冲区、空闲区登记表、内存分配表等。
为了实现有效的管理,系统需要一些基本的操作,常见的操作有以下3种:
- 1)进程管理。进程状态管理、进程调度和分派、创建与撤销进程控制块等。
- 2)存储器管理。存储器的空间分配和回收、内存信息保护程序、代码对换程序等。
- 3)设备管理。缓冲区管理、设备分配和回收等。
从以上内容可以了解,核心态指令实际上是包括系统调用类指令和一些针对时钟、中断和原语的操作指令。
2、中断和异常的概念
1️⃣中断和异常的定义
💨 中断( Interruption )也称外中断,是指来自 CPU 执行指令外部的事件,通常用于信输出,如设备发出的 I / O 结束中断,表示设备输入/输出处理已经完成。时钟中断,表示的时间片已到,让处理机处理计时、启动定时运行的任务等。
💨 异常( Exception )也称内中断,是指来自 CPU 执行指令内部的事件,如程序的非法操作码、地址越界、运算溢出、虚存系统的缺页及专门的陷入指令等引起的事件。异常不能被屏蔽,一旦出现,就应立即处理。
2️⃣中断和异常的分类
外中断可分为可屏蔽中断和不可屏蔽中断。
- 可屏蔽中断是指通过 INTR 线发出的中断请求,通过改变屏蔽字可以实现多重中断,从而使得中断处理更加灵活;
- 不可屏蔽中断是指通过 NMI 线发出的中断请求,通常是紧急的硬件故障,如电源掉电等。此外计常也是不能被屏蔽的。
异常可分为故障、自陷和终止。
- 故障( Fault )通常是由指令执行引起的异常,如非法日号。缺页故障、除数为0、运算溢出等。
- 自陷( Trap )是一种事先安排的"异常"事件,用于:司?态下调用操作系统内核程序,如条件陷阱指令。
- 终止( Abort )是指出现了使得 CPU 无行的硬件故障,如控制器出错、存储器校验错等。故障异常和自陷异常属于软件中断(私:牛净常),终止异常和外部中断属于硬件中断。
3️⃣中断和异常的处理过程
中断和异常处理过程的大致描述如下:
- 当 CPU 在执行用户程序的第 i 条指令时检测到一个异常事件,或在执行第 i 条指令后发现一个中断请求信号,则 CPU 打断当前的用户程序,然后转到相应的中断或异常处理程序去执行;
- 若中断或异常处理程序能够解决相应的问题,则在中断或异常处理程序的最后, CPU 通过执行中断或异常返回指令,回到被打断的用户程序的第/条指令或第 i +1条指令继续执行:
- 若中断或异常处理程序发现是不可恢复的致命错误,则终止用户程序。通常情况下,对中断和异常的具体处理过程由操作系统(和驱动程序)完成。
3、系统调用
所谓系统调用,是指用户在程序中调用操作系统所提供的一些子功能,系统调用可视为特殊的公共子程序,系统中的各种共享资源都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作(如存储分配、进行 I / O 传输及管理文件等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。通常,一个操作系统提供的系统调用命令有几十条乃至上百条之多。
这些系统调用按功能大致可分为如下几类
- 设备管理:完成设备的请求或释放,以及设备启动等功能。
- 文件管理:完成文件的读、写、创建及删除等功能。
- 进程控制:完成进程的创建、撤销、阻塞及唤醒等功能。
- 进程遗信:完成进程之间的消息传递或信号传递等功能。
- 内存管理:完成内存的分配、回收以及获取作业占用内存区大小及始址等功能。
💨 显然,系统调用相关功能涉及系统资源管理、进程管理之类的操作,对整个系统的影响非常大,因此必定需要使用某些特权指令才能完成,所以系统调用的处理需要由操作系统内核程序负贵完成,要运行在核心态。
用户程序可以执行陷入指令(又称访管指令或 trap 指令)来发起系统调用,请求操作系统提供服务
- 可以这么理解,用户程序执行"陷入指令",相当于把 CPU 的使用权主动交给操作系统内核程序( CPU 状态会从用户态进入核心态),之后操作系统内核程序再对系统调用请求做出相应处理。处理完成后,操作系统内核程序又会把 CPU 的使用权还给用户程序(即 CPU 状态会从核心态回到用户态)
💨 这么设计的目的是:
- 用户程序不能直接执行对系统影响非常大的操作,必须通过系统调用的方式请求操作系统代为执行,以便保证系统的稳定性和安全性,防止用户程序随意更改或访问重要的系统资源,影响其他进程的运行。
这样,操作系统的运行环境就可以理解为:
- 用户通过操作系统运行上层程序(如系统提供的命令解释程序或用户自编程序),而这个上层程序的运行依赖于操作系统的底层管理程序提供服务支持,当需要管理程序服务时,系统则通过硬件中断机制进入核心态,运行管理程序;
- 也可能是程序运行出现异常情况,被动地需要管理程序的服务,这时就通过异常处理来进入核心态;
- 管理程序运行结束时,用户程序需要继续运行,此时通过相应的保存的程序现场退出中断处理程序或异常处理程序,返回断点处继续执行。
下面列举一些由用户态转向核心态的例子:
- 1)用户程序要求操作系统的服务,即系统调用。2)发生一次中断。
- 3)用户程序中产生了一个错误状态。
- 4)用户程序中企图执行一条特权指令。
- 5)从核心态转向用户态由一条指令实现,这条指令也是特权命令,一般是中断返回指令
注意:
- 由用户态进入核心态,不仅状态需要切换,而且所用的堆栈也可能需要由用户堆栈切换为系统堆栈,但这个系统堆栈也是属于该进程的.
若程序的运行由用户态转到核心态,则会用到访管指令,访管指令是在用户态使用的,所以它不可能是特权指令
(四)操作系统结构
💨 早期的操作系统规模很小,如只有几十KB;完全可以由一个人以手工方式,用几个月时间编制出来。此时,编制程序基本上是一种技巧, OS 是否是有结构的并不那么重要,重要的是程序员的程序设计技巧。但随着 OS 规模的愈来愈大,其所具有的代码也越来越多,往往需要由数十人或数百人甚至更多的人参与,分工合作,共同来完成操作系的设计。这意味着,应采用工程化的开发方法对大型软件进行开发。由此产生了"软件工程学"。
💨 软件工程的目标是十分明确的,所开发出的软件产品应具有良好的软件质量和合理的费用。整个费用应能为用户所接受:软件质量可用这样几个指标来评价:功能性、有效性可靠性、易使用性、可维护性和易移植性。为此,先后产生了多种操作系统的开发方法,如模块化方法、结构化方法和面向对象的方法等。利用不同的开发方法所开发出的操作系统将具有不同的操作系统结构。
从操作系统的内核架构来看,可分为宏内核和微内核。
- 简单来说就是把操作系统分为内核和外核。把操作系统的主要功能模块都放在内核态下执行;
- 而外核负责为用户进程分配未经抽象的硬件资源,且由外核负责保证资源的使用安全。
这样做的优缺点如下:
优点:
- 1、外核直接负责给用户进程分配“不虚拟”,“不抽象”的硬件资源,使用户进程可以更灵活的使用;
- 2、减少了虚拟硬件资源的“映射层”,提升效率
缺点:
- 降低系统的一致性,使系统变得更加复杂。
1、大内核
1️⃣定义
宏内核:也称单内核或大内核,是指将系统的主要功能模块都作为一个紧密联系的整体运行在核心态,从而为用户程序提供高性能的系统服务。因为各管理模块之间共享信息,能有效利用相互之间的有效特性,所以具有无可比拟的性能优势。
2️⃣发展现状
随着体系结构和应用需求的不断发展,需要操作系统提供的服务越来越复杂,操作系统的没计规模急剧增长,操作系统也面临着"软件危机"困境。就像一个人,越胖活动起来就越困难。所以就出现了微内核技术,就是将一些非核心的功能移到用户空间,这种设计带来的好处思与便扩展系统,所有新服务都可以在用户空间增加,内核基本不用去做改动。
从操作系统的发展来看,宏内核获得了绝对的胜利,目前主流的操作系统:
- 如 Windows . Android 、 iOS 、 macOS 、 Linux 等,都是基于宏内核的构架。但也应注意到,微内核和宏内核一直是同步发展的,目前主流的操作系统早已不是当年纯粹的宏内核构架了,而是广泛吸取微内核构架的优点而后揉合而成的混合内核。当今宏内核构架遇到了越来越多的困难和挑战,而微内核的优势似乎越来越明显,尤其是谷歌的 Fuchsia 和华为的鸿蒙 OS ,都瞄准了微内核构架。
2、微内核
(1)微内核的基本概念
- 微内核构架,是指将内核中最基本的功能保留在内核,而将那些不需要在核心态执行的功能移到用户态执行,从而降低内核的设计复杂性。那些移出内核的操作系统代码根据分层的电飞线划分成若干服务程序,它们的执行相互独立,交互则都借助于微内核进行通信。
💨 微内核结构将操作系统划分为两大部分:微内核和多个服务器。
微内核是指精心设计实现操作系统最基本核心功能的小型内核,通常包含:
- ①与硬件处理紧密相关的部分:
- ②一些较基本的功能;
- ③客户和服务器之间的通信。
💨 这些部分只是为构建通用操作系统提供一个重要基础,这样就可以确保将内核做得很小。操作系统中的绝大部分功能都放在微内核外的一组服务器(进程)中实现,如用于提供对进程(线程)进行管理的进程(线程)服务器、提供虚拟存储器管理功能的虚拟存储器服务器等,它们都是作为进程来实现的,运行在用户态,客户与服务器之间是借助微内核提供的消息传递机制来实现交互的。下图展示了单机环境下的客户/服务器模式。
💨 在微内核结构中,为了实现高可靠性,只有微内核运行在内核态,其余模块都运行在用一个模块中的错误只会使这个模块崩溃,而不会使整个系统崩溃。
- 例如,文件服务代码运行了问题,宏内核因为文件服务是运行在内核态的,系统直接就崩溃了。而微内核的文件服务行在用户态的,只要把文件服务功能强行停止,然后重启,就可以继续使用,系统不会崩溃。
(2)微内核的基本功能
微内核结构通常利用"机制与策略分离"的原理来构造 OS 结构,将机制部分以及与硬件紧密相关的部分放入微内核。微内核通常具有如下功能:
- ①进程(线程)管理。进程(线程)之间的通信功能是微内核 OS 最基本的功能,此外还有进程的切换、进程的调度,以及多处理机之间的同步等功能,都应放入微内核中。举个例子,为实现进程调度功能,需要在进程管理中设置一个或多个进程优先级队列,这部分属于调度功能的机制部分,应将它放入微内核中。而对用户进程如何分类,以及优先级的确认方式,则属于策略问题,可将它们放入微内核外的进程管理服务器中。
- ②低级存储器管理。在微内核中,只配置最基本的低级存储器管理机制,如用于实现将逻辑地址变换为物理地址等的页表机制和地址变换机制,这一部分是依赖于硬件的,因此放入微内核。而实现虚拟存储器管理的策略,则包含应采取何种页面置换算法,采用何种内存分配与回收的策略,应将这部分放在微内核外的存储器管理服务器中。
- ③中断和陷入处理。微内核 OS 将与硬件紧密相关的一小部分放入微内核,此时微内核的主要功能是捕获所发生的中断和陷入事件,并进行中断响应处理,在识别中断或陷入的事件后,再发送给相关的服务器来处理,故中断和陷入处理也应放入微内核。
微内核操作系统将进程管理、存储器管理以及 I / O 管理这些功能一分为二,属于机制的很小一部分放入微内核,而绝大部分放入微内核外的各种服务器实现,大多数服务器都要比微内核大。因此,在采用客户/服务器模式时,能把微内核做得很小。
(3)微内核的特点
微内核的结构优点主要有:
- ①扩展性和灵活性。许多功能从内核中分离出来,当要修改某些功能或增加在相应的服务器中修改或新增功能,或再增加一个专用的服务器,而无须改动内②可靠性和安全性。前面已举例说明。
- ③可移植性。与 CPU 和 I / O 硬件有关的代码均放在内核中,而其他各种服务无关,因而将操作系统移植到另一个平台上所需做的修改是比较小的。
- ④分布式计算。客户和服务器之间、服务器和服务器之间的通信采用消息传得微内核系统能很好地支持分布式系统和网络系统。
💨 微内核结构的主要问题是性能问题,因为需要频繁地在核心态和用户态之间进系统的执行开销偏大。为了改善运行效率,可以将那些频繁使用的系统服务移回内系统性能,但这又会使微内核的容量明显地增大。
虽然宏内核在桌面操作系统中取得了绝对的胜利,但是微内核在实时、工业、用中特别流行,这些领域都是关键任务,需要有高度的可靠性。
3、无结构操作系统
在早期开发操作系统时,设计者只是把他的注意力放在功能的实现和获得高的效率上,缺乏首尾一致的设计思想。此时的 OS 是为数众多的一组过程的集合,每个过程可以任意地相互调用其它过程,致使操作系统内部既复杂又混乱,因此,这种 OS 是无结构的,也有人把它称为整体系统结构。
此时程序设计的技巧,只是如何编制紧凑的程序,以便于有效地利用内存:
- 当系统不太大,在一个人能够完全理解和掌握的情况下问题还不是太大,但随着系统的不断扩大,所设计出的操作系统就会变得既庞大又杂乱;
- 另一方面会使所编制出的程序错误很多,给调试工作带来很多困难;另一方面也使程序难以阅读和理解,增加了维护人员的负担。
4、模块化结构OS
模块化是将操作系统按功能划分为若干具有一定独立性的模块。
- 每个模块具有某方面的管理功能,并规定好各模块间的接口,使各模块之间能够通过接口进行通信。还可以进一步将各模块细分为若干具有一定功能的子模块,同样也规定好各子模块之间的接口。
这种设计方法被称为模块﹣接口法,下图所示为由模块、子模块等组成的模块化操作系统结构。
💨 在划分模块时,如果将模块划分得太小,虽然能降低模块本身的复杂性,但会使得模块之间的联系过多,造成系统比较混乱:如果模块划分得过大,又会增加模块内部的复杂性,显然一在两者间进行权衡。
此外,在划分模块时,要充分考虑模块的独立性问题,因为模块独立性返高。各模块间的交互就越少,系统的结构也就越清晰。衡量模块的独立性主要有两个标准(俗称低内聚高耦合):
- 内聚性,模块内部各部分间联系的紧密程度。内聚性越高,模块独立性越好。
- 耦合度,模块间相互联系和相互影响的程度。耦合度越低,模块独立性越好。
模块化的优点:
- ①提高了操作系统设计的正确性、可理解性和可维护性:
- ②增强了操1乐流的可适应性:
- ③加速了操作系统的开发过程。
模块化的缺点:
- ①模块间的接口规定很难满足对接口的实际需求。
- ②各模块设计者齐头台点。每个决定无法建立在上一个已验证的正确决定的基础上,因此无法找到一个可靠的决定顺序
5、分层式结构OS
分层法是将操作系统分为若干层,最底层(层0)为硬件,最高层(层 N )为用户接口,每层只能调用紧邻它的低层的功能和服务(单向依赖)。
如下图所示:
分层法的优点:
- ①便于系统的调试和验证,简化了系统的设计和实现。第1层可先调试而无须考虑系统的其他部分,因为它只使用了基本硬件。第1层调试完且验证正确之后,就可以调试第2层,如此向上。如果在调试某层时发现错误,那么错误应在这一上,这是因为它的低层都调试好了。
- ②易扩充和易维护。在系统中增加、修改或替换一层中的模块或整层时,只要不改变相应层间的接口,就不会影响其他层。
分层法的问题:
- ①合理定义各层比较困难。因为依赖关系固定后,往往就显得不够灵活。
- ②效率较差。操作系统每执行一个功能,通常要自上而下地穿越多层,各层之间都有相应的层间通信机制,这无疑增加了额外的开销,导致系统效率降低。
小结:
(五)虚拟机
1、虚拟机的概念
虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
有两类虚拟化方法:
1️⃣第一类虚拟机管理程序
从技术上讲,第一类虚拟机管理程序就像一个操作系统,因为它是唯一一个运行在最高特权级的程序。它在裸机上运行并且具备多道程序功能。虚拟机管理程序向上层提供若干台虚拟机,这些虚拟机是裸机硬件的精确复制品。由于每台虚拟机都与裸机相同,所以在不同的虚拟机上可以运行任何不同的操作系统。图( a )中显示了第一类虚拟机管理程序。
- 虚拟机作为用户态的一个进程运行,不允许执行敏感指令。然而,虚拟机上的操作系统认为自己运行在内核态(实际上不是),称为虚拟内核态。
- 虚拟机中的用户进程认为自己运行在用户态(实际上确实是)。
- 当虚拟机操作系统执行了一条 CPU 处于内核态才允许执行的指令时,会陷入虚拟机管理程序。
- 在支持虚拟化的 CPU 上,虚拟机管理程序检查这条指令是由虚拟机中的操作系统执行的还是由用户程序执行的。如果是前者,虚拟机管理程序将安排这条指令功能的正确执行。否则,虚拟机管理程序将模拟真实硬件面对用户态执行敏感指令时的行为。
在过去不支持虚拟化的 CPU 上,真实硬件不会直接执行虚拟机中的敏感指令,这些敏感指令被转为对虚拟机管理程序的调用,由虚拟机管理程序模拟这些指令的功能。
2️⃣ 第二类虚拟机管理程序
图( b )中显示了第二类虚拟机管理程序。它是一个依赖于 Windows 、 Linux 等操作系统分配和调度资源的程序,很像一个普通的进程。第二类虚拟机管理程序仍然伪装成具有 CPU 和各种设备的完整计算机。 VMware Workstation 是首个X86平台上的第二类虚拟机管理程序。
运行在两类虚拟机管理程序上的操作系统都称为客户操作系统。对于第二类虚拟机管理程序,运行在底层硬件上的操作系统称为宿主操作系统。
首次启动时,第二类虚拟机管理程序像一台刚启动的计算机那样运转,期望找到的驱动器可以是虚拟设备。然后将操作系统安装到虚拟磁盘上(其实只是宿主操作系统中的一个文件,客户操作系统安装完成后,就能启动并运行。
虚拟化在 Web 主机领域很流行。没有虚拟化,服务商只能提供共享托管(不能控制胀器约软件)和独占托管(成本较高)。当服务商提供租用虚拟机时,一台物理服务器就可以运行名个虚拟机,每个虚拟机看起来都是一台完整的服务器,客户可以在虚拟机上安装自己想用的员"系统和软件,但是只需支付较低的费用。这就是市面上常见的"云"主机。
(六)整理归纳
主要疑难点说明:
1、并发性与并行性的区别和联系
并行性和并发性是既相似又有区别的两个概念:
- 并行性是指两个或多个事件在同一时刻发生;
- 并发性是指两个或多个事件在同一时间间隔内发生。
在多道程序环境下,并发性是指在一段时间内,宏观上有多个程序同时运行,但在单处理器系统中每个时刻却仅能有一道程序执行,因此微观上这些程序只能分时地交替执行。若在计算机系统中有多个处理器,则这些可以并发执行的程序便被分配到多个处理器上,实现并行执行,即利用每个处理器来处理一个可并发执行的程序。
2、特权指令和非特权指令
所谓特权指令,是指有特殊权限的指令,由于这类指令的权限最大,使用不当将导致整个系统崩溃,如清内存、置时钟、分配系统资源、修改虚存的段表或页表、修改用户的访问权限等。
若所有程序都能使用这些指令,则系统一天死机 n 次就不足为奇。为保证系统安全,这类指令只能用于操作系统或其他系统软件,不直接提供给用户使用。因此,特权指令必须在核心态执行。实际上, CPU 在核心态下可以执行指令系统的全集。形象地说,特权指令是那些儿童不宜的东西,而非特权指令是老少皆宜的东西。
为了防止用户程序中使用特权指令,用户态下只能使用非特权指令,核心态下可以使用全部指令。
在用户态下使用特权指令时,将产生中断以阻止用户使用特权指令。所以把用户程序放在用户态下运行,而操作系统中必须使用特权指令的那部分程序在核心态下运行,保证了计算机系统的安全可靠。从用户态转换为核心态的唯一途径是中断或异常。
3、访管指令与访管中断
访管指令是一条可以在用户态下执行的指令。在用户程序中,因要求操作系统提供服务而有意识地使用访管指令,从而产生一个中断事件(自愿中断),将操作系统转换为核心态,称为访管中断。访管中断由访管指令产生,程序员使用访管指令向操作系统请求服务。
为什么要在程序中引入访管指令呢?
- 这是因为用户程序只能在用户态下运行。若用户程序想要完成在用户态下无法完成的工作,该怎么办?解决这个问题要靠访管指令。访管指令本身不是特权指令,其基本功能是让程序拥有"自愿进管"的手段,从而引起访管中断。
处于用户态的用户程序使用访管指令时,系统根据访管指令的操作数执行访管中断处理程序,访管中断处理程序将按系统调用的操作数和参数转到相应的例行子程序。完成服务功能后,退出中断,返回到用户程序断点继续执行。
4、定义微内核os 结构的四个方面
- 1)足够小的内核。
- 2)基于客户/服务器模式。
- 3)应用"机制与策略分离"原理。机制是指实现某一功能的具体执行机构。策略则是在机制的基础上借助于某些参数和算法来实现该功能的优化,或达到不同的功能目标,在传的 OS 中,将机制放在 OS 内核的较低层中,把策略放在内核的较高层中。而在微内核 OS 中,通常将机制在 OS 的微内核中。正因如此,才可以将内核做得很小。
- 4)采用面向对象技术。基于面向对象技术中的"抽象"和"隐蔽"原则能控制系统的复杂性,进一步利用"对象""封装"和"继承"等概念还能确保操作系统的正确性、中易扩展性等。正因如此,面向对象技术被广泛应用于现代操作系统的设计之中。
(七)总结
到此,关于操作系统的计算机系统概述便讲到这里了。
接下来,回顾一下本文都讲了什么知识:
- 首先,给大家介绍了操作系统的基本概念,对其的印象进一步加深。随即介绍了操作系统的几个基本特征:最需要大家记住的就是 并发和共享 这个特性;
- 紧接着带领大家认识了操作系统的发展历程,从最开始的裸机一步步发展到如今;
- 接下来,我又带领大家认识了CPU运行的模式,还介绍了关于中断和异常,最后学习了系统调用;
- 而后就是对操作系统结构的认识,带领大家从传统的操作系统结构 一直到现代操作系统的结构进行了清晰的认识;
- 在这之后就是关于虚拟机的相关知识介绍;
- 最后,我罗列了本文较为重点的知识给大家参考消化。
以上便是全文的基本内容了。感谢大家的阅读!!!