进程调度算法例题

本文通过具体案例,解析了先来先服务与非抢占式优先数两种进程调度算法的工作原理及效果。展示了不同算法下进程执行顺序的变化及各进程的等待时间,并计算了平均等待时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设有P1、P2、P3、P4共4个进程同时依次进入就绪队列中,它们需要的处理器时间和优先级别如下所示:

进程 使用处理器时间(秒) 优先数
P1           20                         3
P2           30                         5
P3           10                         2
P4            5                          4

 忽略调度所花费的时间,请回答下列问题:   

  (1)写出分别采用“先来先服务”和“非抢占式的优先数”调度算法选中的进程执行的次序。    

   (2)在上述两种算法下,分别算出每个进程在就绪队列的等待时间和平均等待时间。

 解答: (1)用先来先服务的调度算法时,4个进程的调度次序是P1、P2、P3、P4。

 用非抢占式的优先数调度算法时,4个进程的调度次序是P2、P4、P1、P3。

 (2)用先来先服务调度算法,每个进程在就绪队列中的等待时间分别为:

 P1:0秒

 P2:0+20=20秒

 P3:0+20+30=50秒

 P4:0+20+30+10=60秒

平均等待时间为:(0+20+50+60)/4=32.5秒

用非抢占式的优先数调度算法,每个进程在就绪队列中的等待时间分别为;

 P1:30+5=35秒

 P2:0秒

 P3:20+30+5=55秒

 P4:30秒

 平均等待时间为:(35+0+55+30)/4=30秒

1. 实验目的 调度的实质是操作系统按照某种预定的策略来分配资源。进程调度的目的是分配CPU资源。由于进程调度程序执行的频率很高,因此调度算法的好坏直接影响到操作系统的性能。本实验的目的是编程模拟实现几种常用的进程调度算法,通过对几组进程分别使用不同的调度算法,计算进程的平均周转时间平均带权周转时间,比较各种算法的性能优劣。 2. 实验原理 [1]. 进程调度算法描述 进程调度算法包括先来先服务调度算法、最短作业时间优先(抢占式非抢占式)、最高响应比调度算法4种。(每个人必须做FCFS,然后在后面的三种中任选一种,即每个人必须做2调度算法的模拟。) [2]. 衡量算法性能的参数 计算进程的平均周转时间平均带权周转时间3. 实验内容 (1)编程实现本实验的程序,要求: [1]. 建立进程进程控制块,进程控制块至少包括: a) 进程名称; b) 进程需要执行时间; c) 进入就绪队列时间; d) 进程执行开始时间 e) 进程执行结束时间 [2]. 编程实现调度算法。 [3]. 进程及相关信息的输入。这些信息可以直接从键盘上输入,也可以从文件读取。 [4]. 时间片与时间流逝的模拟。本实验需要对算法的执行计时,程序应该提供计算时间的方法。一种最简单的方法是使用键盘,比如每敲一次空格代一个时间片的流逝。另一种方法是使用系统时钟。 [5]. 一组进程序列执行完毕,打印出结果信息。程序需要计算出每个进程的开始执行时间、结束时间、周转时间带权周转时间,并为整个进程序列计算平均周转时间平均带权周转时间。程序将计算结果按一定的格式显示在计算机屏幕上或输出到文件中。打印出进程调度顺序图。 [6]. 实现数据在磁盘文件上的存取功能。 (2)对下列就绪进程序列分别使用上面的几种算法进行调度,计算每种算法下的平均周转时间平均带权周转时间进程到达时间 要求执行时间 0 0 1 1 1 35 2 2 10 3 3 5 4 6 9 5 7 21 6 9 35 7 11 23 8 12 42 9 13 1 10 14 7 11 20 5 12 23 3 13 24 22 14 25 31
### 经典进程调度算法例题及解析 #### 先来先服务(FCFS)调度算法有一个系统中有三个作业,其提交时间运行时间如下所示: | 作业 | 提交时间 (小时) | 运行时间 (小时) | |------|------------------|-----------------| | J1 | 0 | 2 | | J2 | 1 | 3 | | J3 | 2 | 2 | 按照先来先服务的原则,作业的执行顺序为J1, J2, J3。 计算各个作业的完成时间周转时间: - 完成时间:J1=2, J2=5, J3=7 - 周转时间:J1=2-0=2, J2=5-1=4, J3=7-2=5 因此,平均周转时间为(2+4+5)/33.67小时[^1]。 #### 短作业优先(SJF)调度算法 对于上述相同的作业集合,在短作业优先策略下,由于J1最先到达并具有较短的运行时间,所以首先执行J1。接着比较剩余两个作业的运行时间,发现J3更短,则其次执行J3最后再执行J2。 此时新的执行序列变为J1 -> J3 -> J2。 重新计算得到相应的完成时间周转时间分别为: - 完成时间:J1=2, J3=4, J2=7 - 周转时间:J1=2-0=2, J3=4-2=2, J2=7-1=6 于是得出平均周转时间为(2+2+6)/33.33小时。 #### 最近最久未使用(LRU)替换算法 当涉及到内存页面置换时,如果存在多个候选页可以被移除的情况下,会选择那个自上次访问以来已经过去最长一段时间的那个页面作为牺牲品。例如在一个含有四个框架的工作集里,假有以下一系列页面请求流{1,2,3,4,1,2,5},初始状态下工作集中为空。那么根据LRU原则将会依次加载这些页面直到填满整个工作集为止;之后每当遇到新页面而当前已无空闲空间时便依据前述规则淘汰掉最不常用的那一页以便腾出位置给即将进入的新成员[^2]。 ```c++ // C++ 实现 LRU 页面置换算法的一个简单例子 #include <iostream> #include <unordered_map> using namespace std; class LRUCache { public: int cap; list<int> keys; // 存储key列 unordered_map<int,int> map; // key到value映射 LRUCache(int capacity):cap(capacity){} void put(int key, int value){ if(map.find(key)!=map.end()){ keys.remove(key); } else{ if(keys.size()==cap){ int lru_key = keys.front(); keys.pop_front(); map.erase(lru_key); } } keys.push_back(key); map[key]=value; } bool get(int key, int &result){ auto it = map.find(key); if(it==map.end()) return false; keys.remove(key); keys.push_back(key); result = (*it).second; return true; } }; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值