prepare_arch_schedule 的用途是什么?

发布于 2024-08-31 10:55:41 字数 392 浏览 9 评论 0原文

我正在摆弄Linux内核2.4,sched.c中的函数schedule()使用宏prepare_arch_schedule,这看起来很奇怪。那是什么?

这是相关部分

#ifndef prepare_arch_schedule
# define prepare_arch_schedule(prev)    do { } while(0)
# define finish_arch_schedule(prev) do { } while(0)
# define prepare_arch_switch(rq)    do { } while(0)
# define finish_arch_switch(rq)     spin_unlock_irq(&(rq)->lock)
#endif

I'm messing around with Linux kernel 2.4 and function schedule() in sched.c uses the macro prepare_arch_schedule, which looks really strange. What is that?

Here's the relevant section

#ifndef prepare_arch_schedule
# define prepare_arch_schedule(prev)    do { } while(0)
# define finish_arch_schedule(prev) do { } while(0)
# define prepare_arch_switch(rq)    do { } while(0)
# define finish_arch_switch(rq)     spin_unlock_irq(&(rq)->lock)
#endif

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

oО清风挽发oО 2024-09-07 10:55:41

我仍然不明白为什么你认为这是一个无限循环:)。

这是对空语句的“黑客攻击”,它存在的原因是编译器在遇到空语句时会抱怨。

据我了解,上下文切换锁定取决于体系结构,因此,对于尚未定义锁定的体系结构,定义了此空语句,以便您不必为每个体系结构修改 Schedule() 。因此#ifndef...

I still don't understand why you think it's an infinite loop :) .

It's a "hack" for an empty statement and the reason it's there is because the compiler can complain when it hits an empty statement.

From what I understand, context switch locking is architecture dependent and so, for architectures for which the locking hasn't been defined, this empty statement was defined so that you don't have to modify schedule() for each architecture. Hence the #ifndef...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文