第一节:多道程序设计
一、程序的顺序执行
- 顺序程序设计:
- 程序是在一个时间上按严格次序前后相继的操作序列。
- 计算机也是以顺序方式工作的:计算一次执行一条指令、对内存一次访问一个字节或字,对外部设备一次传送一个数据块等。
- 我们把一个具有独立功能的程序独占处理器直到得到最终结果的过程称为程序的顺序执行。
- 程序的顺序执行的特点:
- 顺序性
程序所规定的动作在机器上严格地按顺序执行。 - 封闭性
程序运行后,其计算结果只取决于程序自身,程序执行得到的最终结果由给定的初始条件决定,不受外界因素的影响。 - 程序执行结果的确定性
程序执行的结果与其执行速度无关。 - 程序执行结果的可再现性
如果程序在不同的时间执行,只要初始条件相同,则结果就会相同。
- 顺序性
二、程序的并发执行
- 并发执行,是指两个或两个以上程序在计算机系统中,同时处于已开始执行且尚未结束的状态。
能够参与并发执行的程序称为并发程序。
并发程序的执行和程序顺序执行的特征不同。 - 并发执行的特征如下:
- 在执行期间并发程序相互制约
- 程序与计算不在一一对应
允许多个程序共享一个程序段 - 并发程序的执行结果不可再现
并发程序与其执行的相对速度以及并发执行的多道程序之间的相互关系有关。 - 程序的并行执行和程序的并发执行
程序的并发执行是宏观上的同时,微观是顺序;而并行微观上也是同时的。
三、多道程序设计
-
多道程序设计技术的引入
-
顺序环境下,A,B程序不能同时执行。假设A程序先执行,A,B两个程序全部执行完毕需要80s,其中40s是程序使用CPU,15s使用设备DEV1,25s使用设备DEV2。
-
并发环境下,A、B可以同时执行,当A在CPU上执行时,B可以在设备DEV1上执行,A、B两个程序全部执行完需要45s。
-
-
多道程序设计环境特点
- 多道程序设计:就是允许多个程序同时进入内存并运行。根本目的是提高整个系统的效率。
- 吞吐量:是指单位时间内系统所处理进程(程序)的道数(数量),是衡量系统效率的尺度。
特点如下:
- 独立性
在多道环境下执行的每道程序都是逻辑上独立的,且执行速度与其他程序无关,执行的起止时间也是独立的。 - 随机性
程序和数据的输入与执行开始时间都是随机的。 - 资源共享性
硬件资源被程序共享
-
多道程序设计环境缺陷
- 可能延长程序的执行时间
- 系统效率的提高有一定限度
第二节:进 程
一、进程的定义
- 进程是具有一定独立功能的程序在某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。
- 分为:系统进程和用户进程
1.进程与程序的联系和区别
- 进程和程序的联系
- 程序是构成进程的组成部分之一,一个进程的运行目标是执行它所对应的程序。
- 进程 = 程序 + 数据 + 进程控制块
- 进程和程序的区别
①程序是静态的,进程是动态的。
②二者是多对多的关系。一个进程可以包括若干程序的执行,一个程序也可以产生多个进程。
2.可再入程序
- 一个能够被多个用户同时调用的程序称作是“可再入”程序。
- 可载入程序必须是纯代码的,程序在执行过程中不会修改自身代码,必须与数据区隔离。
- 比如:操作系统、编译程序,它们能同时被不同用户调用而形成不同的进程。
3.进程的特征
①并发性 ②动态性 ③独立性
④交往性 ⑤异步性 ⑥结构性
二、进程的状态与转换
- 在单处理器系统中,任一时刻,处于运行状态的进程最多只有一个,最少为0个;处于就绪状态的进程最多有n-1个,最少为0个:处于等待状态的进程最多有n个,最少有0个。
1.三状态进程模型
①运行状态(Running) ②就绪状态(Ready) ③等待状态(Waiting)(阻塞状态)
2.五状态进程模型
①运行状态 ②就绪状态 ③阻塞状态 ④创建状态 ⑤结束状态
3.七状态进程模型
三、进程控制块
- 为了便于系统控制的描述进程的活动过程,在操作系统核心中定义了一个专门的数据结构,称为PCB。
- PCB的作用:
- 描述基本的情况以及进程的运行变化过程。
- PCB是进程存在的唯一标志,但系统创建一个进程时,为进程设置一个PCB,再利用PCB对进程进行控制和管理。撤销进程时,系统回收PCB,进程也随之消亡。
-
PCB的内容
- 调度信息
- 供进程调度时使用,描述了进程当前所处的状况。包括进程名、进程号、地址空间信息、优先级、当前状态、资源清单、“家族”关系、消息队列指针、进程队列指针和当前打开文件等。
- 现场信息
- 刻画了进程的运行情况,只记录了可能会被其他进程改变的寄存器。主要是CPU寄存器的信息,如程序状态字、时钟、接地址寄存器等。但程序中断时,需要保护现场信息。
- 调度信息
-
进程的组成
- 进程由程序、数据、进程控制块三部分组成
- PCB是“灵魂”;程序和数据是“躯体”。
-
PCB组织
①线性方式 ②索引方式 ③链接方式
-
进程的队列
①就绪队列 ②等待队列 ③运行队列
-
进程队列的组成
- 进程队列实际就是PCB的链接,链接分为:单向链表和双向链表。
- 出队:一个进程从所在的队列退出
- 入队:一个进程排入到指定的队列
- 插队:一个进程插入到某个进程队列的指定位置。
- 进程控制块是系统为程序建立的,用于标志进程,记录各进程执行情况的。进程本身不能访问或者修改自己的进程控制块的内容,但父进程可以访问或修改其子孙进程的进程控制块内容,以便对它的子孙进程进行必要的管理和控制。
- 当进程调度选中一个进程后,把选中进程的进程控制块中有关的现场信息,如通用寄存器、控制寄存器和程序状态字寄存器的内容送入处理器相应的寄存器中,处理器就按该进程的要求工作,达到了进程占用处理器的目的。
四、进程控制
- 进程控制:
对进程整个生命周期中各种状态之间的转换进行的控制,由原语实现。 - 原语:
是由若干条指令组成的,用于完成一定功能的一个过程,是一个不可分割的基本单位,即原语在执行过程中不允许被中断。原子操作在系统态下执行,常驻内存。 - 进控制原语有:创建进程、撤销进程、挂起进程、激活进程、阻塞进程、唤醒进程以及改变进程优先级等。
- 创建原语
- 一个进程可以使用创建原语创建一个新的进程,前者称为父进程,后者称为子进程,子进程又可以创建新的进程,从而形成一个进程家族。
- 主要任务:建立进程控制块PCB。
- 过程:先申请一空闲PCB,然后将有关信息填入,置进程状态为就绪状态,插入就绪队列。
- 撤销原语
- 当一个进程完成任务后,就应当撤销它,以便及时释放它所占用的资源。
- 撤销的实质:撤销进程控制块PCB。
- 过程:找到要被撤销进程的PCB,将它从所在队列中消去,撤销属于该进程的一切“子进程”,释放所占用全部资源,并消去被撤销进程的PCB。
- 阻塞原语
- 若某个进程的执行过程中需要I/O操作,则该进程调用阻塞原语将其从运行状态转换为阻塞状态。
- 过程:产生中断,把处理器的当前状态保存在PCB的现场信息中,当前进程置为等待状态,插入等待队列。
- 唤醒原语
- 一个进程因为等待某事件的发生而处于等待状态,当该事件发生后,就用唤醒原语将其转换为就绪状态。
- 过程:在等待队列中找到该进程,将进程的当前状态置为就绪状态,然后将它从等待队列中撤出并插入到就绪队列中排队,等待调度执行。
- 创建原语
第三节:线程
一、线程的基本概念
-
进程的属性:
- 一个可拥有资源的独立单位
- 可独立调度和分派的基本单位
-
程序并发执行所需付出的时空开销:
- 创建进程的开销
内存空间、I/O设备、PCB - 撤销进程的开销
对其资源作回收 - 进程切换的开销
保留CPU环境,设置新进程CPU环境
这些开销,限制了系统中进程的数目,进程切换也不宜频繁,限制了并发程序的进一步提高。
- 创建进程的开销
-
引入线程的目的:
- 引入进程是为了使多个进程并发执行。
- 引入线程是为了减少程序并发执行时所付出的时空开销。
- 什么是线程
- 在引入线程的操作系统中,线程是进程中的一个实体,是处理器调度和分配的基本单位。
- 线程基本上不拥有系统资源,只拥有少量在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程锁拥有的全部资源。
- 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程可以并发执行。
- 线程的属性
- 每个线程由一个唯一的标识和一张线程描述表。
- 不同的线程可以执行相同的程序。
- 同一个进程中的各个线程共享该进程的内存地址空间。
- 线程是处理器的独立调度单位,多个线程可以并发执行。
- 一个线程具有生命周期,经历等待、就绪、运行等状态变化。
- 引入线程的好处
- 创建一个新线程花费时间少。
- 线程之间的切换花费时间少
- 线程之间通信无需调用内核,不需要额外的通信机制,使通信简单、信息传送速度快。
- 线程能独立执行,能充分利用和发挥处理器与外部设备并行工作能力。
二、进程和线程的比较
- 调度
- 线程作为调度的基本单位,同进程中线程切换不引起进程切换,当不同进程的线程切换时才引起进程切换。
- 并发性
- 一个进程间的多个线程可以并发,不同进程的多个线程也可以并发执行。
- 拥有资源
- 线程仅拥有隶属进程的资源;进程是拥有资源的独立单位。
- 系统开销
- 线程低,进程高。
三、线程实现机制
- 用户级线程
- 仅存在与用户空间,由用户层中的线程库提供对线程的创建、撤销、切换,以及线程之间的同步与通信的支持,而无需内核的支持。
- 内核级线程
- 由OS直接支持,更灵活,方便。
- 混合方式
第四节:进程调度
一、概述
-
调度的主要功能
- 记录系统中所有进程的执行状况;
- 根据一定的调度算法,从就绪队列中选出一个进程,准备把处理器分配给它。
- 分配处理器给进程
-
进程调度的时机
- 正在执行的进程运行完毕
- 正在执行的进程由于某种错误而终止运行
- 时间片用完
- 正在执行的进程调用阻塞原语将自己阻塞起来
- 创建了新的进程
- 正在执行的进程调用了唤醒原语操作激活了等待资源的进程
处理器的调度方式:非抢占式和抢占式
- 可抢占是调度方式:
就绪队列中一旦有优先级高于当前运行进程优先级的进程存在时,便立即进行调度,转让处理器; - 不可抢占式调度:
一旦把处理器分配给一个进程, 它就一直占用处理器,直到该进程自己因调用原语操作或等待I/0而进入阻塞状态,或时间片用完才出让处理器。
二、调度算法设计原则
- 进程行为
- I/O密集型和计算密集型
- 系统分类
- 批处理系统、交互式系统、实时系统
- 调度算法的设计目标
- 共同目标:资源利用率高、公平、平衡、强制执行策略。
- 批处理目标:平均周转时间短、系统吞吐量高、处理机利用略好
- 分时系统目标:响应时间快、均衡性
- 实时系统目标:截至时间的保证、可预测性
- 共同目标:资源利用率高、公平、平衡、强制执行策略。
三、进程调度算法
-
先来先服务算法
- 算法思想:总是把处理机分配给最先进入就绪队列的进程,一个进程一旦分得处理机,便执行下去,知道该进程完成或阻塞时,才释放处理机。
- 优点:实现简单。
- 缺点:没考虑进程的优先级。
-
最短进程优先算法
- 算法思想:该算法从就绪队列中选出“下一个CPU执行期”最短的进程,位置分配处理机。
- 优点:所有进程都同时可运行时算法最优
-
最短剩余时间优先算法
- 算法思想:总是选择剩余时间最短的那个进行运行。当一个新的进程到达时,其整个时间同当前进程的剩余时间做比较,如果新进程时间更少,则当前进程被挂起,运行新进程。
-
最高响应比优先算法
- 算法思想:总是优先调度响应比最大的进程
- 性能:先来先服务和最短进程优先算法的折中
-
轮转算法
- 算法思想:
最早来自于分时系统。
将处理器的处理时间划分成一个个时间片,就绪队列中的各进程轮流运行一个时间片,当时间片结束时,就强迫运行进程让出处理器,该进程进入就绪队列,等待下一次调度。 - 影响时间片设置的因素:
①系统响应时间 ②就绪进程数目 ③计算机的处理能力 - 小结:时间片设的太短,导致过多进程切换;太长,响应时间变长。合理的时间片为20~50ms。
- 算法思想:
-
最高优先级算法
- 算法思想:为每个进程设立一个优先级,每次将处理器分配给具有最高优先级的就绪进程。
- 优点:可以保证紧迫性进程优先运行。
-
多级反馈队列算法
- 结合了先进先出、时间片轮转、可抢占式最高优先级调度算法。
- 算法思想要点:
①被调度队列的设置 ②在同一个队列内的调度原则
③在不同调度队列之间的调度原则 ④进程优先级的调整原则
第五节:系统内核
一、内核的概念
-
内核的概念:为了提高系统的运行效率、保护系统的关键部分不被破坏,一般把操作系统中提供支持系统运行的各种基本操作和基础功能的一组程序模块集中安排,形成一个系统的核心,称为系统核心或者系统内核,简称内核。
-
内核本身不是进程,是系统进程和用户进程赖以活动的基础,一般内核常驻内存,操作系统其他部分则根据需要调进或调出内存。
-
系统内核提供下列功能:
- ①中断处理程序 ②进程同步与互斥 ③进程调度
- ④控制与通信 ⑤存储管理的基本操作 ⑥时钟管理
内核只占整个操作系统代码中的一小部分,是最接近裸机的部分,内核是进程赖以活动的基础,内核的功能通过原语操作来实现。