操作系统CPT104 CPU调度算法合集

调度标准

Max CPU utilization(最大CPU利用率)

keep the CPU as busy as possible
尽可能让CPU保持繁忙

Max Throughput(最大吞吐量)

complete as many processes as possible per unit time
单位时间内完成尽可能多的线程

Fairness(线程公平)

give each process a fair share of CPU

Min Waiting time(最短等待时间)

process should not wait long in the ready queue

Min Response time(最短响应时间)

CPU should respond immediately

几个相关概念

Arrival Time (AT 到达时间)

Time at which the process arrives in the ready queue.
线程进入就绪队列的时间

Completion Time (完成时间)

Time at which process completes its execution.

Burst Time (占用CPU运行时间)

Time required by a process for CPU execution.
线程占用CPU的时间

Turnaround Time (TT 周转时间)

The total amount of time spent by the process from
coming in the ready state for the first time to its completion.
流程从第一次进入就绪状态到完成所花费的总时间
Turnaround time = Exit time - Arrival time.
周转时间=退出时间-到达时间

Waiting Time (WT 等待时间)

The total time spent by the process/thread in the ready
state waiting for CPU.
等待CPU资源的时间
Waiting Time = Turn Around Time – Burst Time
等待时间=周转时间-CPU占用时间

Response time (响应时间)

Time at which the process gets the CPU for the first time.
线程第一次得到CPU资源的时间

基础调度算法

First-Come, First-Served (FCFS 先到先执行)

特点: 遵循先到先执行原则
缺点: 平均等待时间长

Shortest-Job-First (SJF 短任务优先)

特点: 根据最短CPU占用时间调度线程; 占用时间最短的线程优先
优点: 最小化平均等待时间和平均响应时间
缺点: 不切实际, 难以预测CPU占用时间, 需要预测未来; 可能导致长任务饥饿(长时间等待不到CPU资源)

SJF不能在短期CPU调度级别上实现

预测下次CPU占用时间

  1. 使用过去占用平均时间预测
  2. 指数平均: 取过去预测和过去实际占用时间预测
    预测Burst Time
    a通常设为0.5
    如果a=0, 则过去实际占用时间没有影响;
    如果a=1, 那么只有过去实际占用时间影响

Shortest Remaining Time First (SRTF 最短剩余时间优先)

特点:

  1. 如果新进程到达时的突发时间比当前进程的剩余时间短,那么就安排新进程。
  2. 进一步减少平均等待时间和平均响应时间
  3. 背景切换:进程的上下文被保存在进程控制块PCB时,进程被从执行中移除,并计划下一个进程。
  4. 此PCB在此进程的下一次执行时被访问。

Priority Scheduling (优先级调度)

特点:
每个进程都被分配一个优先级。
CPU被优先分配给具有最高优先级的进程(最小整数=最高优先级)。
优先级可能是:

  1. 基于OS内部标准的内部优先级。例:内存需求。
  2. 基于操作系统外部标准的外部优先级。例如:由管理员分配。

缺点: 可能导致线程饥饿——低优先级进程可能永远不会执行

解决方案: 随着时间的推移,进程的优先级增加。例如:每15分钟优先级减一

Round Robin (RR 时间片轮转调度)

特点:
每个进程获得一个小的CPU时间单位(time quantum or time-slice 时间片),通常为10-100毫秒。
在此时间过后,进程被抢占并添加到就绪队列的末尾。
就绪队列被视为循环队列。
如果准备队列中有n个进程,并且时间量是q,那么每个进程将获得1/n的CPU时间,每次最多获得q个单位的时间块。
没有进程等待的时间单位超过(n-1)q。
性能:
q大: RR = FCFS
q小: 对于上下文切换来说,q应该尽可能大的,否则上下文切换开销太高
优点: 最常用的调度策略,所有线程都看似同时运行
缺点: 频繁上下文切换导致额外开销

Multiple-Level Queues Scheduling (多级队列调度)

特点: 就绪队列被划分为单独的队列;

例如,两个队列包含:

  1. 前台进程(交互)。是否有外部定义的优先级高于后台进程
  2. 后台进程(批处理)。

