作业的定义

作业是用户在一次解题或一个事务处理过程中要求计算机系统所做工作的集合,它包括用户程序、所需数据和命令等。 作业步是作业中的相对独立加工步骤。

组织并管理一个作业从输入到输出的一个过程称之为作业管理,大致分成: 作业提交 作业调度 作业控制 作业退出

### 作业的分类

批处理作业:操作员把作业分类,由监督程序自动依次处理 交互式作业 :采用交互方式时,不需作业控制说明书,而在作业执行过程中,由用户使用OS提供的命令语言直接提出对作业的控制要求。

作业状态

作业从进入系统到运行结束,一般经历三个阶段:提交、运行、完成 对应于“后备”、“活动”、 “完成” 三种不同的状态。

作业控制过程

  1. 一个批处理控制方式的作业被作业调度选中后,操作系统按照用户作业控制说明书中规定的控制要求去控制作业的执行。
  2. 作业控制进程按作业步的顺序控制作业的执行,直到最后一个作业步完成,整个作业执行结束。
  3. 当作业结束后,系统收回作业所占的资源且撤销该作业
  4. 作业的结果送到输出井中等待输出。

作业调度

高级调度(作业调度、宏观调度) * 其主要任务是按一定的原则对外存上处于后备状态的作业进行选择 * 为被选中的作业分配内存,输入输出设备等必要的资源 * 建立相对应的进程(运行着的作业) * 使该作业的进程获得竞争处理机的权利.

中级调度(内外存交换调度) * 其主要任务是按照给定的原则和策略,将处于外存交换区中的就绪状态或等待状态或内存等待状态的进程交换到外存交换区。 * 交换调度主要涉及到内存管理与扩充。 * 因此,在有些书本中也把它归入内存管理部分。

低级调度(进程调度、微观调度) * 其主要任务是按照某种策略和方法选取一个处于就绪状态的进程占用处理机。 * 在确立了占用处理机之后,系统必须进行进程上下文切换以建立与占用处理机进程相适应的执行环境。

调度准则: * 作业到达时间 * 预先为作业确定的优先级 * 作业所需的CPU时间
* 存储器要求

作业调度算法

  1. 先来先服务
  2. 短作业优先
  3. 响应比最高者优先算法 响应比 = (等待时间+运行时间)/运行时间
  4. 优先级调度 优先级 = 用户初始给定优先级 - 运行时间 + 等待时间 - 输出量

多道批处理程序

在多道批系统中可装入多个作业,这可以大大提高系统资源的利用率。 多道批处理系统采用的调度算法与单道基本相同。

利用吞吐率衡量系统效率 吞吐率 = 作业道数/全部处理时间

程序顺序执行特点

顺序性:顺序执行行过程可看作一系列严格按程序规定的状态转移过程 封闭性:程序执行得到的最终结果由给定的初始条件决定,不受外界因素的影响 可再现性:只要输入的初始条件相同,则无论何时重复执行该程序都会得到相同的结果

程序并发执行特点

运行环境: * 独立性:每道程序都是逻辑上独立的 * 随机性:多道程序环境下,特别是多用户环境下,程序和数据输入与执行开始时间都是随机的 * 资源共享:资源共享将导致对程序执行速度的制约;外设有限将导致设备被共享、内存有限将导致内存被共享;对单CPU系统更如此

程序的并发执行特点: 在宏观上是同时进行的,但在微观上仍是顺序执行的 * 间断性:程序在并发执行时,由于它们共享资源或为完成某一项任务而合作,致使在并发程序之间存在相互制约的关系 * 失去封闭性:程序在并发执行时,是多个程序共享系统中的各种资源,因而这些资源的状态将由多个程序来改变,致使程序的运行失去了封闭性 * 不可再现性:程序在并发执行时,由于失去了封闭性,也导致失去了可再现性

进程的定义和特征

进程是竞争计算机系统资源的基本单位,是一个动态的执行过程 特征: 动态性、并发性、独立性、异步性和结构性

作业和进程的关系

  • 作业是外存中作业等待队列中静态实体。而进程则是完成用户任务的执行实体,是向系统申请分配资源的基本单位
  • 一个作业可由多个进程组成。且必须至少由一个进程组成,但反过来不成立。
  • 作业的概念主要用在批处理系统中,进程的概念则用在几乎所有的多道系统中

进程的状态

进程的状态
进程的状态

进程的控制

进程创建 1. 给新进程分配(产生)一个唯一进程标识号PID,从系统的空闲的PCB结构中摘出一个PCB表 2. 为新进程分配所需的资源:主要分配主存空间(交互性作业由系统统一分配一定的空间) 3. 初始化PCB,包括:进程名、用户名、父进程标识符、进程优先级、处理机状态(就绪)、程序执行地址、栈指针等 4. 将新进程插入就绪队列

进程终止 1. 根据标识号,得到PCB(若为运行则立即终止) 2. 回收该进程的全部资源(包括空间、外设等) 3. 若有子孙进程,则同时终止子孙进程 4. 将PCB移出(暂存系统其它空间),待其它进程搜集信息和进行善后工作(记帐,未完输出等),进入完成状态.

进程阻塞 引起阻塞的事件 * 启动I/O操作(并非直接启动I/O设备,仅表明一个I/O过程,真正启动I/O设备是由系统执行的) * 请求系统资源:如I/O设备无法满足 * 同步约束:一些合作,或协作进程之间由于推进速度存在着差距所引起的 * 服务进程无服务:系统设置一些特定功能服务进程在完成(如发送数据)后,就将自己阻塞起来 过程 1. 将进程执行状态修改为阻塞状态插入到相应阻塞队列中 2. 立即停止当前进程的运行,保护CPU现场到该进程的 PCB 现场保护区 3. 进程调度程序重新选择一个就绪状态的进程投入运行

进程唤醒 进程不能自己唤醒,是由其它相关进程唤醒的 唤醒一个进程有两种方法: * 由系统进程唤醒:系统进程通知等待进程。从而使得该进程因等待事件已发生而进入就绪队列。 * 由事件发生进程唤醒:事件发生进程和被唤醒进程之间是合作关系。

进程挂起 1. 找到需要挂起进程的PCB,从相应队列摘出 2. 将空间归还系统(由存储管理模块负责回收) 3. 将状态修改为静止阻塞/就绪 4. 申请交换区,并将交换区地址记入PCB中 5. 如被挂起的进程为当前进程,则转进程调度

进程激活 系统利用激活原语将指定的进程激活。 激活过程与挂起过程基本是对应相反过程

处理机的执行模式

处理机的执行模式分为两种(从系统安全和保护):

内核模式 用户模式

两种模式的区别:能访问的系统资源、能执行的指令集均有所不同。

处理机在运行期间需要在内核模式和用户模式之间进行切换 用户进程之间的切换一定进行执行模式的切换,反之不一定

进程的同步与制约

并发执行的各个进程之间,既有独立性,又有制约性

使用互斥区的原则: * 空闲让进:当无进程在互斥区时,任何有权使用互斥区的进程可进入 * 忙则等待:不允许两个以上的进程同时进入互斥区 * 有限等待:任何进入互斥区的要求应在有限的时间内得到满足 * 让权等待:处于等待状态的进程应放弃占用CPU,以使其他进程有机会得到CPU的使用权

进程互斥的解决主要有两种: 硬件方法:分为中断禁用、专用机器指令两种 缺点: 不能满足“让权等待”的准则,造成处理机空等(忙等)。 且只能解决互斥,不能用于同步

软件方法: 用编程解决,包括操作系统或程序设计语言中提供某种级别的支持,比如信号量机制和管程机制,但常常忙等待

PV操作

P(s)   /*= wait(s))*/
{
  s.value=s.value--;
  if (s.value < 0)
    block(s.queue)
    /*阻塞一个进程并将其放入阻塞队列中,使其变为阻塞状态*/
}

V(s)  /*=signal(s) */
{
  s.value=s.value++;
  if (s.value <= 0)
    wakeup(s.queue)
     /*唤醒等待队列一个进程,使其变为就绪态 */ 
}

P、V操作必须成对出现(指使用相同信号量) 当为互斥操作时,它们同处于同一进程 当为同步操作时,则不在同一进程中出现

信号量机制缺点: * 易读性差:因为程序员要了解对于一组共享变量及信号量的操作是否正确,则必须通读整个系统或者并发程序 * 不利于修改和维护:因为程序的局部性很差,所以任一组变量或一段代码的修改都可能影响全局 * 正确性难以保证:因为操作系统或并发程序通常很大,要保证这样一个复杂的系统没有逻辑错误是很难的

管程

管程定义了一个数据结构和在该数据结构上能为并发进程所执行的一组操作,这组操作能同步进程和改变管程中的数据

管程的几点说明: * 管程(相当于围墙)把共享变量和对它进行操作的若干过程围起来。 * 管程中的共享变量在管程外部是不可见的,外部只能通过调用管程中所说明的外部过程(函数)来间接地访问管程中的共享变量 * 为了保证管程共享变量的数据完整性,规定管程互斥地进入,由编译程序 实现 * 管程通常是用来管理资源的,因而在管程中应当设有进程等待队列以及相应的等待及唤醒操作

进程通信

高级进程通信机制可分为: 1. 共享存储器系统 2. 消息传递系统 (1) 消息缓冲通信(直接) 当一进程向另一进程发送消息时,便向系统申请一个缓冲区,并把已制备好的消息从发送区复制到该缓冲区,然后把它插入接收进程的消息链中 (2) 信箱方式(间接) 通信时发送进程它的信件投入信箱,接收进程可以在任何时候取走信件而不会丢失 。分为单向和双向 缺点: 占用了宝贵的内存空间; 通信信息在停电或关机后便会丢失(由内存物理特性决定) 发送和接收必须以整个消息或信件为单位,不能存取其中的一部分 3. 管道通信(共享文件) 优点:信息交换量可以很大,发送和接收更加灵活,信息保存期也较长。 缺点:信息的交换涉及到 I/O 操作,同步和控制机构也较为复杂

线程

被调度的最小单位称为线程

线程是进程内一个相对独立的执行流或控制流;是处理机分配的实体(传统用户进程是单线程的)

进程切换系统开销较大,线程较小

益处: 1. 并发执行在线程实体上,即处理机(调度)分配发生在线程之间,改善了系统时空开销 2. 系统创建或终止一个线程的开销要比创建或终止一个进程的开销少得多 3. 线程之间通信效率要高于进程之间的通信效率。进程间通信要内核介入,而同一进程多个线程共享同一地址空间,故线程之间通信无须内核介入

线程分为内核级线程和用户级线程。用户级线程的调度算法只进行线程上下文切换,不涉及处理机的状态。用户级线程的上下文切换与内核无关。 核心级线程由操作系统内核进行管理,线程的控制块TCB放在操作系统空间。线程的状态转换由操作系统完成。操作系统内核既负责进程的调度,也负责进程内不同线程的调度工作。因此,核心级线程不会出现进程处于阻塞或等待状态,而线程处于执行状态的情况。

与用户级线程相比,核心级线程上下文切换时间要大于用户级线程上下文切换时间




注:

  1. 内容仅供参考
  2. 参考教材:《计算机操作系统》(汤小丹)(第四版)
  3. 考试前匆忙整理,比较粗糙,请多担待
  4. 如有错误,请联系我