目录
1.操作系统的概念
操作系统(Operating System, OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调 度计算机的工作和资源的分配;以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本 的系统软件。
2.操作系统的功能和目标
操作系统主要提供了三大方面的功能:
- 作为计算机系统资源的管理者
- 作为用户与计算机硬件系统之间的接口
- 作为对计算机资源的扩充
作为系统资源的管理者
①处理器(CPU)管理
在多道程序环境下,cpu的分配和运行都以进程(或线程)为基本单位,因此对cpu的管理可理解为对进程的管理。进程管理的主要功能包括进程控制、进程同步、进程通信、死锁处理、处理机调度等。
②存储器管理
为多道程序的运行提供良好的环境,方便用户使用及提高内存的利用率,主要包括内存分配与回收、地址映射、内存保护与共享和内存扩充等功能。
③文件管理
计算机中所有的信息都是以文件的形式存在的,操作系统中负责文件的管理的部分称为文件系统,文件管理包括文件存储空间的管理、目录管理及文件读写管理和保护等。
④设备管理
设备管理的主要任务是完成用户的I/O请求,方便用户使用各种设备,并提高设备的利用率,主要包括缓冲管理、设备分配、设备处理和虚拟设备等功能。
作为用户与计算机硬件系统之间的接口
操作系统为了使用户可以方便、快捷、可靠地操纵计算机硬件并运行自己的程序,提供了用户接口。操作系统提供的用户接口有:命令接口和程序接口。其中用户可以直接使用命令接口与操作系统进行交互,完成作业的执行。程序接口则是由程序员通过编程,使用这些接口来请求操作系统提供的服务。
命令接口
命令接口分为两类:联机命令接口和脱机命令接口
联机命令接口
联机命令接口又称交互式命令接口,适用于分时或实时系统的接口。它由一组键盘操作命令组成,用户通过控制台或终端输入操作命令,向系统提出各种服务要求。用户每输入一条命令,控制权就会被转交给操作系统的命令解释程序,然后由命令解释程序解释并且执行输入的命令,完成指定的功能,然后,控制权转回控制台或终端,此时用户又可以输入下一条命令。即:用户使用联机命令接口与操作系统的交互,是交替进行的。
脱机命令接口
脱机命令接口又称批处理命令接口,适用于批处理系统,它由一组作业控制命令组成,脱机用户无法直接干预作业的运行,而是事先用相应的一系列的控制命令编写成一份作业操作说明书,连同作业一起提交给操作系统。系统调度到该作业时,由系统中的命令解释程序逐条执行作业说明书上的命令,从而间接的控制作业的运行。即:用户使用脱机命令接口与操作系统的交互,是事先提供作业清单,随后交给系统按照清单逐条执行的。
例如Windows中的bat批处理文件
程序接口(系统调用)
程序接口由一组系统调用(也被称为广义指令)组成。程序员通过在程序中使用这些系统调用来请求操作系统提供的某些服务,例如各种外部设备、申请分配和回收内存等。
下图是程序员通过程序接口使用程序接口,请求操作系统提供显示器的显示服务的示例。
目前最为流行的图形用户界面(GUI),即图形接口,就是通过调用程序接口实现的。用户通过GUI,可以直接使用鼠标和键盘方便的使用操作系统。
作为计算机资源的扩充
裸机(没有任何软件的计算机)是构成计算机系统的物质基础,而呈现在用户面前的计算机系统是经过若干层软件改造后的计算机,裸机在最里层,外面一层是操作系统,操作系统提供的资源管理功能和方便用户使用的各种服务接口,使得裸机的功能更为强大和方便使用。因此我们常把覆盖了软件的机器称为扩充机器或虚拟机。
3.操作系统的特征
①并发
并发是指两个或多个事件在同一时间间隔内发生。这些事件在宏观上是同时发生的,在微观上是交替发生的。在操作系统中,并发指计算机系统中同时存在多个运行的程序,操作系统具有处理和调度多个程序同时执行的能力。在多道程序环境下,一段时间内,宏观上有多道程序在同时执行,而在每个时刻,单处理机环境下仅能有一道程序执行,因此微观上这些程序仍然是分时交替执行的,即操作系统的并发性是通过分时实现的。
②共享
共享即资源共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。资源共享分为两类方式:互斥共享方式和同时访问方式
互斥共享方式
系统中的某些资源(如打印机等),虽然可以供给多个进程使用,但是为了使打印的结果不发生混淆,应规定一段时间内只允许一个进程访问该资源。
因此,使用互斥共享方式的资源,在同一时间段内,只能有一个进程访问,例如,进程A想要访问某个资源,需要先提出请求,若此时资源空闲,则系统就将该资源分配给进程A,此时进程B如果也想访问资源,则进程B必须等待进程A使用完资源后释放资源。这种方式就是互斥共享。
同时访问方式
系统中的某些资源(如磁盘等),允许一段时间内多个进程“同时”访问,这里所说的“同时”是宏观上的。即这些资源允许多个进程并发性的访问。例如多个进程可以并发性的访问磁盘设备,读取某个文件。
并发和共享是操作系统两个最基本的特征,两者之间的关系是互为存在条件,若系统不允许程序并发执行,那么自然就不存在资源共享的问题;若系统不能对资源共享实施有效的管理,那么就会影响到程序的并发执行。
③虚拟
虚拟是指把一个物理上的实体变为若干逻辑上的对应物。物理实体是实际存在的,逻辑上的对应物是不存在的,是用户感觉出来的事物。在操作系统中,使用虚拟技术实现了虚拟处理器、虚拟内存以及虚拟外部设备等功能。
虚拟处理器
虚拟处理器是通过多道程序设计技术,采用让多道程序并发的执行,分时使用一个处理器。此时,虽然只有一个处理器,但是在宏观上,它可以同时为多个用户服务,使得每个终端用户都感觉有一个CPU在专门为它服务。
虚拟内存
虚拟内存是一种操作系统的内存管理技术,它将物理内存和磁盘空间结合起来,为每个运行的程序提供一个虚拟的地址空间。每个程序都认为它拥有连续的可用内存空间,称为虚拟内存地址空间。这个地址空间可以大于实际的物理内存大小。此时用户感觉到的内存容量是虚拟的。
当一个程序运行时,操作系统将程序所需的内存页面从磁盘加载到物理内存中的一部分。这些页面可以根据需要进行交换,从而允许同时运行的程序数量超过物理内存的限制。当一个程序需要的页面不再需要时,操作系统可以将其交换回磁盘,从而释放出物理内存供其他程序使用。
尽管有时程序的总内存需求超过了你的电脑的物理内存大小,但操作系统会根据需要进行页面交换,将正在使用的页面加载到物理内存中,而将其他不活跃的页面交换到磁盘上。这样,虽然有些程序的内存页面可能位于磁盘上,但它们仍然可以运行,并且操作系统会根据需要动态地管理内存资源,以提供最佳的性能。
虚拟外部设备
虚拟外部设备是通过虚拟技术,将一台物理I/O设备虚拟为多台逻辑上的I/O设备,允许每个用户占用一台逻辑上的I/O设备,使原来仅允许在一段时间内由一个用户访问的设备变为一段时间内允许多个用户同时访问的共享设备。
操作系统的虚拟技术可以总结为:时分复用技术(虚拟处理器) 和 空分复用技术(虚拟内存)。
操作系统的虚拟技术的前提条件是并发性,如果没有并发性,一段时间内系统中只能运行一个进程,那么虚拟性就失去了意义,即 没有并发性,就没有虚拟性。
④异步
操作系统在多道程序的环境下,由于多个程序是并发执行的,因此每个进行的执行不是一贯到底的,而是走走停停的,每个进程都是以不可预知的速度向前推进,这就是进程的异步性。
由于并发运行的进程会争抢有限的系统资源,因此进程的执行不是一贯到底的,只有系统拥有并发性,才有可能导致异步性。
4.操作系统的发展历程
手工操作阶段
由此可以看出,手工操作阶段有两个主要缺点:
- 用户独占全机,资源利用率低
- CPU等待手工操作,利用不充分
单道批处理系统
在单道批处理系统中,引入了脱机输入/输出技术(外围机+磁带),由监督程序负责控制作业的输入和输出,解决了人机矛盾以及CPU和I/O设备速率不匹配的问题。
多道批处理系统(操作系统正式诞生)
为了解决单道批处理系统的缺点,多道批处理系统应运而生,它使用多道程序设计技术,允许多个程序同时进入内存,并且允许它们在CPU中交替运行,这样,即使有某个程序A在运行的过程中请求了I/O设备,CPU也可以立即去运算其他程序,待I/O设备处理完毕后再继续运算程序A。
分时操作系统
分时操作系统:计算机以时间片为单位轮流为各个用户/作业服务,各个用户可通过终端与计算机进行交互。
主要优点:用户请求可以被即时响应,解决了人机交互问题。允许多个用户同时使用一台计算机,并且用 户对计算机的操作相互独立,感受不到别人的存在。
主要缺点:不能优先处理一些紧急任务。操作系统对各个用户/作业都是完全公平的,循环地为每个用户/ 作业服务一个时间片,不区分任务的紧急性。
实时操作系统
实时操作系统:为了解决分时系统无法处理紧急任务的问题,实时系统应运而生。实时系统分为两种,硬实时系统和软实时系统。
主要优点:能够优先响应一些紧急任务,某些紧急任务不需时间片排队。 在实时操作系统的控制下,计算机系统接收到外部信号后及时进行处理,并且要在严格的时限内处理完事件。实时操作系统的主要特点是及时性和可靠性
网络操作系统
是伴随着计算机网络的发展而诞生的,能把网络中各个计算机有机地结合起来,实现数据传 送等功能,实现网络中各种资源的共享(如文件共享)和各台计算机之间的通信。(如:Windows NT 就是 一种典型的网络操作系统,网站服务器就可以使用
分布式计算机操作系统
分布式计算机操作系统由多台计算机组成,并且满足以下几个条件:
- 系统中任意两台计算机间能够正常通信
- 系统中的每台计算机都具有同等地位,没有从机和主机之分
- 每台计算机上的资源为所有用户共享
- 系统中的任意一台计算机都可以构成一个子系统且可以重构
- 任何工作都可以分布在几台计算机上,由它们并行、协同完成。
其主要特点就是分布性和并行性。
个人计算机操作系统
目前使用最广泛的操作系统,例如Windows、Linux和MacOS等。
5.操作系统的运行机制
当我们程序员写完一段代码后,交由编译器编译后,会形成二进制指令文件,该文件中的指令才是CPU能够识别并且执行的指令。同理,一个程序想要在计算机中运行,那么其内部程序必定需要被编译成一条一条的二进制指令,交由CPU识别和执行。
5.1内核程序(管理程序)与用户程序(应用程序)
计算机系统中,通常CPU执行两种不同性质的程序:一种是操作系统内核程序;一种是系统外层的应用程序,简称“用户程序”。其中内核程序是用户程序的管理者,在内核程序中可以执行特权指令,在用户程序中只能执行非特权指令。我们程序员写的程序一般就是用户程序。
内核是操作系统最重要最核心的部分,也是最接近硬件的部分。甚至可以说,一个操作系统只要有内核就够了(eg:Docker—>仅需Linux内核)。操作系统的功能未必都在内核中,如图形化用户界面 GUI。
5.2特权指令与非特权指令
在CPU可以识别的指令中,按照权限分为两种指令,特权指令和非特权指令。
特权指令
不允许用户直接使用的指令,如I/O指令、置中断指令,存取用于内存保护的寄存器、送程序状态字到程序状态字寄存器等的指令。
非特权指令
允许用户直接使用的指令,非特权指令不能直接访问系统中的软硬件资源,仅限于访问用户的地址空间,可以防止用户程序对系统程序进行破坏。
5.3内核态与用户态
CPU的运行模式分为两种模式,用户态(目态)和内核态(核心态、管态)。处于内核态时,说明此时正在运行的是内核程序,此时可以执行特权指令;处于用户态时,说明此时正在运行的是应用程序,此时只能执行非特权指令
CPU如何识别当前处于用户态还是内核态
在CPU中有一个寄存器叫程序状态寄存器(PSW,Program Status Word),该寄存器中有一个二进制位,1表示CPU处于“内核态”,0表示CPU处于“用户态”。CPU处于内核态时,说明正在运行内核程序,可以执行特权指令,CPU处于用户态时,说明正在运行用户程序,此时只能执行非特权指令。
CPU如何切换状态
- CPU想要从用户态切换至内核态,需要由用户程序触发中断或异常后,由硬件实现将PSW标志位设置为1后,就会切换到内核态。
- CPU想要从内核态切换至用户态,由内核程序调用一条修改PSW的特权指令即可。
5.4操作系统内核包括的内容
时钟管理
时钟是操作系统最基本以及最关键的设备,它提供了计时、中断等功能。
- 计时功能使得操作系统可以为用户提供标准时间。
- 时钟中断功能,可以实现进程的切换,例如分时操作系统中的时间片轮转管理。
中断机制
操作系统引入中断计时的初衷是为了提高多道程序环境中的CPU利用率,即使得多道程序可以并发执行。随着时间的推移,中断机制逐渐成为了现代操作系统的基础。例如,键盘或鼠标信息的输入、进程的管理和调度、系统功能的调用、设备驱动、文件访问等等,这些功能都依赖于中断机制。
原语
操作系统的底层是一些可以被调用的公用小程序,它们可以各自完成一定的操作,这些小程序被称为原语,它们具有以下特性
- 处于操作系统的最底层,是最接近硬件的部分。
- 具有原子性,运行一气呵成,无法被中断。
- 运行需要的时间短,且会被频繁调用。
定义原语的直接方法是关闭中断,待原语执行结束后再打开中断。系统中的设备驱动、CPU状态切换、进程通信等功能的部分操作都可以定义为原语。即,使用“关中断指令”和“开中断指令”这两个特权指令实现原子性。使用了“关中断指令”后,CPU就不会在执行程序时检测是否有中断信号。使用了“开中断指令”后,CPU才会在执行程序时检测是否有中断信号。
系统控制的数据结构及处理
在操作系统中有许多用来登记状态信息的数据结构,如进程控制块、作业控制块、消息队列、缓冲区等,为了实现有效的管理,系统定义了一些基本的操作。
- 进程管理:负责进程状态管理、进程调度和分派、创建与撤销进程控制块等。
- 存储器管理:负责存储器的空间分配和回放、内存信息保护程序、代码对换程序等。
- 设备管理:负责缓冲区管理、设备分配和回收等。
内核态指令实际上包括系统调用类指令和一些针对时钟、中断和原语的操作指令。
6.中断和异常
中断是操作系统内核抢夺回CPU使用权的唯一途径。
- 内核态用户态:执行一条特权指令——修改PSW的标志位为“用户态”,这个动作意味着操作系统 将主动让出CPU使用权
- 用户态内核态:由“中断”引发,硬件自动完成变态过程,触发中断信号意味着操作系统将强行夺 回CPU的使用权
6.1中断的类型
中断分为外中断和内中断两种类型。
外中断
与CPU当前执行的指令无关, 中断信号来源于CPU外部。通常用于信息输入/输出,如设备发出的I/O结束中断,表示设备输入/输出完成。
内中断
与CPU当前执行的指令有关, 中断信号来源于CPU内部。内中断也被称为异常,指来自CPU执行指令内部的事件,如程序的非法操作码、地址越界以及专门的陷入指令等引起的事件。
6.2中断的基本原理
中断和异常的处理过程大致如下
当CPU在执行用户程序的第i条指令时检测到一个异常事件(或者在执行第i条指令后发现一个中断请求信息),则CPU中断当前应用程序,然后转换为内核态,交由相应的中断或异常处理程序执行。如果中断或异常处理程序能够解决该问题,则在中断或异常处理程序执行结束后,将CPU通过执行中断或异常返回指令回到被中断的用户程序的第i条指令或第i+1条指令继续执行;如果中断或异常处理程序发现这是一个不可恢复的致命错误,则终止用户程序。
其中,CPU检测到中断或异常后,会在“中断向量表”中,根据不同的中断信号类型,查找相应的中断处理程序的位置。
7.系统调用
操作系统作为用户和计算机硬件之间的接口,需要向上提供一些简单易用的服务。主要包括命令接口和程序接口。其中,程序接口由一组系统调用组成。
7.1系统调用与库函数的区别
7.2系统调用的必要性
如果没有系统调用,即操作系统不会统一管理计算机的各种共享资源,那么如下场景就会发送错误:
当你想通过打印机打印某个文件,你使用鼠标按下了word的“打印”按钮,于是打印机开始打印你的文件。
过了一会儿,另外一个同事,按下了WPS的"打印"按钮,于是打印机开始打印他的文件,此后,这两个进程就会并发执行,你的文件内容会和他的文件内容混杂在一起。
上述场景就是因为打印机这个共享资源没有被统一管理。
因此系统调用的必要性就体现出来了,由操作系统内核对共享资源进行统一管理,并且向上提供"系统调用",用户进程如果想要使用打印机这种共享资源,必须通过系统调用向系统内核发送请求,系统内核再去协调处理这些请求。
7.3系统调用的适用场景
凡是与共享资源有关的操作(I/O操作、文件管理等),都必须通过系统调用的方式向操作系统内核提出请求,由操作系统内核代为完成。这样可以保证系统的稳定性和安全性,防止用户的非法操作。
7.4系统调用的过程
具体步骤如下:
- CPU执行应用程序,应用程序的某些指令传入一些系统调用参数,随后执行到陷入指令
- CPU执行到该陷入指令(陷入指令 = trap 指令 = 访管指令)后,该中断指令引发中断信号,CPU转入内核态,由相应的中断处理程序(系统调用入口程序)占用,根据寄存器中的某些参数,辨别是什么类型的系统调用
- 该系统调用的处理程序占用CPU执行相关指令,执行完毕后,返回应用程序,继续执行后续指令
上述过程可以总结为:
传递系统调用参数->执行陷入指令->执行相应的处理程序处理系统调用->返回应用程序
8.操作系统的结构
随着操作系统的不断壮大,操作系统也出现了多种体系结构,目前,我们可以把操作系统的体系结构分为:分层结构、模块化、宏内核、微内核以及外核这五种。
分层结构
分层结构是指将操作系统分为若干层,最底层(0层)是硬件,最高层(N层)是用户接口,每层只能调用紧邻它的低层的功能和服务,即低层向上层提供服务,高层单向依赖它的下一层。具体如下图所示。
优点:
- 便于系统的调试和验证,简化了系统的设计与实现。
- 易于扩展与维护。可以很方便的修改某一层的功能,只要不改变该层的层间接口就不会影响其他层。
缺点:
- 各个层次之间难以界定。
- 效率较差,每次执行高层的功能时,都可能需要自下而上的不断调用低层的服务。
模块化
模块化指将操作系统按照功能划分为若干个独立的模块,每个模块负责某方面的功能,每个模块又可以进一步划分为各个子模块。如下图所示
优点:
- 提高了操作系统设计的正确性、可理解性和可维护性
- 增强了操作系统的可适应性
- 提高了操作系统的开发效率
缺点:
- 模块之间的接口很难满足对接口的实际需求
- 各个模块设计者齐头并进,每个决定无法建立在上一个以验证的正确决定的基础上,因此无法找到一个可靠的决定顺序(相对于分层结构而言)。
宏内核
宏内核又被称为单内核或者大内核,是指将操作系统的主要功能都作为一个紧密联系的整体运行在核心态,从而为用户程序提供高性能的系统服务。示意图如下
优点:由于各个模块之间共享信息,可以快速的调用各个模块之间的服务,因此,宏内核具有极高的性能优势。
缺点:
- 内核功能复杂,难以维护。
- 内核中的某个功能模块出现故障,就可能导致整个系统崩溃。
微内核
微内核是指将操作系统内核中最基本的功能保留在内核,将不需要在核心态执行的功能移到用户态执行,降低内核的设计复杂性。那些被移出内核的操作系统代码根据分层的原则被划分成若干服务程序,它们的执行相互独立,交互则借助于微内核的消息传递机制进行通信。
因为时钟管理、中断机制、原语是直接和硬件相关系的,而进程管理、存储器管理、设备管理这些工作更多的是对数据结构的操作,不会直接涉及硬件。所以微内核只包含了时钟管理、中断机制和原语。
优点:
- 易扩展,很多功能在内核外,修改或者新增一些功能是十分容易的。
- 具有极好的可移植性,与CPU和I/O硬件相关的代码都放在内核中,其他的各种服务器都与硬件无关,因此将操作系统移植到另一个平台上需要的改动就很小了。
缺点:微内核结构的缺点主要在于性能,因为它需要频繁的在核心态和用户态进行切换。
外核
外核负责为用户分配未经抽象的硬件资源并保证资源使用安全。"未经抽象"就是指操作系统没有额外的处理,资源被直接分配给应用程序。
这种"未经抽象"的分配方式可以让应用程序更高效地使用硬件资源,因为它们可以更直接地与硬件交互,而不必经过复杂的中间步骤。但同时,这也需要操作系统确保应用程序之间不会互相干扰或滥用硬件资源,以保证系统的稳定性和安全性。因此,外核的工作就是在分配硬件资源时保证资源的合理使用,同时确保系统的安全性。
9.操作系统引导程序
我们了解到,操作系统本质上也是一种程序,那么在计算机中,程序都是以数据的形式存放在硬盘的。当我们电脑按下开机键,如何运行安装在硬盘上的操作系统呢?这就需要操作系统引导程序来完成了。
它是指计算机利用CPU运行特定程序->通过程序识别硬盘->识别硬盘分区-识别磁盘分区上的操作系统->最终通过程序启动操作系统。上述过程就是在操作系统引导程序的引导下,一环扣一环的完成的。
操作系统引导的过程
下图所示是一个空的磁盘
下图所示是一个安装了操作系统后的磁盘
下图所示是主存示意图,主存即内存,是CPU能直接寻址访问的存储空间。在计算机工作的时候,所有的数据都要先经过内存,然后才能交由处理器去处理,内存也被称为,CPU与外存通信的桥梁。它的特点是读写速度快。
内存一般是由半导体器件组成,可分为RAM(随机存储器)、ROM(只读存储器)、Cache(高速缓存)。
- RAM即我们平常说的运行内存,一旦断电数据也将消失。
- ROM为只读存储器,在制造ROM的时候,信息(比如数据或者程序)就被永久写入并永久保存。这些信息只能读入,不能写入。即使处于停电状态,这些信息也不会丢失。ROM一般用于存放计算机的基本程序和数据,如BIOS芯片。
- Cache,介于CPU与内存,平时我们经常看到的是,一级缓存(L1 Cache)、二级缓存(L2 Cache)、三级缓存(L3 Cache),它处于CPU与内存之间,是一个读写速度比内存更快的存储器,当CPU向内存读取或者存入数据时,这些数据也会被存储进Cache中。当CPU再次需要访问这些数据时,CPU就从Cache中读取数据,而不是去访问速度较慢的内存,当然了,如果Cache中没有需要的数据,CPU会去访问内存,读取需要的数据。
整个过程如下图所示: