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

2022-01-16 14:03:30 +08:00
 crystale
原文是日语,我尝试翻译了下中文。

现在,操作系统是循环和进程调度将被执行。下面有 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 访问,也需要进入临界区,这两者的先后次序是怎样的呢?
2017 次点击
所在节点    程序员
9 条回复
sujin190
2022-01-16 14:12:34 +08:00
没懂你在纠结啥,定时器是硬中断,到时间就会切换当前进程到等待调度,io 操作需等待的和临界区信号需等待的都是主动放弃时间进入等待状态,状态达成会重新进去等待调度,之后谁可以运行就看谁在前面谁优先级高了,中间又没有时间间隔
oyasumi
2022-01-16 14:56:03 +08:00
日语链接发下
crystale
2022-01-16 14:59:10 +08:00
@sujin190 谢谢,我没有学过详细的课程,之前不知道 io 和临界区可以主动放弃时间。另外 io 进入的不是 blocked(sleep)状态吗?等到 blocked 结束后才进入等待状态吧?
crystale
2022-01-16 15:04:17 +08:00
sujin190
2022-01-16 15:45:42 +08:00
@crystale #3 这个 blocked 就是进程主动放弃运行状态进入等待的意思啊,cpu 指令执行是无法被阻塞或暂停的,单片机这样的系统会使用空指令死循环来占着时间等待 io 完成,windows 和 Linux 这种有操作系统的自然触发调度器切换进程了,如果没有任何进程可调度,那么此时 cpu 会有 idle 进程来执行死循环占着 cpu 时间,你用任务管理器看就能看到 idle 进程了
crystale
2022-01-16 15:56:31 +08:00
@sujin190 明白了,谢谢!
oyasumi
2022-01-16 19:31:36 +08:00
crystale
2022-01-16 22:22:34 +08:00
@jiangwenwenmodes 谢谢,但是「老师已关闭该学期,无法查看」,似乎要等下半年了
oyasumi
2022-01-16 22:46:33 +08:00
@crystale
不用 点参加就行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/828552

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX