V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yanmulin
V2EX  ›  问与答

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

  •  
  •   yanmulin · 2020-05-10 09:22:24 +08:00 · 962 次点击
    这是一个创建于 1677 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在自学 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 函数)

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   916 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:58 · PVG 03:58 · LAX 11:58 · JFK 14:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.