第四章-处理器调度

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第 4 章
处理器调度
处理器调度的类型
处理器调度的目标是以满足系统目标(如响应时间、 吞吐率、处理器效率)的方式,把进程指定到一个 处理器或多个处理器中执行。 长程调度
决定加入到待执行的进程池中;
中程调度
决定加入到部分或全部在主存中的进程集合中;
短程调度
决定哪一个可用进程将被处理器执行;
@echo off WindowsXP-KB920213-x86-CHS.exe WindowsXP-KB922760-x86-CHS.exe WindowsXP-KB922819-x86-CHS.exe echo windows更新安装完毕!
这样就简单的实现了更新的自动安装,但是只是免去了双击 各个更新包的痛苦,还是要点“我同意”,“确定”等按钮 ,我能心甘么?就想有没有更好的办法让它真正实现自动安 装就好了。于是就想呀想,试呀试。 又半个小时过去了,我把那个bat文件改来改去的,但是好 像进展不大。 思考ing~~~~ 偶然间,在我把一个更新包无意中拖到另一个更新包上的时 候,奇迹出现了。居然弹出了一个帮助对话框。上面清清楚 楚的说明了更新包的各个使用参数。
偶然间想到了for命令,它的功能可强大了。如果能用for对 每个更新包进行判断不就可以自动安装更新了么?于是写了 一个bat文件,主要语句为 for /r %%a in (*.exe) do %%a /quiet /norestart
其中 /r 参数用于遍历整个目录树,in (*.exe) 表示遍历 当前文件夹的所有exe文件。运行时通配符%%a依次用当前文 件夹中的exe文件名代替,这样执行 do %%a /quiet /norestart就是依次运行各个更新包了 。终于大功告成了。 关于for命令的详细解释,有兴趣的朋友请参阅相关的批处 理资料。或者在cmd里也可以查到for命令的信息,打开cmd ,输入for /? ,回车即可。
长Байду номын сангаас调度
长程调度器决定哪一个程序可以进入到系统中被处理,因此, 它可以控制系统并发度。一旦允许进入,一个作业或用户程 序就成为一个进程,并被添加到供短程调度器使用的队列中。 在某些系统中,一个新近创建的进程开始处于被换出状态。 在这种情况下,它被添加到供中程调度器使用的队列中。
在批处理系统中(或是通用操作系统中的批处理部分),新 提交的作业被发送到磁盘,并保存在一个批处理队列中。长 程调度器运行时,从队列中创建相应的进程。这里涉及到两 个决策。
调度器必须决定什么时候操作系统能够接纳一个进程或者 多个进程。 调度器必须决定接受哪个作业或哪些作业,并将其转变成 进程。
批处理文件是无格式的文本文件,它包含一条或多 条命令。它的文件扩展名为 .bat 或 .cmd。 在命令提示下键入批处理文件的名称,或者双击该 批处理文件,系统就会调用Cmd.exe按照该文件中各 个命令出现的顺序来逐个运行它们。
调度算法——FCFS
因此,采用FCFS策略的平均等待时间通常不是最小,且如果 进程CPU区间时间变化很大,平均等待时间也会变化很大。 FCFS的另一个难点是相对于受I/O限制的进程,它更偏向受 处理器限制的进程。
考虑有一组进程,其中有一个进程大多数时候都使用处理器 (受处理器限制) ,还有许多进程大多数时候进行I/O操作 (受I/O限制)。如果一个受处理器限制的进程正在运行,则 所有受I/O限制的进程都必须等待。有一些进程可能在I/O队 列中(阻塞态) ,但是当受处理器限制的进程正在执行时, 它们可能移回就绪队列。这时,大多数或所有I/O设备都可 能是空闲的,即使它们可能还有工作要做。在当前正在运行 的进程离开运行态时,就绪的受I/O限制的进程迅速地通过 运行态,又阻塞在I/O事件上。如果受处理器限制的进程也 被阻塞了,则处理器空闲。因此,FCFS可能导致处理器和 I/O设备都没有得到充分利用。
时钟中断
I/O中断 操作系统调用
信号(如信号量)
调度准则
短程调度的主要目标是优化系统行为的一个或多个方面,它 根据这个目标来分配处理器时间。 通常使用的准则可以按两维来分类: 面向用户的准则——单个用户或进程感知到的系统行为。 例如交互式系统中的响应时间。 面向系统的准则——重点是处理器使用的效果和效率。例 如吞吐量,也就是进程完成的速度。该准则的重点是系统 的性能,而不是提供给用户的服务。吞吐量是系统管理员 所关注的,而不是普通用户所关注的。
进程调度的功能
记录系统中所有进程的执行情况
进程管理模块必须将系统中各进程的执行情况和状态特征记录在各进 程的PCB表中,进程管理模块根据各进程的状态特征和资源需求,将 各进程的PCB表排成相应的队列。进程管理模块通过PCB变化来掌握系 统中所有进程的执行情况和状态特征,并在适当的时机从就绪队列中 选择一个进程占据处理器。
调度算法——FCFS
最简单的CPU 调度算法 是先到先 服务调度 算法( FCFS)。 采用这种 方案,先 请求CPU的 进程先分 配到CPU。
调度算法——FCFS
FCFS策略可以用FIFO队列来容易地实现。当一个进程进入到 就绪队列,其PCB链接到队列的尾部。当CPU空闲时,CPU分 配给位于队列头的进程,接着该运行进程从队列中删除。 FCFS调度的代码编写简单且容易理解。 采用FCFS策略的平均等待时间通常较长。考虑如下一组进程, 它们在时间0时到达,其CPU区间时间长度按ms计:
调度算法——FCFS
如果进程按P1、P2、P3的顺序到达,且按FCFS顺序处理,那 么得到如下结果:
进程P1等待0ms,进程P2等待24ms,进程P3等待27ms。平均 等待时间为(0+24+27)/3 = 17ms。 如果进程按P2、P3、P1的顺序到达,那么结果为:
现在平均等待时间为(6+0+3)/3 = 3ms。
首先想到了批处理,对,想名字就知道了,因为装完系统后 有一大堆更新要装,不想一个一个点击安装的话就只能成批 处理它们了。 闲话少说,切入正题。思路既然有了,于是我就拿了几个更 新包做试验。心想只要在批处理中依次执行这几个更新包不 就行了么! 于是写了一个bat文件--windows更新自动安装.bat。内容 如下:
面向用户的准则在所有系统中都非常重要,而面向系统的原 则在单用户系统中的重要性就低一些。在单用户系统中,只 要系统对用户应用程序的响应时间是可以接受的,则实现处 理器高利用率或高吞吐量可能并不是很重要。
几种重要的调度准则
提供较好的响应时间可能需要调度算法在进程间频繁地切 换,这就增加了系统开销,降低了吞吐量。因此,设计一 个调度策略涉及到在互相竞争的各种要求之间进行折中。
可以用批处理文件来给系统打补丁、批量植入后门 程序等。
用批处理实现windows更新自动安装
http://blog.csdn.net/alxen/article/details/1561950 前两天重装了windows xp系统,装完可把我害惨了。 由于我一直不喜欢用windows的自动更新,因为它下载速度 实在不敢恭维。就一直用360safe扫描漏洞,有补丁就装上 。感觉也很轻松了。那天装完系统用360safe一扫,居然有 60多个漏洞。天哪!还好我上次重装系统时已经下了50多个 补丁了。于是就把剩余的几个也赶快下了下来。 剩下的就是装补丁了,那可是一个一个点呀。而有的更新装 上后还会问你要不要立即重启,一不小心忘记勾上“现在不 重新启动”那就惨了,你就等着再欣赏一次开机画面吧。最 后点得我手都酸了,总算装完了。 鉴于这次安装更新的痛苦,这两天我一直在想windows自动 安装更新时不就说“正在安装更新,你可以继续你的工作” 么?可见windows更新还是支持后台安装的,于是我就准备 研究一番。一定要实现更新自动安装。
选择占有处理机的进程
按照一定的策略,选择一个处于就绪状态的进程,使其获得处理器, 得到执行机会。根据不同的系统设计目的,有多种选择策略,如系统 开销小的静态优先级调度法,适合于分时系统的轮转法、多级反馈轮 转法等。这些选择策略决定了调度算法的性能。
进行进程上下文切换
在做上下文切换时,首先要检查是否可以做上下文切换(例如,如果 系统正在执行某个不允许中断的原语,就不允许上下文切换)。
对于分时系统中的交互程序,用户试图连接到系统的动作可 能产生一个进程创建的请求。分时用户并不是仅仅排队等待, 直到系统接受它们。相反,操作系统将接受所有的授权用户, 直到系统饱和为止。这时,连接请求将会遇到指示系统已经 饱和并要求用户重新尝试的消息。
短程调度
长程调度器执行的频率相对较低,并且仅粗略地决定是否接 受新进程、接受哪一个。 为进行交换决策,中程调度器执行得略微频繁一些。 短程调度器,也称为分派器(dispatcher),执行得最频繁, 并且精确地决定下一次执行哪一个进程。 当可能导致当前进程阻塞或可能抢占剥夺当前正在运行的进 程的事件发生时,调用短程调度器。这类事件包括:
处理器调度的类型
调度和进程状态转换
处理器调度的类型
调度的层次
长程调度
何时创建一个新进程?
创建的进程越多,每个进程可执行的时间百分比就越小。
为了给当前进程集提供满意的服务,长程调度器可能限制 并发度。每当一个作业终止时,调度器可决定增加一个或 多个新作业。 此外,如果处理器的空闲时间片超过了一定的阈值,则会 启动长程调度器。
这下好多了。每次安装一个更新前,先提示安装某某更新。
不过新问题也随之而来,你可能早就猜出来了,呵 呵。就是更新包多的时候,光是写这个批处理文件 你就得不停得Ctrl+C,Ctrl+V的copy来copy去,再 说每次安装新的更新包时,还要新写一个bat文件, 把各个更新包的名字写进去,这样这个bat文件就显 得很笨拙了。 那有没有更好的通用一点的办法呢?
一眼就看到了 /quiet (安静模式)和 /norestart (安装完 成后不要重新启动) 两个参数,呵呵。要的就是它们。 Let's go!!现在把上面的windows更新自动安装.bat 修改一 下,并且加上进度提示:
@echo off echo 安装WindowsXP-KB920213-x86-CHS.exe WindowsXP-KB920213-x86-CHS.exe /quiet /norestart echo 安装WindowsXP-KB922760-x86-CHS.exe WindowsXP-KB922760-x86-CHS.exe /quiet /norestart echo 安装WindowsXP-KB922819-x86-CHS.exe WindowsXP-KB922819-x86-CHS.exe /quiet /norestart echo windows更新安装完毕!
进程调度的时机
引起进程调度的原因:
正在执行的进程执行完毕 执行中进程自己调用阻塞原语进入睡眠等待状态 执行中进程调用了P原语阻塞或V原语唤醒了一个等待进程 执行中进程提出了I/O请求而被阻塞 分时系统中时间片已经用完
执行完系统调用,系统程序返回用户进程时,调度用户进程
就绪队列中某进程的优先级变得高于当前执行进程的优先级 可剥夺方式:就绪队列中一旦有优先级高于当前执行进程优先级存在时, 便立即发生进程调度,转让处理器。 不可剥夺方式:即使在就绪队列中存在有优先级高于当前执行进程时, 当前进程仍继续占有处理器,直到该进程自己因调用原语操作或等待I/O 而进入阻塞、睡眠状态,或时间片用完时才重新发生调度让出处理器。
终于写完了,以后重装系统后只要写一个这样的bat文件, 放在windows更新包所在的文件夹下,执行这个bat文件就可 以了。 这下再也不用一个一个点击更新包安装了,你只要下载更新 包,其它的都交给 “windows更新自动安装.bat” 吧。有 了它,你会发现原来生活可以更美的。
长程调度
相关文档
最新文档