yanmulin
V2EX  ›  问与答

实现 OS 调度器时遇到一个问题(Berkerly CS162

  •  
  •   yanmulin · May 10, 2020 · 1469 views
    This topic created in 2202 days ago, the information mentioned may be changed or developed.

    最近在自学 Berkerly CS162 的 OS 课程,第一份作业要求实现一个基于 Multi-level Feedback Queue 的调度器,其中一个测试用例每次运行的结果都不一样。问题是我虚拟机的配置是确定的,计算优先级的时刻(每 4 个 ticks 计算一次)和公式也是确定的,为什么调度出来的结果浮动会那么大呢?

    下面是优先级的计算方法:

    load_avg = (59/60) × load_avg + (1/60) × ready_threads

    recent_cpu = (2 × load_avg)/(2 × load_avg + 1) × recent_cpu + nice

    priority = PRI_MAX − (recent_cpu/4) − (nice × 2)

    这个测试用例创建了 2 条线程,nice 值分别设为 0 和 5 后,忙等一段时间,在忙等循环中统计花费在当前线程的 ticks 数。

    要求 2 条线程的 ticks 数分别为 1904 和 1096,容许的误差在±50,但我用 qemu 中得到的 tick 数每次结果都不一样,浮动范围在 200 左右,根本无法保证通过测试啊!

    作业文档: https://people.eecs.berkeley.edu/~kubitron/courses/cs162-S19/sp19/static/projects/proj1.pdf (3.8 节描述了这个调度器的实现)

    测试用例代码: https://github.com/Berkeley-CS162/group0/blob/master/pintos/src/tests/threads/mlfqs-fair.c (其中的 test_mlfqs_nice_2 函数)

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3204 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 12:10 · PVG 20:10 · LAX 05:10 · JFK 08:10
    ♥ Do have faith in what you're doing.