linux - schedule() 什么时候返回?

标签 linux linux-kernel kernel scheduling interrupt-handling

在阻塞 IO 的情况下,比方说,驱动程序读取,我们在某些条件下调用 wait_event_interruptible()。当条件满足时,读取将完成。 我查看了 wait_event_interruptible() 函数,它检查条件并调用 schedule()。 schedule() 将寻找下一个可运行的进程并进行上下文切换,其他进程将运行。这是否意味着,当该进程再次被唤醒时,当前进程要执行的下一条指令将在 schedule() 函数内?

  1. 如果是,如果多个进程主动调用schedule,那么所有进程被唤醒后,下一条指令执行一次,会不会在schedule()里面?

  2. 在 ret_from_interrupt 的情况下,调用 schedule()。什么时候回来?因为 iret 在那之后执行。

最佳答案

我认为第一个问题的答案是,因为这是实现上下文切换的一种相当典型的方式。 That's how OS161 works ,例如。

如果从 ISR 调用调度程序,一切都应该相同。调度程序应更改上下文并返回到 ISR,然后 ISR 应使用 IRET 返回。如果调度程序选择切换到不同的进程/线程,它将返回到不同的进程/线程,因此加载其上下文并保存旧的。

关于linux - schedule() 什么时候返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15083898/

相关文章:

linux - 是否可以在宏中包含搜索命令?

linux - linux中的模块编程

linux - 使用 Linux 可加载内核模块拦截系统调用(劫持)

linux - 当抢占被禁用时,Linux 中如何处理 IRQ?

build - 如何构建freebsd内核?

linux - 在 VmWare VM 中为 Linux guest 操作系统实现内核调试模块

Ruby 代码查找特定文件并重命名它,不起作用?

linux + 打印 linux 版本(一个字符如 5 或 6 .. 等)

c - Linux 中的每个线程 CPU 统计信息

c++ - 多线程环境下读取变量总是有效吗?