<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="http://gentoo-zh.org/extern.php?action=feed&amp;tid=32&amp;type=rss" rel="self" type="application/rss+xml" />
		<title><![CDATA[Gentoo中文社区 / 进程调度]]></title>
		<link>http://www.gentoo-zh.org/viewtopic.php?id=32</link>
		<description><![CDATA[进程调度 最近发表的帖子。]]></description>
		<lastBuildDate>Sat, 06 Aug 2022 09:49:50 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[进程调度]]></title>
			<link>http://www.gentoo-zh.org/viewtopic.php?pid=32#p32</link>
			<description><![CDATA[<p>这里简单介绍下，进程的调度原理，调度类型和常用的进程调度算法。</p><p>&#160; &#160; &#160;说道进程调度，我们或许都有个疑问，为什么需要进程调度呢？进程调度的作用是什么？</p><p>&#160; &#160; &#160;需要进程调度的理由很充分，即充分利用计算机系统中的CPU资源，让计算机能够多快好省的完成各种任务。为此，可在内存中存放数目远大于计算机系统内CPU个数的进程，让这些进程在操作系统的进程调度器下，能够让进程高效（高的吞吐量--throughput）、及时（低延迟--latency）、公平（fairness）地使用CPU。为此调度器可设计不同的调度算法来选择进程，这体现了进程调度的策略，同时还需并进一步通过进程的上下文切换（context switch）来完成进程切换，这体现了进程调度的机制。</p><p>&#160; &#160; 总体上说，我们需要何时调度（调度的时机）、是否能够在内核执行的任意位置进行调度（调度的方式）、如果完成进程切换（上下文切换）、如果选择“合适”的进程执行（调度策略/调度算法）、如果评价选择的合理性（进程调度的指标）。了解上述细节，也就可以说是了解了进程调度。<br />调度的类型（操作系统的三级调度）</p><p>&#160; &#160;1. 作业调度--高级调度</p><p>&#160; &#160; &#160; &#160; 用于决定将外存上处于后备队列中的哪些作业调入内存，处于内存的就绪队列，准备执行。</p><p>&#160; &#160;2. 进程调度--低级调度</p><p>&#160; &#160; &#160; &#160; 决定就绪队列中那个进程将获得处理机</p><p>&#160; &#160;3. 交换调度--中级调度</p><p>&#160; &#160; &#160; &#160; &#160;目的是提高内存的利用率和系统的吞吐量<br />调度的时机</p><p>&#160; &#160; 什么时候会发生进程调度呢，引起进程调度的因素有哪些，这些也就是进程的调度时机。</p><p>&#160; &#160;1. 正在执行的进程执行完毕</p><p>&#160; &#160;2. 执行中的进程因提出I/O请求或发生等事件而暂停执行。</p><p>&#160; &#160;3. 时间片完成</p><p>&#160; &#160;4. 在进程通信或同步过程中执行了某种原语操作，如P操作（wait操作）阻塞</p><p>&#160; &#160;5. 高优先者进入<br />调度的方式</p><p>&#160; &#160; &#160;这里按照是否剥夺的方式分为两种调度方式。</p><p>&#160; &#160; 1. 非剥夺方式（非抢占方式）</p><p>&#160; &#160; &#160; &#160; &#160;一旦占用CPU，直至完成或阻塞</p><p>&#160; &#160; &#160; &#160; 不利用实时任务，不利用短作业；使用于批处理系统&#160; &#160;</p><p>&#160; &#160; 2. 剥夺方式（抢占方式）&#160; &#160; </p><p>&#160; &#160; &#160; &#160; 在一定情况下，可剥夺一进程占有的处理机</p><p>&#160; &#160; &#160; &#160; 抢占的原则有：短作业（进程）优先原则、时间片原则、优先权原则。<br />调度算法</p><p>&#160; &#160; 先来先服务调度算法（FCFS）</p><p>&#160; &#160; &#160; 处于就绪态的进程按先后顺序链入到就绪队列中，而FCFS调度算法按就绪进程进入就绪队列的先后次序选择当前最先进入就绪队列的进程来执行，直到此进程阻塞或结束，才进行下一次的进程选择调度。</p><p>&#160; &#160; &#160;特点：FCFS调度算法利于长作业，不利于短作业。</p><p>&#160; &#160; 短作业优先调度算法（SJF）</p><p>&#160; &#160; &#160; 选择就绪队列中确切（或估计）运行时间最短的进程进入执行。它既可采用可抢占调度方式，也可采用不可抢占调度方式。</p><p>&#160; &#160; &#160; 特点：有效降低作业的平均等待时间和提高系统的吞吐量。</p><p>&#160; &#160; 时间片轮转调度算法（RR）</p><p>&#160; &#160; &#160;RR调度算法定义了一个的时间单元，称为时间片（或时间量）。一个时间片通常在1～100 ms之间。当正在运行的进程用完了时间片后，即使此进程还要运行，操作系统也不让它继续运行，而是从就绪队列依次选择下一个处于就绪态的进程执行，而被剥夺CPU使用的进程返回到就绪队列的末尾，等待再次被调度。</p><p>&#160; &#160; &#160;特点：简单易行、平均响应时间短。此算法不利于处理紧急作业</p><p>&#160; &#160; &#160;注：时间片的大小可调整，如果时间片大到让一个进程足以完成其全部工作，这种算法就退化为FCFS调度算法；若时间片设置得很小，那么处理机在进程之间的进程上下文切换工作过于频繁，使得真正用于运行用户程序的时间减少。时间片可以静态设置好，也可根据系统当前负载状况和运行情况动态调整，时间片大小的动态调整需要考虑就绪态进程个数、进程上下文切换开销、系统吞吐量、系统响应时间等多方面因素。</p><p>&#160; &#160; 高响应比优先调度算法（HRRF）</p><p>&#160; &#160; &#160;HRRF调度算法是介于先来先服务算法与最短进程优先算法之间的一种折中算法。先来先服务算法只考虑进程的等待时间而忽视了进程的执行时间，而最短进程优先调度算法只考虑用户估计的进程的执行时间而忽视了就绪进程的等待时间。为此需要定义响应比Rp: </p><p>&#160; &#160; Rp=（等待时间+预计执行时间）/执行时间=响应时间/执行时间</p><p> Rp较大的进程执行。</p><p>&#160; &#160; &#160;特点：既考虑进程等待时间，又考虑进程的执行时间。 但HRRF调度算法需要每次计算各各个进程的响应比Rp，这会带来较大的时间开销（特别是在就绪进程个数多的情况下）。</p><p>&#160; &#160; 多级反馈队列调度算法（MLFQ）</p><p>&#160; &#160; 多级反馈队列调度算法是一种CPU处理机调度算法，UNIX操作系统采取的便是这种调度算法。设置多个就绪队列，并为各个队列赋予不同的优先级。第一个队列的优先级最高，第二队次之，其余队列优先级依次降低。</p><p>&#160; &#160;多级反馈队列调度算法描述：<br />&#160; 1、进程在进入待调度的队列等待时，首先进入优先级最高的Q1等待。<br />&#160; 2、首先调度优先级高的队列中的进程。若高优先级中队列中已没有调度的进程，则调度次优先级队列中的进程。例如：Q1,Q2,Q3三个队列，只有在Q1中没有进程等待时才去调度Q2，同理，只有Q1,Q2都为空时才会去调度Q3。<br />&#160; 3、对于同一个队列中的各个进程，按照时间片轮转法调度。比如Q1队列的时间片为N，那么Q1中的作业在经历了N个时间片后若还没有完成，则进入Q2队列等待，若Q2的时间片用完后作业还不能完成，一直进入下一级队列，直至完成。<br />&#160; 4、在低优先级的队列中的进程在运行时，又有新到达的作业，那么在运行完这个时间片后，CPU马上分配给新到达的作业（抢占式）。</p><p>&#160; &#160; 最高优先级优先调度算法</p><p>&#160; &#160; &#160; &#160;进程的优先级用于表示进程的重要性及运行的优先性。一个进程的优先级可分为两种：静态优先级和动态优先级。</p><p>&#160; &#160; &#160; 静态优先级是在创建进程时确定的。一旦确定后，在整个进程运行期间不再改变。静态优先级一般由用户依据包括进程的类型、进程所使用的资源、进程的估计运行时间等因素来设置。一般而言，若进程需要的资源越多、估计运行的时间越长，则进程的优先级越低；反之，对于I/O bounded的进程可以把优先级设置得高。</p><p>&#160; &#160; &#160; 动态优先级是指在进程运行过程中，根据进程执行情况的变化来调整优先级。动态优先级一般根据进程占有CPU时间的长短、进程等待CPU时间的长短等因素确定。占有处理机的时间越长，则优先级越低，等待时间越长，优先级越高。那么进程调度器将根据静态优先级和动态优先级的总和现在优先级最高的就绪进程执行。</p>]]></description>
			<author><![CDATA[dummy@example.com (batsom)]]></author>
			<pubDate>Sat, 06 Aug 2022 09:49:50 +0000</pubDate>
			<guid>http://www.gentoo-zh.org/viewtopic.php?pid=32#p32</guid>
		</item>
	</channel>
</rss>
