社区
C语言
帖子详情
各位请进,小弟有一个大问题请教。绝对高分送人
zhenzhen88
2003-12-08 09:32:39
算法进程:就绪链按优先数大小从高到低排列,链首进程首先投入,每过一个时间片,运行进程 所需运行时间减一,说明它已运行了一个时间片,优先数也减了(理由是该进程如果在一个时间片完成不了,优先数应降低一级),接着比较现行进程和就绪链的链首进程的优先级,如果现行进程或是相同就让现行进程继续运行,否则,调度就绪链的链首进程投入运行,原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。
...全文
43
14
打赏
收藏
各位请进,小弟有一个大问题请教。绝对高分送人
算法进程:就绪链按优先数大小从高到低排列,链首进程首先投入,每过一个时间片,运行进程 所需运行时间减一,说明它已运行了一个时间片,优先数也减了(理由是该进程如果在一个时间片完成不了,优先数应降低一级),接着比较现行进程和就绪链的链首进程的优先级,如果现行进程或是相同就让现行进程继续运行,否则,调度就绪链的链首进程投入运行,原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bacp
2003-12-10
打赏
举报
回复
这么难的题
呵呵
2周
晕死了
ZhangYv
2003-12-09
打赏
举报
回复
http://www.csdn.net/develop/read_article.asp?id=20123
ZhangYv
2003-12-09
打赏
举报
回复
优先队列(priority queue)是一个以集合为基础的抽象数据类型,每个元素都有一个优先级,对优先队列执行的操作有1) 查找;2) 插入一个新元素;3) 删除。在最小优先队列(min priority queue)中,查找操作用来搜索优先权最小的元素,删除操作用来删除该元素;对于最大优先队列(max priority queue),查找操作用来搜索优先权最大的元素,删除操作用来删除该元素。优先权队列中的元素可以有相同的优先权,查找与删除操作可根据任意优先权进行。
优先队列的数据结构实现方式有很多种: 无序链表,有序链表,二叉搜索树,左高树,优先级树等等.其中优先级树满足以下两个性质:
1)树中每个结点只存一个元素
2)树中任意一个结点的值高于其儿子结点中存储的元素的值.
特别的,当一棵优先级树为近似满二叉树时,我们称它为堆或偏序树.比如堆排序就是利用这种数据结构(优先队列)来完成的,优先级就是待排数据的值.
以下举5个具体的例子说明优先队列在解决问题中的应用.
(1) 在作业调度算法中常常利用的优先队列数据结构,先举”短作业优先调度”为例子:
一般情况下,我们希望将耗时少的作业尽快完成,也就是说短作业都优先于已经消耗一些时间的作业.使短作业优先而又不让锁死长作业的方法之一就是为每个作业分配一个优先级.分配优先级公式是100 * (Tused(x)-Tinit(x)),Tused()是作业总共消耗的时间,Tinit()是作业到达的时间.100是一个可以根据需要进行调整的数,通常要大等于最大的作业总数.一个作业可以用一个由作业标识符和作业优先级组成的结构体来表示,即:
struct ProcessType{
int id;
int priority;
};
为了给作业安排时间,分时系统中设置了类型为ProcessType的优先队列WAITING. 过程Initial()和Select()对该优先队列做处理.每当一个新作业到达时,过程Initial()就将这个作业插入优先队列WAITING中.当系统有时间段可以使用时,Select()就从中选出一个优先权最高的一个作业,并将该作业从WAITING中删除,由Select()暂存该作业记录,以便完成时间段后带回一个新的优先级重新入队. 这里假设有DeleteMin()函数返回是指向优先级最高的作业的指针,CurrentTime()是用来记时的函数,Execute()是处理作业的过程.下面给出该算法实现的框架.
void Initial(int p) //p是作业号
{
ProcessType process;
process.id = p;
process.priority = -CurrentTime();//记时
Insert(process, WAITING); //对新达到的作业入优先队列
}
void Select()
{
int begintime, endtime;
ProcessType process;
process = (DeleteMin(WAITING))->element;//选中优先级最高的作业并出队
begintime = CurrentTime();
Execute(process.id); //作业调入运行
endtime = CurrentTime();
process.priority += 100 * (endtime-begintime); //重新分配优先级
Insert(process, WAITING);//process带回新的优先级重新入队
}
ks9960
2003-12-09
打赏
举报
回复
算法不完整啊,优先级不可能无限减啊,时间片完了程序就不执行了?…………要是这是一个模拟操作系统进程处理的作业的话,就自己加些条件做简单点,表示意思就行了;不然恐怕要去啃砖头咯!
barryfat
2003-12-09
打赏
举报
回复
这个代码长哦!
我帮你顶一下!
flinymengw4u
2003-12-09
打赏
举报
回复
这么长,帮你顶
glacierrr
2003-12-09
打赏
举报
回复
作业
zhenzhen88
2003-12-09
打赏
举报
回复
各位哥哥姐姐们,能不能写详细一点。
我是没有时间了。
我要交课程设计。有VB,网页。网络啊。
只有2周时间。
绝对给分。
高分相求。
magelfly
2003-12-09
打赏
举报
回复
ZhangYv(英语-痛苦、绝望) 很有深度!
liushuaiboy
2003-12-09
打赏
举报
回复
同意
ilovedonny
2003-12-09
打赏
举报
回复
ZhangYv(英语-痛苦、绝望)的帖子是最实用的了,楼主快给分吧!!
lengfenghongyu
2003-12-08
打赏
举报
回复
哦,好长啊!帮你顶一下吧!
cai114
2003-12-08
打赏
举报
回复
我也不会帮你UP吧
zhenzhen88
2003-12-08
打赏
举报
回复
能不能将代码写清楚,多谢各位了。这个题我真的不会做了。
sci审稿人两个接收
一个
拒稿,大修,好好修改回复,希望蛮大
sci审稿人两个接收
一个
拒稿在这种情况下,编辑通常会考虑两个审稿人的意见,并可能根据拒绝审稿人的意见返回给作者进行修改。作者需要根据审稿人的要求进行修改,并再次提交给期刊进行审稿。如果作者按照审稿人的...
编写程序python输入任意大的自然数、输出各位数字之和_兰理工Python第一次上机作业源码...
1.编写程序,输入任意大的自然数,输出各位数字之和。a=input()sum=0for i in a:sum=sum+int(i)print(sum)运行结果:2.编写程序,输入两个集合setA和setB,分别输出它们的交集、并集和差集setA- etB。setA=set(input...
java 从控制台输入
一个
正整数_编程输出该正整数各位数字之和_C语言 从键盘上输入
一个
正整数,计算并输出该数的各位数字之和...
点击查看C语言 从键盘上输入
一个
正整数,计算并输出该数的各位数字之和具体信息答:思路:定义变量a接受键盘输入和变量sum保存a的各位数字之和,依次对a进行除10操作,并把a除10的余数加到sum中,直到a为0为止,sum...
6个不为人知的高质量APP推荐:知乎3万人点赞,2万人收藏!
一谈到高质量APP想必大部分人都提到:微信,淘宝,今日头条等等,但是今天为大家分享的这6个不为人知的高质量APP推荐,可能大部分人都从来没有听说过,但其功能
绝对
令人咂舌!知乎里面已经有3万多人点赞,2万人收藏了...
从宗教信仰看东西方文化对人的影响
一个
人的道德高低也许不重要,
一个
民族的道德高低就很重要了。
一个
官员的道德高低也许不重要,
一个
执政集团的道德高低就很重要了。好人可能错用坏人,但是坏人
绝对
不会错用好人。从我们对干部进行考核的诸多内容上看...
C语言
70,036
社区成员
243,244
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章