社区
C语言
帖子详情
各位请进,小弟有一个大问题请教。绝对高分送人
zhenzhen88
2003-12-08 09:32:39
算法进程:就绪链按优先数大小从高到低排列,链首进程首先投入,每过一个时间片,运行进程 所需运行时间减一,说明它已运行了一个时间片,优先数也减了(理由是该进程如果在一个时间片完成不了,优先数应降低一级),接着比较现行进程和就绪链的链首进程的优先级,如果现行进程或是相同就让现行进程继续运行,否则,调度就绪链的链首进程投入运行,原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。
...全文
48
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
打赏
举报
回复
能不能将代码写清楚,多谢各位了。这个题我真的不会做了。
myeclipse.10.0_破解补丁
myeclipse.10.0破解、操作简单;按照步骤;
绝对
可激活
【闲谈】我为什么不想回答你的
问题
一方面,我觉得作为
一个
程序员,我最爱抱怨的
问题
除了万恶的配置
问题
,就是这种向人
请教
问题
时遇到的“尴尬”。“如何正确地提问“
绝对
是程序员必备技能,而也是很多人不在乎的
一个
技能。因为这个
问题
,虽然别人没有...
为什么字节跳动天天在高薪招人,但又很难进,真的缺人吗?
昨天和
一个
字节跳动的朋友闲聊,他说根据最近招聘 Java 工程师的经验来看,大部分候选人在工作 3 年的时候基本都会遇上一道难过的坎。为啥这么说呢?因为工作一段时间之后,大部分工程师都已...
快速学会3DMax高级建模人物骨骼蒙皮
网上关于3DMax高级教程骨骼蒙皮的视频教程确实比较多,但是说的较复杂,对于初学者很难在短时间内学会如何对人物...1、骨骼架设:打开3DMax,同时打开
一个
3D人物demo,在命令面板中点击“创建”按钮中的“系统”按钮,
做饭给自己一人吃,如何最快速,且营养有保证?
作为
一个
长期
一个
人的单身狗,这个我非常有经验啊。下面介绍一下我这三四年独居生活总结下来的经验。 1.周末在家多屯点儿菜放冰箱,按照每顿饭一荤一素
一个
汤的组合,大致估摸着买菜。肉类肯定是要一些的,肉买多了...
C语言
70,040
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章