第一节:多道程序设计
就是允许多个程序同时进入内存并运行,多道程序设计是操作系统所采用最基本、最重要的技术,其根本目的是提高整个系统的效率。 衡量系统效率的尺度是系统吞吐量,所谓系统吞吐量是指单位时间内系统所处理进程的数量。·程序的顺序执行: 程序是一个在时间上按严格次序前后相继的操作序列。 特点: 1、 顺序性 :程序所规定的动作在机器上,严格地按照顺序执行,程序和机器执行的活动严格一一对应。 2、 封闭性 :程序运行后,其计算结果只取决于程序自身,不受外界因素的影响。 3、 程序执行结果的确定性 :程序执行结果与时间和速度无关。 4、 程序执行结果的可再现性 :不管何时执行,只要初始条件相同,则无论何时重复执行该程序都会得到相同的结果。

顺序环境下执行A程序和B程序(上图)
执行完两个程序共计时间80秒,CPU执行时间40秒,DEV1执行时间10秒,DEV2执行时间30秒,利用率为:
CPU:40/80=50%
DEV1:10/80=12.5%
DEV2:30/80=37.5%
·程序的并发执行: 两个或两个以上程序在计算机系统中,处于已开始执行且尚未结束的状态。 特点: 1、在执行期间并发性程序相互制约:资源共享和竞争存在于多道程序并发执行中,从而制约了各道程序的执行速度。 2、程序与计算不再一一对应:在并发执行中,允许多个用户进程调用一个共享程序段,从而形成了多个计算。 3、并发程序的执行结果不可再现:并发程序执行结果与其执行的相对速度以及并发执行的多道程序之间的相互关系有关,导致执行结果是不确定的。 4、程序的并行执行与程序的并发执行,其两者的差异是:前者是指无论从宏观的时间周期上看,还是从微观的执行上看,若干个程序确实在同时运行,而后者是如果在单处理器系统中,他们在宏观上看是同时进行的,但在微观上,这些程序仍然是顺序进行的。

执行完两个程序共计时间45秒,CPU执行时间40秒,DEV1执行时间10秒,DEV2执行时间30秒,利用率为:
CPU:40/45=89%
DEV1:10/45=22.22%
DEV2:30/45=66.66%
·多到程序设计: 采用多道程序设计可以提高处理器的利用率,多道程序设计技术充分发挥了处理器与外围设备以及外围设备之间的并行工作能力,从而提高处理器和其他各种资源的利用率。 特点: 1、 独立性 :多道环境下执行的每道程序都是逻辑上独立的。 2、 随机性 :在多道程序环境下,程序和数据的输入与执行开始时间都是随机的。 3、 资源共享性 :输入输出设备、内存、信息等资源都将被各个程序所共享。 多道程序设计的缺陷: 1、 可能延长程序执行的时间 。 2、 系统效率的提高有一定限度 。
第二节:进程
进程是具有一定独立功能的程序在某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。它分为系统进程和用户进程两类,系统进程的优先级通常高于一般用户进程的优先级。
程序和进程的关系:程序是构成进程的成分之一,进程是由程序、数据和进程控制块三部分组成。程序的存在是永久的,一个进程可以包括若干个程序的执行,而一个程序可以产生多个进程。
·进程的特性:
1、并发性:一个进程可以同其他进程一道向前推进。
2、动态性:进程有生命周期,在进程的生命周期内,进程的状态是不断变化的。
3、独立性:一个进程是一个相对完整的资源分配单位。
4、交往性:一个进程在运行过程中可能会与其他进程发生直接或间接的互相作用。
5、异步性:每个进程按照各自独立的、不可预知的速度向前推进。
6、结构性:一个进程由程序、数据和进程控制块三部分构成。
·进程的状态与转换: 三状态运行模式:运行中的进程分为三种状态 1、 运行状态 :是指进程已获得处理器,并且在处理器上执行的状态。 2、 就绪状态 :一个程序已经具备运行条件,但由于没有获得处理器而不能运行所处的状态。 3、 等待状态 :也称阻塞状态和封锁状态,是指进程因等待某种事件发生而暂时不能运行的状态。

五状态运行模式:进程在运行过程中主要是在就绪,运行和阻塞三种状态间进行转换,创建状态和退出状态描述进程创建的过程和进程退出的过程。 1、 运行状态 :进程占用处理器资源。 2、 就绪状态 :进程已获得除处理器外的所有资源,等待分配处理器资源,只要分配处理器就可以执行。 3、 阻塞状态 :由于进程等待I/O操作或进程同步等条件而暂停运行时处于阻塞状态。 4、 创建状态 :进程在创建过程中,还不能运行。 5、 结束状态 :进程已结束运行,回收除进程控制块之外其他资源。

七状态运行模式:七状态进程模型把五状态进程模型的就绪状态和阻塞状态进行了细分,增加了 就绪挂起 和 阻塞挂起 两个状态。 其原因是由于进程优先级的引入,一些低优先级进程可能等待较长时间,从而被对换至外存。 阻塞挂起状态:进程在外存,并等待某事件的出现。 就绪挂起状态:进程在外存,但只要进入内存即可执行。 七状态进程的好处: 1、提高处理器效率:就绪进程表为空时,有空闲内存空间用于提交新进程,可提高处理器效率。 2、可为运行进程提供足够内部,资源紧张时,可把某些进程对换至外存。 3、有利于调试,在调试时,挂起被调试进程,可方便对其地址空间进行读写。
·进程控制块:
为了便于系统控制和描述进程的活动过程,在操作系统核心中定义的一个数据结构——进程控制块(PCB)。
PCB:可分成调度信息和现场信息两类
调度信息:
1、进程名和进程号:标识一个进程,一个进程的进程号必须是唯一的,用以说明进程的存在,并区分各个进程。 2、地址空间信息:系统为每个进程分配了一个地址空间,相关信息记录在里面。 3、优先级:确定了进程本身的优先级别。 4、当前状态:表明是就绪、等待还是正在运行状态。 5、资源清单:列出了该进程运行所需的各种资源。 6、“家族”关系:指明该进程是一个父进程,还是被别的进程所创建的子进程。 7、消息队列指针:指明了进程所属的信息队列所在的地址,消息列队的作用是与其他进程进行通信。 8、进程队列指针:指出进程在队列中的位置。 9、当前打开文件:记录了进程正在使用的文件情况。现场信息: 刻画了进程的运行情况,比如一旦进程发生中断,就必须把中断时刻的上面的所有内容记录到进程控制块的现场信息里面。
PCB组织: 为了便于管理,系统把所有的PCB用适当的方式组织起来,组织方法有三种:线性方式、索引方式和连接方式。
进程的队列:就绪队列、等待队列、运行队列 进程队列可以用进程控制块的链接来形成,常用链接的方式有两种: 单向链接:同一队列中的进程,通过进程控制块中的队列指针联系起来,前一进程的进程控制块中的指针值为下一个进程的进程控制块的地址。 双向链接:设置两个指针,前向指针和后向指针,分别指出它的前一个或后一个进程的进程控制块地址。
·进程控制:是通过控制原语来实现的。
创建原语:创建一个新的进程,前者称为父进程,后者称为子进程。
撤销原语:进程完成任务后,撤销它的PCB,进程就消亡了,以便及时释放它所占用的资源。
阻塞原语:如果进程需要执行I/O操作,则调用阻塞原语,把进程从运行状态转换成阻塞状态。
唤醒原语:一个进程处于等待状态可以转换为就绪状态。
第三节:线程
·线程的基本概念:
线程是进程中的一个实体,是处理器调度和分配的基本单位,也分为就绪、等待和运行三种基本状态。线程自己基本上不拥有系统资源,只拥有少量在运行中必不可少的资源,比如程序计数器、一组寄存器和栈等。但它可与同属一个进程的其他线程共享进程所有的全部资源,在操作系统中引入线程是为了减少程序并发执行时所付出的时间和空间开销,使操作系统具有更好的并发性。
·进程和线程 进程具有两个基本特性: 1、可拥有资源的独立单位 2、是一个可以独立调度和分配的基本单位 创建进程:系统分配所有需要的资源和建立PCB。 撤销进程:回收资源,撤销PCB。 进程切换:需要保留当前进程的处理器环境和设置新选中进程的处理器环境。由于资源和时间的浪费,进程切换频率不宜过高,所以限制了并发程度的进一步提高,因此引入了线程。 线程的属性: 1、每个线程有一个唯一的标识符和一张线程描述表。 2、不同的线程可以执行相同的程序。 3、同一个进程中的各个线程共享该进程的内存地址空间。 4、线程是处理器的独立调度单位,多个线程可以并发执行。 5、一个线程在被创建后便开始了它的生命周期,直至终止。 引入线程的好处: 1、创建和结束新线程花费时间少,创建线程不需要另行分配资源,所以速度比创建进程的速度快且系统开销少。 2、线程之间的切换花费时间少。 3、同一个进程内的线程共享内存和文件,所以线程之间相互通信无需调用内核,故不需要额外的通信机制,使用通信更简便,信息传送速度快。 4、线程能独立执行,能充分利用和发挥处理器与外部设备并行工作能力。 进程和线程比较: 1、调度:线程是调度和分配的基本单位,进程是资源拥有的基本单位。线程能够显著的提高系统的并发程度,在同一个进程中,线程的切换不会引起进程的切换,在不同进程中,由一个进程中的线程切换到另一个进程中的线程时,将会引起进程切换。 2、并发性:进程之间可以并发执行,一个进程中的多个线程之间也可以并发执行。从而更有效的使用系统资源和提高系统的吞吐量。 3、拥有资源:一个进程中的资源可以供他属下所有线程共享。 4、系统开销:创建和撤销进程时,系统都要为进程分配和回收资源,而创建线程用的是它所属的进程所分配的资源不需要单独分配,一定程度是节省了系统开销。
·线程实现机制
1、用户级线程:只存在于用户态中,它的创建、撤销和切换不会通过系统调用来实现,所以这种线程与内核无关。
2、内核级线程:这种线程依赖于内核,它的创建、撤销和切换都由内核实现。在内核中保留了一个线程控制块,系统根据该控制块而感知该线程的存在,并对线程进行控制。
3、混合实现方式:同时实现用户级线程和内核级线程。
4、Pthread线程包:UNIX系统常用的函数调用

Pthread的主要函数调用(上图)
第四节:进程调度
·概述:控制协调进程对处理器的竞争,按照一定的调度算法,使某一就绪进程获得CPU的控制权,转换成运行状态,进程调度的相关内容同样适用于线程调度。
·进程调度的方法:
1、从就绪队列中选出一个进程。
2、把选中进程的进程控制块内有关现场信息,如程序状态字通用寄存器等内容送入处理器相应的寄存器中,从而让它占用处理器运行。
·进程调度时机:
1、正在执行的进程运行完毕。
2、正在执行的进程由于某种错误而终止。
3、时间片用完,进程从运行状态变成就绪状态。
4、正在执行的进程调用阻塞原语将自己阻塞起来,一个进程从运行状态进入阻塞状态。
5、创建了新的进程,有一个新的进程进入就绪队列。
6、正在执行的进程调用了唤醒原语操作,激活了等待资源的进程,等待状态变成就绪状态。
·调度算法设计原则:
1、进程行为:I/O密集型和计算密集型。
2、系统分类:批处理环境、交互式环境、实时系统环境。
3、调度算法的设计目标:资源利用率高、公平、平衡、强执行策略。
1)、批处理目标:平均周转时间短、系统吞吐量高、处理器利用率好。
2)、交互式目标:响应时间快、均衡性。
3)、实时系统目标:开始和截止时间的保证、可预测性强。
·进程调度算法:(主要讲红色为比较重要的算法)
1、先来先去服务算法
2、最短进程优先算法
| 进程 | 运行时间(秒) | 采用算法1周转时间(秒) | 采用算法2周转时间(秒) |
| A | 24 | 24 | 30 |
| B | 3 | 27 | 3 |
| C | 3 | 30 | 6 |
算法1平均周转时间是(24+27+30) / 3=27S
算法2平均周转时间是(30+3+6) / 3=13S
3、最高响应比优先算法:介于先来先服务和最短进程优先算法之间的折中算法。
响应比 = 周转时间 / 预计运行时间 =(等待时间+预计运行时间)/ 预计运行时间
4、最高优先级算法:为每一个进程设立一个优先级,每次将处理器分配给具有最高优先级的就绪进程。
优点:可以保证紧迫性进程优先运行。
5、最短进程优先算法
6、轮转算法
7、多级反馈队列算法
第五节:系统内核
内核是操作系统的核心 ,它本身并不是进程,是系统进程和用户进程赖以活动的基础。为了提高系统的运行效率,保护系统的关键部分不被破坏,把操作系统中提供支持系统运行各种基本操作和基本功能的一组程序模块集中安排,它通过执行原语操作来实现。系统内核提供的功能有中断处理程序、进程同步与互斥、进程调度、控制与通信、存储管理的基本操作及时钟管理。