进程与给定队列永久关联; 不能移动到不同的队列

多级队列调度有两种调度方式:

  1. 队列之间的调度。
  2. 在选定队列的进程之间进行调度。

也必须调度队列(不仅仅是进程):

  1. 固定优先调度(即,从前台然后从后台服务): 会有饥饿的可能性。
  2. 时间片: 每个队列获得一定数量的CPU时间,它可以调度它的进程

80%是前台进程(RR),20%是后台进程(FCFS)

进程的不同类别可以是:

  1. Interactive processes 交互进程
  2. Non-interactive processes 非交互进程
  3. CPU-bound processes CPU密集型进程
  4. I/O-bound processes I/O密集型进程
  5. Foreground processes 前台进程
  6. Background processes 后台进程

优先级顺序:system processes > interactive processes > interactive editing processes > batch processes > user processes

Multilevel Feedback Queue Scheduling (多级反馈队列调度)

特点:
根据进程的CPU占用行为,自动将进程放入合适的优先级级别:
I/O密集型进程将在更高优先级的队列上结束
CPU密集型进程将在较低优先级的队列上结束
进程可以在不同的队列之间移动(进程老年化可以通过这种方式实现)

多级反馈队列使用两个基本规则:

  1. 一个新进程被放置在最高优先级队列中。
  2. 如果一个进程没有完成它的时间片,那么它将保持在相同的优先级,否则它将移动到下一个较低的优先级

多级反馈队列调度器需要用以下参数定义:

  1. number of queues
    队列数量
  2. scheduling algorithms for each queue
    每个队列的调度算法
  3. method used to determine when to upgrade a process
    决定何时升级进程的方法
  4. method used to determine when to demote a process
    决定何时降级进程的方法
  5. method used to determine which queue a process will enter when that process needs service
    决定当进程需要服务时将进入哪个队列的方法

例:
我们有三个队列
Q0 – RR with time quantum 8 milliseconds
▪ Highest priority. Preempts(抢占) Q1 and Q2 processes
Q1 – RR time quantum 16 milliseconds
▪ Medium priority. Preempts processes in Q2
Q2 – FCFS
▪ Lowest priority
多级队列反馈调度

  1. 一个新的作业进入队列Q0,该队列先到先执行。当它获得CPU时,job得到8毫秒时间片。如果它没有在8毫秒内完成,则将作业移动到队列Q1。
  2. 在Q1, 任务再次通过RR调度,并分配额外的16毫秒时间片。如果它仍然没有完成,它将被抢占并移动到队列Q2中。

多处理器系统调度

实时系统调度

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据提供的引用内容,我无法确定你具体想要了解什么关于"Cpt VSCode"。但是,我可以为你提供一些关于VSCode的基本介绍和演示。 Visual Studio Code(简称VSCode)是一款由微软开发的免费开源的代码编辑器。它支持多种编程语言,并提供了丰富的功能和插件生态系统,使开发者能够更高效地编写代码。 以下是VSCode的一些常用功能和操作演示: 1. 安装VSCode:前往VSCode官方网站(https://code.visualstudio.com/),根据你的操作系统下载并安装VSCode。 2. 打开文件或文件夹:在VSCode中,你可以通过点击菜单栏的"文件"选项,然后选择"打开文件"或"打开文件夹"来打开你的代码文件或整个项目文件夹。 3. 编辑代码:在VSCode中,你可以直接在编辑器中编写代码。VSCode提供了代码高亮、自动补全、代码片段等功能,以提高编码效率。 4. 调试代码:VSCode内置了强大的调试功能,你可以通过设置断点、观察变量值等方式来调试你的代码。 5. 使用插件:VSCode拥有丰富的插件生态系统,你可以根据自己的需求安装各种插件来扩展VSCode的功能。你可以通过点击菜单栏的"扩展"选项来搜索、安装和管理插件。 6. 版本控制:VSCode集成了Git版本控制工具,你可以在VSCode中进行代码的版本控制操作,如提交代码、查看提交历史等。 希望以上介绍和演示对你有所帮助。如果你有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值