第6章 用户接口与作业管理 用户与操作系统的接口 批处理系统的作业管理 交互式系统作业管理
6.1 用户与操作系统的接口 1、作业级接口 作业级接口 程序级接口 操作系统通过作业级接口为用户提供对作业运行全过程控制的功能 (1) 联机接口(交互式) (2) 脱机接口
2. 程序级接口 操作系统为用户在程序一级提供有关服务而设置的由一组系统调用命令组成 负责管理和控制运行的程序。 并在这些程序与系统控制的资源和提供的服务之间实现交互作用。 用汇编语言:在程序中直接用系统调用命令,例如,DOS中的软终端INT 21H。 用高级语言:可在编程时使用过程调用语句。
6.2 批处理系统作业处理 1、作业的基本概念 (1)作业 用户在一次计算过程中,或者一次事务处理过程中,要求计算机系统所做工作的总称 (2)作业步 一个作业运行过程可划分成若干阶段,每一个阶段均称为一个作业步。 典型的作业控制过程: “编译”、“连接装配”、“运行”等等。
(3)作业流:多个作业排队进行依次处理的集合。 (4)典型的作业步。 编译 连接装配 运行 目标 程序 段 源程序 输入数据 子程序 库函数 动态库函数 计算结果
2、批处理作业控制语言与作业说明书 (1)作业控制语言 作业说明书---用户用于描述批处理作业处理过程控制意图的一种特殊程序 作业控制语言---书写作业说明书的语言(JCL) (2)作业控制语言的类型 包括:I/O命令、编译命令、操作命令以及条件命令等等。
3、作业控制块(JCB-Job Control Block) (3)作业说明书 表达用户对作业的控制意图内容: 作业的基本描述 作业控制描述 资源要求描述 3、作业控制块(JCB-Job Control Block) 作业控制块是批处理作业存在的标志 保存系统对于作业进行管理所需要的全部信息 位于磁盘区域中
(1)作业控制块的内容 作业控制块中所包含的信息数量及内容因系统而异。 较简单的系统 较复杂的系统 作业控制块的内容如下:
作业控制块JCB 作业标知 用户名称 用户帐号 调度信息 资源需求 作业状态 作业类别 输入井地址 输出井地址 进入系统时间 开始处理时间 作业完成时间 作业退出时间 资源使用情况 作业控制块JCB
(3)作业控制块的建立 当作业开始由输入设备向磁盘的输入井传输时系统输入程序为其建立一个作业控制块并进行初始化。 初始化的大部分信息取自作业说明书。 (4)作业控制块的使用 需要访问作业控制块的程序 系统输入程序 作业调度程序 作业控制程序 系统输出程序等
(5)作业控制块的撤消 作业完成后,其作业控制块由系统输出程序撤消。 作业控制块被撤消后其作业也不复存在。 (6)作业表 每个作业有个作业控制块 所有作业JCB构成一个作业表 作业表存放在外存固定区域中,长度是固定
系统输入程序、作业调度程序、系统输出程序都需要访问作业表因而存在互斥问题 限制了系统所能同时容纳的作业数量 系统输入程序、作业调度程序、系统输出程序都需要访问作业表因而存在互斥问题 JCB1 JCB2 …… JCBi …… JCBn 作业表
4、 批处理作业的状态及转换 一个作业从进入系统到运行结束经历四个不同的状态: “进入” “后备” “运行” “完成”
… 作业和进程的状态转换图 进入状态 退出状态 后备状态 运行状态 输入设备 源程序 输出设备 作业说 明书 输 入 井 出 数据 作业控制进程 … 输入设备 源程序 输出设备 作业说 明书 输 入 井 运行 等待 就绪 出 程 序 作 业 调 度 进程 调度 作业和进程的状态转换图
(1)运行状态的作业 三种状态: 就绪状态 执行状态 等待状态
5、作业的建立 一个作业建立过程的两个子过程: 作业的输入 JCB的建立 作业控制块JCB和作业:一一对应关系 (1)作业的输入 将作业程序、数据和作业说明书从输入设备(例如键盘)输入到外存,并形成初始信息。 典型作业输入方式---SPOOLing系统
(2)JCB的建立 在系统把作业信息输入到输入井之后,根据作业说明书和有关作业信息在外存的位置等建立作业控制块JCB。 JCB包含对作业进行管理所必须的信息。 JCB表的数量是一个常数。 外存输入井的大小有限。 只有在获得JCB表项和足够输入井空间后作业才可能创建成功。
6、批处理作业的调度 调度前工作: 审查系统能否满足用户作业的资源要求 调用相应资源管理程序的有关部分来审核其表中是否能满足作业说明书中的要求即可 作业调度: 按照一定的算法从输入井中的后备作业中选取作业将其投入内存运行。 调度的关键在于选择恰当的算法
(1)调度算法评价 调度实质上是一个策略问题 设定的调度目标往往是相互冲突的调度目标: 单位时间内运行尽可能多的作业 使处理机尽可能保持“忙碌” 使各种I/O设备得以充分利用 对所有的作业都是公平合理的
要设计一个理想的调度算法是一件十分困难的事。 在实际系统中,调度算法往往折衷考虑 设计调度算法时应考虑的因素: 调度算法应与系统设计目标保持一致 注意系统资源均衡使用 保证提交的作业在截止时间内完成 缩短作业平均周转时间 大多数操作系统都采用比较简单的调度算法
(2)调度算法性能的衡量 作业平均周转时间 假定某一作业进入“输入井”的时间为Si 它被选中执行,得到计算结果的时间为Ei 它的周转时间为Ti=Ei–Si 则作业平均周转时间为: T=( )× n为被测定作业流中的作业数
T:衡量不同调度算法对同一个作业流的性能 W:同一调度算法对不同作业流的性能衡量 平均带权周转时间 W=( )× ri 为某作业i的实际执行时间: T:衡量不同调度算法对同一个作业流的性能 W:同一调度算法对不同作业流的性能衡量
(3)系统进行作业调度的决策因素 作业到达时间 预先为作业确定的优先级 系统可测定的其他因素: 作业所需的CPU时间C 存储要求M 打印输出的行数L 其他的资源要求
(4)常见的批处理作业调度算法 先来先服务算法(FCFS:First Come First Serve) 最短作业优先算法(SJF:Shortest Job First) 最高响应比优先算法(HRN:Highest Response Ratio Next) 响应比R = 作业周转时间 / 作业处理时间=(作业处理时间+作业等待时间)/ 作业处理时间= 1 +(作业等待时间 / 作业处理时间)
基于优先数调度算法 (HPF:Highest Priority First) (a)由用户规定优先数(外部优先数) 用户提交作业时,根据急迫程度规定适当的优先数,作业调度程序根据JCB优先数决定进入内存的次序 (b)由系统计算优先数(内部优先数) 例:可按如下公式计算作业的优先数: 优先数 = 用户规定优先数 – 作业处理时间 + 作业等待时间 – 输出量
均衡调度算法(分类排队算法) 基本思想: 根据系统运行情况和作业属性将作业分类 轮流从不同的作业类中挑选作业 目标: 力求均衡地利用各种系统资源,发挥资源使用效率 力求使用户满意
例1:将待处理作业分成如下队列: 队列1:计算量大的作业 队列2:I/O量大的作业 队列3:计算量与I/O量均衡的作业 调度时,在三个队列中各取一些作业 在内存中的作业有的使用处理机,有的使用外部设备 使得系统的各种资源能得到充分利用。 例2:将待处理作业分成如下三个队列: 队列1:长作业
队列2:中等长度作业 队列3:短作业 调度时取队列1一作业,队列2一作业,队列3一作业 长作业用户和短作业用户均比较满意 (5)作业调度算法应用例子1: 假设在单道批处理环境下有四个作业,已知它们进入系统的时间、估计运行时间。 应用先来先服务、最短作业优先和最高响应比优先作业调度算法,分别计算出作业的平均周转时间和带权的平均周转时间。
先来先服务调度算法计算结果
最短作业优先作业算法计算结果
最高响应比优先作业算法计算结果
(6)作业调度算法应用例子2 在两道环境下有四个作业 已知它们进入系统的时间、估计运行时间 系统采用短作业优先作业调度算法,作业被调度运行后不再退出 当一新作业投入运行后,可按照作业运行时间长短调整作业执行的次序 请给出这四个作业的执行时间序列,并计算出平均周转时间及带权平均周转时间
两道批处理系统中 最短作业优先作业算法计算结果
两道批处理系统中 最短作业优先作业算法计算结果 四个作业的执行时间序列为: JOB1:10:00—10:05,10:40—11:05 JOB2:10:05—10:25 JOB3:10:25—10:30 JOB4:10:30—10:40 两道批处理系统中 最短作业优先作业算法计算结果
两道批处理系统中最短作业优先作业算法分析过程 10:00,JOB1进入,只有一作业,JOB1被调入执行。 10:05,JOB2到达,最多允许两作业同时进入,所以JOB2也被调入。 内存中有两作业,哪一个执行?规定当一新作业运行后,可按作业运行时间长短调整执行次序。由于JOB2运行时间(20分)比JOB1少(到10:05,JOB1还需25分钟)所以,JOB2先开始运行,而JOB1必须等待。
10:10,JOB3到达输入井,内存已有两作业,JOB3不能马上进入内存; 10:25,JOB2运行结束退出,内存中剩下JOB1,输入井中有两作业JOB3和JOB4,如何调度? 作业调度算法:最短作业优先,所以,JOB3进入内存,比较JOB1和JOB3运行时间,JOB3运行时间短,故JOB3运行,同样,JOB3退出后,JOB4进入内存, JOB4的运行时间为10,而JOB1剩余时间为25,短作业优先, JOB4先运行,JOB4结束后,JOB1才能继续运行。
(7)多道程序对平均周转时间的影响 作业流在多道环境下运行时: 平均周转时间、带权平均周转时间比单道环境下均有明显改善。 不是任意作业组合都能改善调度性能有时甚至可能变坏。 例:四个各需两小时作业同时投入运行,I/O等待时间均占25%,即占CPU时间各为1.5小时。
根据计算公式,CPU的空转率为0。采用简单轮转法调度,每小时各作业分别占用25%的CPU时间,算得该作业组合的平均周转时间约为6小时,而平均带权周转时间约为3。 但是,若以单道程序方式运行: 平均周转时间T=(2+4+6+8)/4=5小时 平均带权周转时间W=(1+2+3+4)/4=2.5 多道程序比单道程序的平均周转率要差一些。
7、作业调度与进程调度 作业能否占用处理器?什么时间能够占用处理器?由进程调度来决定,进程的初始状态为就绪状态。 进程调度选择当前可占用 CPU处理进程,当它让出处理器时,进程调度就再选另一作业的进程,作业调度与进程调度相互配合,实现作业的并行。
8、批处理作业的控制 当作业为执行态时,作业调度程序为其建立一作业控制进程, 由该进程控制作业运行 作业控制进程:主要负责控制作业的运行,具体解释执行作业说明书的每一个作业步,并创建子进程来完成相应步骤 一个作业步的处理: (1)建立子进程 (2)为其申请资源 (3)访问该作业的JCB (4)释放占有资源 (5)撤消子进程等 作业控制程序只有一个 对应每一处于执行状态的作业有一作业控制进程
9、作业退出 把输出结果送到输出设备上(启动缓输出进程完成) 回收各种资源
10、SPOOLing系统工作原理 全称:Simultaneous Peripheral Operations On-Line 含义: 同时的外围设备联机操作(假脱机技术) 包括: 输入程序模块 输出程序模块 作业调度程序
… 作业和进程的状态转换图 进入状态 退出状态 后备状态 运行状态 输入设备 源程序 输出设备 作业说 明书 输 入 井 出 数据 作业控制进程 … 输入设备 源程序 输出设备 作业说 明书 输 入 井 运行 等待 就绪 出 程 序 作 业 调 度 进程 调度 作业和进程的状态转换图
作业执行前用慢速设备将作业预先输入到后援存储器(如磁盘、磁鼓,称为输入井)中,称为预输入 作业运行后,使用数据时,从输入井中取出 作业执行不必直接启动外设输出数据,只需将这些数据写入输出井中 作业全部运行完毕,再由外设输出全部数据和信息,称为缓输出 实现了对作业输入、组织调度和输出的统一管理 使外设在CPU直接控制下,与CPU并行工作(称为假脱机)
输入装置 通 道 输出装置 通 道 主机系统 输入管 输出管 理模块 理模块 外 设 输入井 输出井 SPOOLing系统
三、 交互式系统的作业管理 1、概述 (1)命令接口 在操作系统与计算机用户之间提供易于理解的双向通信机制。 基本任务: 解释命令,传送命令以便执行 接收系统信息,提交给用户(以响应语言的形式) 包括:一组联机命令,终端处理程序,命令解释程序 交互式命令的接口复杂 含功能结构,可能问题的处理,如各种约定、前端处理、命令日志、命令注解、宏命令及命令组等
2、终端处理程序 用户与操作系统的通信通过一个输入/输出装置来实现 I/O装置是显示终端和键盘 输入通过键盘:在有的系统中,可通过指示装置(例如鼠标)输入,系统输入呈现在显示屏幕上,一次显示若干正文行(某些系统中,提供图形显示功能) 不管哪种I/O方式,终端装置是由终端处理程序管理和控制
终端处理程序提供的输入输出方式对整个用户命令接口有重大影响,也确定了用户与其应用程序之间的通信方式 终端处理程序必须作为用户接口的一个组成部分来考虑,即直接影响命令接口的一些问题须由终端处理程序解决 直接影响命令接口的一些问题 (a)回送显示(Echoing) 通常,每从键盘打入一个字符,终端处理程序回送响应的字符到显示屏上
有时用户要求其显示一个不同的字符或不显示(例如,用户键入口令时) 对于通过远程通信线路访问的终端,可能需要抑制这种回送 委托给远程终端实现回送显示 (b)提前打入(Type ahead) 假定输入字符在一程序准备处理它们之前打入,则由“提前打入进程”把它们保存在缓冲区中 缓冲区容量是有限,当其存满后,再有输入时,或者漏掉,或者将破坏缓冲区原有的内容
(c)字符变换 有些情况下,需要对打入的字符进行代码变换例如把小写字母转换成大写字母,或者反之 (d)行缓冲 打入的字符在送到程序前,由终端接口保存,直到整个命令行打入为止为用户提供了校验、编辑,甚至取消命令的机会 (e)中断字符(Break Characters) 大多数交互式命令接口可以接受一些称为中断字符的特殊字符,并立即采取相应的行动,如,在许多系统中,同时打入CTRL-C键,立即终止当前程序执行,并使命令处理程序重新初始化
3、命令解释程序 对命令有两种处理方法: (a)由命令解释程序直接处理 在没有创建子进程功能的系统中终端命令通常由对应的命令解释程序处理,在这种系统中,只有一个进程对应一个终端用户。 (b)由子进程代为处理 在具有创建子进程功能的系统中,对于较为单纯的命令,如列目录,拷贝文件等,命令解释程序本身便能完成,此时由命令解释程序直接处理。 对较复杂命令,如对于C源程序进行编译,命令解释程序本身不能处理,此时创建一个子进程,并由该子进程运行C编译程序。
4、命令接口 命令接口由命令处理器来实现 命令处理器的实现方式: (a)作为OS的一个部分,例如OS/MVT或VAX/VMS (b)作为OS的一个独特模块,能方便地修改或替换,例如RT-11或CP/M (c)作为一易于被替换的普通程序,例如UNIX操作系统 (d)在某些系统中,可能用专门设计的命令接口替代标准的命令接口,例如多用户UNIX,用户可有不同命令接口。
5、命令语言 命令语言规定由OS执行的一系列操作 在一般的命令语言中,用户通过打入称为命令行的一行指令来规定每一个动作 每一命令行以命令开始,它标识所要执行的操作 大多数命令是用运行一个程序来执行所请求的操作 多数命令行中要给出一些参数, 每一命令语句实际上是带有参数的一个过程调用
一种命令语言通常提供几类命令: (1)系统访问命令 登录命令,如,login等 撤离命令,如,logout等 (2)文件管理命令 (3)编辑、编译和执行命令 (4)询问命令 (5)操作员专用命令 命令行:规定由操作系统执行的一系列操作
命令行:一行可有一个或多个命令,每次一行,包含一个或多个命令。 shell给出提示符时可输入,以回车键提交。如: “ls -a -l”列出当前目录文件列表; "gunzip mp1.tar.gz; tar -xvf mp1.tar; \rm -r -f mp1.tar"为解压缩后再展开。 命令格式:一个命令可有命令参数,格式包括选项/开关 (option/switch)或参数(argument)。 如UNIX系统: cp -r doc /tmp--argv[0], argv[1], ...(含子目录的文件复制:/tmp为目标地址)
命令分类:内部命令和外部命令 内部命令:直接由shell本身完成,功能简单、使用频繁;如:DOS的copy命令。 外部命令:运行相应的可执行文件,在使用时加载。如:DOS的xcopy命令 命令简化:利用参数替换可简化命令输入,通配符(?, *)用于匹配一组文件名 如:UNIX的cp命令:当前目录上有两个"1.tar"和"2.tar"时,"cp *.tar /tmp"等同于"cp 1.tar /tmp; cp 2.tar /tmp"
命令的附加功能 命令的附加功能用以扩大命令的功能性、选择性、适应性。包括: (1)参数与变量 位置变量 关键字变量 (2)命令通配符 (3)重定向 (4)管道与过滤器
6、命令文件 批处理命令: 针对脱机用户操作和大量顺序操作功能而设计 批处理命令可以是专门命令,也可是系统的基本命令;还有有关的语法结构,循环、分支、转移、判别等,构成一套特殊的命令语言 提前写出命令并存入文件,称之为命令文件 命令文件提供了一种把一系列命令组装成文件的方法,然后用文件名作为命令名执行一系列命令
特点: (1)接受参数、变量,宏变量替换 (2)允许嵌套形式调用其他命令文件 (3)允许参数来自终端的命令文件本身 (4)允许执行显示到终端、存入文件或送入打印机 (5)允许命令加入注释 (6)出错时允许用户干预 (7)可把输入传给程序,可有循环、分支、转移等
7、图形用户接口GUI 命令行方式:要求用户记忆命令格式 图形用户接口方式:用户可利用鼠标对屏幕上的图标进行操作,完成与操作系统的交互,从而减少记忆内容,方便用户使用。 图形用户接口的技术基础:高分辩显示器和鼠标 (1)窗口系统(window system)的特点 利用图形元素表示功能:将各种图形元素显示在屏幕上,用户可以通过操纵图形元素(如菜单、图标)来执行相应的功能
同屏多窗口与并发进程相对应:屏幕上同时显示多个窗口;一个进程可以对应一个或多个窗口;窗口动态创建、改变、撤销,交互的并发性好、传递信息量大。 输入方式:鼠标指针点击(或其他定位设备)和键盘输入;通常是即时交互。 一致的图形元素风格可方便用户学习和使用:如按钮、滚动条。 (2)窗口系统的图形元素及其状态
窗口:屏幕上的矩形区域 包括:标题条、边框、窗口角、系统菜单框、最大化/最小化按钮、滚动条等 状态:当前/非当前窗口--接受输入,最大化/最小化/恢复原大小,窗口的前后遮盖-Z轴,焦点处--接受键盘输入(而非鼠标) 桌面和墙纸 图标:一个小图象(如32x32或64x64 pixel),供鼠标指针点击。不同的图标可以标识不同的对象。如可执行程序、最小化的窗口、文件-动画图标
鼠标指针:鼠标指针通常对应屏幕上的光标 光标在屏幕上只有一个,在不同屏幕位置(上下文)可以呈现不同形状,可以独立于鼠标来直接操纵光标 鼠标点击:左键/右键/中键,单击/双击,拖曳/拖放 按钮:鼠标点击或按回车键/空格键时执行相应功能,如 menu button;提供单项或多项选择,如radiobutton和checkbutton;当前按钮及其切换 菜单:临时窗口,菜单条、弹出式菜单、下拉式菜
单(上下文相关菜单) 对话框:临时窗口,显示提示信息(message)或填写用户设置 (3)窗口管理器(window manager):形成统一的使用风格 处理窗口的普遍特性,如:窗口的大小、位置(窗口的标题条、边框、控制菜单框)--窗口中由应用程序管理的部分称为"客户区(client area)" 协调各窗口间的相互关系,如:窗口之间的前
后遮盖关系,桌面 (4)例子:MS Windows 特点 MS Windows结构 基本概念 消息处理:两种方法 特点:是OS 的一部分,提供默认的窗口风格(如菜单、对话框),除Windows2000外,窗口应用程序只能在控制台(本地)执行。
MS Windows结构:可分成三个部分 OS系统服务(KERNEL):内存管理、程序加载(包括DLL)、任务调度、文件管理 用户接口(USER):窗口和消息管理,以及菜单、控制、对话框、定时器等 图形设备接口(GDI, Graphic Device Interface):管理显示器,为USER与应用程序提供与硬件设备独立的接口
基本概念 消息(message):消息作为窗口的输入,如用户操作、其他窗口或系统发出的请求或通知 窗口过程(window procedure):消息由各窗口自己的窗口过程来作处理 窗口过程的调用参数:接收窗口句柄(可以在多个窗口共用一个窗口过程时加以区分)、消息ID(消息的类型)、消息参数(16+32位或32+32位值,整数或指针) 还可以取得消息的发生时间和屏幕坐标
消息处理:两种方法 排队消息:放到进程(线程)的FIFO消息队列里。如应用程序发送的消息,系统的鼠标、键盘、定时器、窗口绘制和退出等。排队消息所用的API: 发送消息到消息队列PostMessage; 从消息队列读取消息GetMessage, PeekMessage; 分发一个消息到相应窗口DispatchMessage; 非排队消息:直接发送到指定窗口的窗口过程。非排队消息所用的API: SendMessage直到接收方窗口过程处理完才返回
接收方正处于GetMessage,而接受并处理SendMessage送来的消息之后,仍处于GetMessage。为防止死锁,一般要:if (InSendMessage()) ReplyMessage(TRUE); 消息循环:不断移出消息,并加以处理。用户不作处理的消息,应传给默认窗口过程加以处理:DefWindowProc() WM_PAINT消息:通知窗口客户区中的某部分(region)已被改变,应用程序应该对其重新绘制。总是被排在线程消息队列的最后,并且多个WM_PAINT消息中的region会自动被合并为一个