Re: 关于lab6的小问题

3 views
Skip to first unread message

Yu Chen

unread,
Apr 14, 2012, 10:09:36 AM4/14/12
to Geraint Yang, os-course, yos-c...@googlegroups.com
hi, Geraint Yang:
很高兴你能思考这么深入。你的考虑是对的。1:2:3:4:5(取整的情况下)是一种基于概率的统计结果。但如果统计的样本足够大(即执行的时间足够长),在绝大部分情况下能够满足1:2:3:4:5的结果(取整的情况下)。
这好比抛硬币,落在正面和反面的比例在足够多抛的次数下,会是1:1 (取整的情况下)。这也是stride算法的一个特点。
所以在我的机器上,目前的测试在90%(10次会>9次)的情况下都会得出1:2:3:4:5的结果。

在 2012年4月14日 下午9:54,Geraint Yang <gerai...@gmail.com> 写道:
> 陈老师,
> 您好,我想咨询一个lab6的问题:
>
> lab6中的练习2中priority.c的测试中,最后是通过对status数组的比例关系是否为1:2:3:4:5来判断正确与否的,那么这样会不会有很大的运气成分在里面?
>
> 我理解的stride算法是按照优先级的比例关系来分配每个process的执行时间比例的,举个极端的例子假设有两个process,一个优先级为1,记为A,另一个为3,记为B,在stride算法中,两个process的执行顺序可以是ABBBABBBABBBABBBABBBABBBABBBA...这样的执行时间的比例接近1:3。
>
> 然而,在B进程运气比较差的时候,比如,刚刚执行了ABBBABBBA的时候测试程序认为应该退出了,结果A执行了3次,B执行了6次,比值为1:2,即使使用priority.c中的计算公式:(status[i]
> * 2 / status[0] + 1) /
> 2,那么i=0时,输出为(3*2/3+1)/2=1,i=1时,输出为(6*2/3+1)/2=2,结果为1:2,同样不正确,但是算法本身应该是没问题的。
>
> 不知道是我对stride理解有误,还是比例的计算的确有问题,还请老师指正!
> 谢谢老师!

--
Best Regards
==============================================
Chen Yu
Ph.D. Associate Professor
System Software&Software Engineering Group,
Laboratory of Pervasive Computing,
Dept. of Computer Science and Technology
Tsinghua University, Beijing 100084, P.R. China
E-Mail: mailto:yuc...@tsinghua.edu.cn chy...@gmail.com
==============================================

Yu Chen

unread,
Apr 14, 2012, 10:45:30 AM4/14/12
to Geraint Yang, os-course, yos-c...@googlegroups.com
由于priority.c是用于判断stride sched实现正确性的一个测试用例,应该不能修改,这样不合规矩。
且通过分析priority.c可知,
Line 28: lab6_set_priority(TOTAL + 1); //父进程的优先级设置为6
Line 33:lab6_set_priority(i + 1); //设置子进程i (-1<i<5)的优先级为 i+1,即从1~5

而每个子进程i执行acc[i]的累加,在执行了MAX_TIME=2000个tick后退出,累计的值会作为子进程返回值返回给父进程
所以只要acc[i]的值足够大(即执行相对较长的时间),优先级为1的进程总要多执行一次其实对最后的换算,得到1:2:3:4:5,应该没有影响。

不过由于你是在调试,且我不知到你的stride
sched的大致实现。如果确实是由于执行时间不够长,那可以调整一下MAX_TIME,把它设置为4000 or 5000,在看看结果如何?

在 2012年4月14日 下午10:32,Geraint Yang <gerai...@gmail.com> 写道:
> 对于像我这样,优先级为1的进程总要多执行一次,导致比例总为1:2:3:3:4的悲催同学,老师有没有什么比较好的建议?
> 谢谢老师!

Yu Chen

unread,
Apr 14, 2012, 10:48:24 AM4/14/12
to Geraint Yang, os-course, yos-c...@googlegroups.com
由于priority.c是用于判断stride sched实现正确性的一个测试用例,应该不能修改,这样不合规矩。
且通过分析priority.c可知,
Line 28: lab6_set_priority(TOTAL + 1); //父进程的优先级设置为6
Line 33:lab6_set_priority(i + 1); //设置子进程i (-1<i<5)的优先级为 i+1,即从1~5

而每个子进程i执行acc[i]的累加,在执行了MAX_TIME=2000个tick后退出,累计的值会作为子进程返回值返回给父进程

所以只要acc[i]的值足够大(即执行相对较长的时间),优先级为1的进程总要多执行一次其实对最后的换算,得到1:2:3:4:5,应该美院

不过由于你是在调试,且我不知到你的stride sched的大致实现。
如果确实是

在 2012年4月14日 下午10:32,Geraint Yang <gerai...@gmail.com> 写道:
> 对于像我这样,优先级为1的进程总要多执行一次,导致比例总为1:2:3:3:4的悲催同学,老师有没有什么比较好的建议?
> 谢谢老师!
>
>
>
> On Sat, Apr 14, 2012 at 10:09 PM, Yu Chen <chy...@gmail.com> wrote:
>>

Yu Chen

unread,
Apr 14, 2012, 10:50:55 AM4/14/12
to Geraint Yang, os-course, yos-c...@googlegroups.com
不是"美院",而是"没用",我想说的是:在执行时间够长的情况下,某子进程多执行几次或少执行几次不影响最后的计算结果。
Reply all
Reply to author
Forward
0 new messages