Fix lab6
This commit is contained in:
parent
bd716e0b99
commit
fccd40f1ac
|
@ -42,11 +42,12 @@ stride溢出以后,基于stride的比较可能会出现错误。比如假设
|
|||
|
||||
![image](../lab6_figs/image002.png)
|
||||
|
||||
可以看到由于溢出的出现,进程间stride的理论比较和实际比较结果出现了偏差。我们首先在理论上分析这个问题:令PASS\_MAX为当前所有进程里最大的步进值。则我们可以证明如下结论:对每次Stride调度器的调度步骤中,有其最大的步进值STRIDE\_MAX和最小的步进值STRIDE\_MIN
|
||||
之差:
|
||||
可以看到由于溢出的出现,进程间stride的理论比较和实际比较结果出现了偏差。我们首先在理论上分析这个问题:令PASS\_MAX为当前所有进程里最大的步进值。则我们可以证明如下结论:对每次Stride调度器的调度步骤中,有其最大的步进值STRIDE\_MAX和最小的步进值STRIDE\_MIN之差:
|
||||
|
||||
STRIDE\_MAX – STRIDE\_MIN <= PASS\_MAX
|
||||
提问 1:如何证明该结论? 有了该结论,在加上之前对优先级有Priority \> 1限制,我们有STRIDE\_MAX – STRIDE\_MIN <= BIG\_STRIDE,于是我们只要将BigStride取在某个范围之内,即可保证对于任意两个 Stride 之差都会在机器整数表示的范围之内。而我们可以通过其与0的比较结构,来得到两个
|
||||
Stride的大小关系。在上例中,虽然在直接的数值表示上 98 < 65535,但是 98 - 65535 的结果用带符号的 16位整数表示的结果为99,与理论值之差相等。所以在这个意义下 98 \> 65535。
|
||||
基于这种特殊考虑的比较方法,即便Stride有可能溢出,我们仍能够得到理论上的当前最小Stride,并做出正确的调度决定。
|
||||
|
||||
提问 1:如何证明该结论?
|
||||
|
||||
有了该结论,在加上之前对优先级有Priority \> 1限制,我们有STRIDE\_MAX – STRIDE\_MIN <= BIG\_STRIDE,于是我们只要将BigStride取在某个范围之内,即可保证对于任意两个 Stride 之差都会在机器整数表示的范围之内。而我们可以通过其与0的比较结构,来得到两个Stride的大小关系。在上例中,虽然在直接的数值表示上 98 < 65535,但是 98 - 65535 的结果用带符号的 16位整数表示的结果为99,与理论值之差相等。所以在这个意义下 98 \> 65535。基于这种特殊考虑的比较方法,即便Stride有可能溢出,我们仍能够得到理论上的当前最小Stride,并做出正确的调度决定。
|
||||
|
||||
提问 2:在 ucore 中,目前Stride是采用无符号的32位整数表示。则BigStride应该取多少,才能保证比较的正确性?
|
||||
|
|
Loading…
Reference in New Issue