V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
crystale
V2EX  ›  程序员

求助,操作系统的进程调度问题

  •  
  •   crystale · 2022-01-16 14:03:30 +08:00 · 1910 次点击
    这是一个创建于 824 天前的主题,其中的信息可能已经有所发展或是发生改变。
    原文是日语,我尝试翻译了下中文。

    现在,操作系统是循环和进程调度将被执行。下面有 A 、B 、C 三个进程,第一个是 A 、B 、C 。它将按顺序处于执行状态。更具体地说,当进程 A 完成执行时,进程 B 如果是 runnable 状态,则下一次进程 B 会进入 run 状态,等进程 B 执行完毕,进程结束。如果进程 C 处于可运行状态,则下一次进程 C 处于运行状态,进程 C 的执行结束。如果进程 A 处于可执行状态,则进程 A 将处于下一个运行状态。

    假设时间片为 40 ms 。定时器中断间隔为 10 ms 因此,如果超过时间片,则无法保证下一个时间片的执行状态。如果在定时器中断的时候还有另一个进程处于可执行状态,就会被切换。另外,进程切换所需的时间可能为 0ms ,定时器中断发生在第一次为 0ms 。

    A:总执行时间 80 毫秒。运行 50 ms 后,只有一个长度为 85 ms 的 I/O 访问。
    B:总执行时间 80 毫秒。运行 20 ms 后,只有一个长度为 45 ms 的 I/O 访问。
    C:总执行时间 70 毫秒。50 ms 操作后,15 ms I/O 访问仅发生一次。

    进程 A 和进程 B 共享一个临界区,执行时间为 20 ms ,进程 A 、B 当执行时间为 50 ms 时,都应进入该临界区。

    在上述情况下,横轴为时间轴,调度数据显示哪个进程处于执行状态。

    我有几个问题:
    io 访问的时间都是都不是 10 的倍数,定时器中断间隔没用完的话会发生什么呢?直接进入下一个程序吗? 另外 B 执行 20ms 后有一个 io 访问,也需要进入临界区,这两者的先后次序是怎样的呢?
    9 条回复    2022-01-16 22:46:33 +08:00
    sujin190
        1
    sujin190  
       2022-01-16 14:12:34 +08:00 via Android
    没懂你在纠结啥,定时器是硬中断,到时间就会切换当前进程到等待调度,io 操作需等待的和临界区信号需等待的都是主动放弃时间进入等待状态,状态达成会重新进去等待调度,之后谁可以运行就看谁在前面谁优先级高了,中间又没有时间间隔
    oyasumi
        2
    oyasumi  
       2022-01-16 14:56:03 +08:00 via Android   ❤️ 1
    日语链接发下
    crystale
        3
    crystale  
    OP
       2022-01-16 14:59:10 +08:00
    @sujin190 谢谢,我没有学过详细的课程,之前不知道 io 和临界区可以主动放弃时间。另外 io 进入的不是 blocked(sleep)状态吗?等到 blocked 结束后才进入等待状态吧?
    crystale
        4
    crystale  
    OP
       2022-01-16 15:04:17 +08:00   ❤️ 1
    sujin190
        5
    sujin190  
       2022-01-16 15:45:42 +08:00
    @crystale #3 这个 blocked 就是进程主动放弃运行状态进入等待的意思啊,cpu 指令执行是无法被阻塞或暂停的,单片机这样的系统会使用空指令死循环来占着时间等待 io 完成,windows 和 Linux 这种有操作系统的自然触发调度器切换进程了,如果没有任何进程可调度,那么此时 cpu 会有 idle 进程来执行死循环占着 cpu 时间,你用任务管理器看就能看到 idle 进程了
    crystale
        6
    crystale  
    OP
       2022-01-16 15:56:31 +08:00
    @sujin190 明白了,谢谢!
    oyasumi
        7
    oyasumi  
       2022-01-16 19:31:36 +08:00
    crystale
        8
    crystale  
    OP
       2022-01-16 22:22:34 +08:00
    @jiangwenwenmodes 谢谢,但是「老师已关闭该学期,无法查看」,似乎要等下半年了
    oyasumi
        9
    oyasumi  
       2022-01-16 22:46:33 +08:00 via Android
    @crystale
    不用 点参加就行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   931 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:15 · PVG 04:15 · LAX 13:15 · JFK 16:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.