1.1 基本概念
1.1.1 操作系统定义
计算机系统自底向上分为四部分:硬件、操作系统(Operating Syetem,OS)、应用程序、用户。操作系统作为应用程序与硬件系统的中介,起着管理硬件,为各类应用程序协调所需运行资源的作用,达到合理分配硬件资源,调度应用软件作业,让计算机系统更好的为用户服务的目的。
1.1.2 操作系统特征
1.并发(Concurrence)
多个时间在同一时间间隔内发生,即在计算机系统中,可以处理和调度多个程序同时执行的能力,引入进程的目的是使程序能够并发执行。
注意:并发和并行的区别,并发是在同一时间间隔内,宏观上多个程序是同时执行的,而在微观上,每个时刻上,仅执行一个程序,多个程序分时执行;并行(Parallel)是在宏观上与微观上不同程序(线程)是同时执行的,需要硬件支持,多处理器或多线程。
2.共享(Sharing)
系统中的资源可供内存中多个并发执行的进程共同使用。
(1)互斥共享方式:一段时间内只允许一个进程访问该资源,保证程序运行结果的正确性,比如打印机、磁带机。采用这类共享方式的资源称为临界资源或独占资源,用前申请,闲置分配,不闲置等待。
(2)同时访问方式:在同一时间段内,允许多个进程宏观上同时访问某个资源,但在微观上,在某个时刻上,资源是被单独的访问的,这个资源对各个进程来说是分时共享的。
注意:并发和共享是操作系统的两个最基本特征,两者互为存在的条件:(1)共享是以程序并发为条件的;(2)资源共享又是并发的前提
3.虚拟(Virtual)
把物理实体变成逻辑上的对应物,例如虚拟处理器、内存或外部设备。虚拟处理器技术是通过多道程序设计技术,采用让多道程序并发执行的方法,分时使用处理器,同时为多个用户服务,让用户以为他独占处理器。虚拟存储技术是将物理存储器变成虚拟存储器,在逻辑上扩充容量。或将一台物理I/O设备,逻辑虚拟出多台逻辑I/O设备,同时为多个用户提供服务。
虚拟式技术分为:时分复用技术,CPU分时共享;空分复用技术,虚拟存储器。
4.异步(Asynchronism)
多个程序并发执行时,由于资源的限制,进程是断断续续执行完毕的。所以内存中的每个进程执行、暂停时间都是不可预知的,但操作系统可保证运行结果相同。
1.1.3 操作系统的目标和功能
1.操作系统的功能(计算机系统资源的管理者)
(1)处理机管理:
实际上是进程管理,包括进程控制、进程同步、进程通信、死锁处理、处理机调度,利用上述功能来决定何时创建、撤销进程,如何管理避免进程之间资源利用的冲突,如何以最合理的方式分享系统资源。
(2)存储器管理:
目的是提高内存利用率及方便用户使用内存,包括分配与回收、地址映射、内存保护、内存扩充等。
(3)文件管理:
包括文件存储空间的管理、目录管理、文件读写管理和保护等。
(4)设备管理:
主要任务是完成用户的I/O请求,方便用户使用各种设备,并提高设备利用率,包括缓冲管理、设备分配、设备处理、虚拟设备等。
2.操作系统为用户和硬件之间的接口
(1)命令接口:
按作业方式分为联机命令接口和脱机命令接口
联机命令接口(交互式命令接口):用于分时或实时操作系统,由一组键盘命令组成,用户通过控制台或终端输入命令,命令解释程序解释并执行命令,完成用户请求的功能,如此往复。
脱机命令接口(批处理命令接口):用于批处理系统,由一组作业控制命令组成,这一组命令一旦发出,用户不能直接干预作业的运行,而事先用相应的作业控制命令写成一份作业操作说明书,连同作业一同提交给系统,命令解释程序解释并执行命令,用户可以间接地控制作业运行。
(2)程序接口
由一组系统调用(广义指令)组成。用户通过在程序中使用系统调用来请求服务。
当前最流行的是图形用户界面(GUI),GUI最终是通过调用程序接口实现的,用户图形界面不是操作系统的一部分,但其所调用的系统调用命令是操作系统的一部分。
3.操作系统用作扩充机器
操作系统提供的资源管理功能和服务功能将裸机改造成功能更强,使用更方便的机器,因此把覆盖了软件的机器成为扩充机器或虚拟机。
1.2 操作系统的发展与分类
1.2.1 手工操作阶段(无操作系统)
所有工作需要人工干预,如程序的装入、运行、结果的输出等,此阶段有两个突出的缺点,用户独占全机,资源利用率低;CPU等待手工操作,导致其利用不充分。
1.2.2 批处理阶段(有操作系统)
1.单道批处理系统
系统成批处理系统时,但内存中只保持一道作业,主要特征:
自动性:能自动地逐个运行,无需人工干预
顺序性:顺序地进入内存,处理完成顺序与进入内存地顺序完全一致
单道性:内存中仅存一道程序运行,此程序运行完毕,加载另一道程序
依据其作业方式和特性,单道批处理地问题是运行时,高速的CPU经常等待低速的I/O,导致CPU在许多时候处于闲置状态,资源不能得到高效的利用,需要引入多道程序技术。
2.多道批处理系统
允许多个程序同时进入内存并在CPU上交替运行,这些程序共享系统中的资源,使系统运行效率翻倍。它的特点是多道,宏观上并行、微观上串行。
多道程序设计技术的实现需要解决下列问题:
如何分配处理器;多道程序的内存分配问题;I/O设备如何分配;如何组织和存放大量的程序和数据,方便用户使用并保证其安全性与一致性
多道批处理系统的优点:资源利用率高;系统吞吐量大。缺点:用户响应的时间较长;不提供人机交互能力,程序的运行对于用户来说是一个黑盒。
1.2.3 分时操作系统
把处理器的运行时间分成很短的时间片,按时间片轮流把处理器分给各联机作业使用,若一个时间片不够用,会等待下一轮,继续将时间片分配给该程序使用,给每个用户的感觉是用户在独占整个计算机。
分时操作系统运行时,多个用户可以同时与主机进行交互操作,它也支持多道程序设计,但不同于多道批处理系统,多道批处理系统是作业自动控制而无需人工干预,分时系统可以实现人机交互,其主要特征如下:
同时性(多路性):多个用户同时使用一台计算机,实现多个用户的同时操作;
交互性:用户直接控制程序的运行,同程序进行交互;
独立性:多个用户同时彼此独立的对计算机进行操作;
及时性:用户请求在很短的时间内得到响应。
1.2.4 实时操作系统
分成两类,硬实时系统:在规定的时间范围内或时刻,某个任务必须执行完毕,如飞行器控制系统;软实时系统,保证让某个任务在规定的时间内完成,但偶尔未按时完成,后果也可接受,如飞机订票系统、银行管理系统。
其特点是及时性与可靠性。
1.2.5 网络操作系统和分布式计算机系统
1.网络操作系统:把网络中各台计算机有机结合起来,提供统一、有效的资源调度与任务管理,实现不同计算机之间数据的传输。特点是资源的共享和计算机之间的通信。
2.分布式计算机系统:满足由多台计算机组成,任意两台计算机可以交换信息,地位同等,资源为所有用户共享,任意台计算机都可构成一个子系统且能重构,任务可在多台计算机中并行执行。特点是分布性和并行性。
两者本质不同:分布式操作系统中的若干计算机相互协同完成同一任务。
1.2.6 个人计算机操作系统
主要有Windows、Linux、Unix、Macintosh,嵌入式操作系统、服务器操作系统、智能手机操作系统(IOS/Android)。
1.2.7 操作系统发展历程(如下图)
1.3 操作系统运行环境
1.3.1 操作系统的运行机制
CPU执行系统内核程序和应用程序,前者管理后者,因此内核程序可以执行特权指令。特权指令是不允许用户直接调用的指令,比如I/O指令、置中断指令,存取用于内存保护的寄存器、送程序状态字到程序状态字寄存器等的指令。在具体实现上,CPU状态分为两个状态,一个是用户态(目态)和核心态(又称管态、内核态),内核程序与应用程序分别在CPU处于核心态和用户态时运行。
操作系统的各项功能分别被设置在不同层次上,与硬件关联紧密的模块,如时钟管理、中断处理、设备驱动等处于最底层;在其之上是运行频率较高的程序,如进程管理、存储器管理和设备管理等;这两部分构成了系统内核,工作在核心态。
内核包括4方面的内容:
1.时钟管理:时钟是最关键的设备,第一个功能是计时,提供标准的系统时间,第二个功能是通过时钟中断的管理,可以实现进程的切换。
2.中断机制:中断机制的目标是提高多道程序运行环境中CPU的利用率,是操作系统各项操作的基础,在中断机制中,只有一小部分功能属于内核,它们负责保护和恢复中断现场的信息,转移控制权到相关的处理程序。
3.原语:原语的特点是处于操作系统的最底层,是最接近硬件的部分;有原子性,只能一次干完;运行时间短,且调用频繁。定义原语的直接方法是关闭中断,让其所有动作不可分割地完成后再打开中断。
4.系统控制地数据结构及处理
系统中登记状态信息地数据结构有:作业控制块、进程控制块(PCB)、设备控制块、各类链表、消息队列、缓冲区、空闲区登记表、内存分配表等。
系统基本操作有三种:进程管理,进程状态管理、进程调度和分配、创建与撤销进程控制块等;存储器管理,存储器的空间分配和回收、内存信息保护程序、代码对换程序;设备管理,缓冲区管理、设备分配与回收等。
1.3.2 中断和异常的概念
核心态和用户态进行切换时,通过中断和异常完成,实现方式:可以用一个特殊寄存器的一位来表示CPU所处的状态,0表示核心态,1表示用户态。引入中断和异常,就是为了更大的提高资源的利用率。
1.中断(Interruption)的定义:也称外中断,指来自CPU执行指令以外的事件的发生,如设备发出的I/O结束中断,表示设备输入/输出处理已经完成,希望处理机向设备发出下一个输入/输出请求,同时让输入/输出的程序继续运行;再如时钟中断,表示固定时间片已到,让处理机处理计时、启动定时运行的任务等。这一类中断通常是与当前指令执行无关的事件。
2.异常(Exception)也称内中断、例外或陷入(trap),指源自CPU执行指令内部的事件,如程序的非法操作码、地址越界、算数溢出、虚拟系统的缺页和专门的陷入指令等引起的事件。对异常处理一般要依赖于当前程序的运行现场,而且异常不能被屏蔽,一旦出现立刻处理。
中断和异常的联系与区别:
3.中断处理的过程
1)关中断:CPU响应中断之后,首先要保护程序的现场状态,在保护现场的过程中,CPU不应响应更高级中断源的中断请求。否则,若现场保护不完整,在中断服务程序结束后,也就不能正确地恢复并继续执行现行程序。
2)保存断点:为保证中断服务程序执行完毕之后能正确地返回到原来地程序,必须将原来地程序的断点(程序计数器PC)保存起来。
3)引出中断执行服务程序:实质是取出中断服务程序的入口地址送入程序计数器PC。
4)保存现场和屏蔽字:进入中断服务程序之后,首先要保存现场,现场信息一般指程序状态字寄存器PSWR和某些通用寄存器的内容。
5)开中断:允许更高级中断请求得到响应。
6)执行中断服务程序:中断请求的目的。
7)关中断:保证在恢复现场和屏蔽字时不被中断。
8)恢复现场和屏蔽字:将现场和屏蔽字恢复到原来的状态。
9)开中断、中断返回:中断服务程序的最后一条指令通常是一条中断返回指令,使其返回到原程序的断点处,以便继续执行原程序。
其中1)——3)是在CPU进入中断周期后,由硬件自动(中断隐指令)完成的;4)——9)由中断服务程序完成。恢复现场是指在中断返回前,必须将寄存器的内容恢复到中断处理前的状态,这部分由中断服务程序完成。中断返回由中断服务程序的最后一条中断返回指令完成。
中断处理的流程如下图:
1.3.3 系统调用
指用户在程序中调用操作系统所提供的一些子功能,系统调用可视为特殊的公共子程序。系统中的共享资源由操作系统统一掌握分配,在应用程序中,与资源有关的操作,须通过系统调用的方式向操作系统提出请求。一般一个操作系统提供的系统调用命令有几十条甚至上百条。
系统调用分为:
设备管理:完成设备的请求或释放,以及设备启动等功能;
文件管理:完成文件的读、写、创建及删除等功能;
进程控制:完成进程的创建、撤销、阻塞及唤醒等功能;
进程通信:完成进程之间的消息传递或信号传递等功能;
内存管理:完成内存的分配、回收以及获取作业占用内存区大小及起始地址等功能。
完成系统调用必须使用特权指令,所以系统调用的处理需要由操作系统内核程序负责完成,要运行在核心态。应用程序可以执行陷入指令(又称访管指令或trap指令)来发起系统调用,请求操作系统提供服务。
操作系统的运行环境可以理解为:用户通过操作系统运行上层程序(如系统提供的命令解释程序或用户自编程程序),上层程序的运行依赖于操作系统的底层管理程序提供服务支持,需要管理程序服务时,系统则通过硬件中断机制进入核心态,运行管理程序;也可能是程序运行出现异常情况,被动地需要管理程序地服务,通过异常进入核心态。管理程序运行结束时,应用程序继续进行。整个过程如下图所示:
用户态转向核心态地举例:
1)应用程序要求操作系统地服务,即系统调用;
2)发生中断;
3)应用程序中产生一个错误状态;
4)用户程序中企图执行一条特权指令;
5)从核心态转向用户态由一条指令实现,这条指令也是特权命令,一般是中断返回指令。
状态切换地过程中,相应地堆栈也需转换;在此过程中,会用到访管指令,此指令是在用户态使用地,它不是特权指令。
1.4 操作系统地体系结构
1.4.1 大内核和微内核
核心态为应用程序提供公共服务,但应提供什么具体服务?或怎样提供服务?有两种体系结构回答上述问题:大内核和微内核。
大内核:将操作系统的主要功能模块作为一个紧密联系的整体运行在核心态,提供高性能的系统服务。各模块之间高度信息共享,有非常高的性能。
但随着需求的不断增长,需要操作系统提供的服务越来越多,大内核体系不能满足需求,所以,设计人员尝试通过按照复杂性、时间常数、抽象级别等因素,将操作系统分成若干个层次,定义层次之间的服务结构,提高操作系统内核的模块化。但出现了层次之间关系复杂,接口定义模糊的问题。
为解决上述问题,提出微内核的体系结构:内核中最基本的功能保留在内核,不需要再核心态的功能移动到用户态,降低内核设计的复杂性。被移出内核的操作系统代码根据分层原则被划分为若干服务程序,相互独立执行,借助微内核进行通信。
微内核结构有效的分离了内核与服务、服务与服务,使得它们之间的接口越来越清晰,维护的代价大大降低,各部分可以独立地优化和演进。
但微内核也会因为进行频繁地核心态与用户态地切换,导致性能地损失,但体系更改提升地性能,足以抵消因为切换产生的性能的降低。