gpt4 book ai didi

assembly - 为什么Linux内核中的自旋锁位于 ".subsection 1"(或 ".text.lock.smth")中?

转载 作者:行者123 更新时间:2023-12-02 20:17:09 26 4
gpt4 key购买 nike

在linux内核中自旋锁的实现,例如 http://lxr.linux.no/#linux+v2.6.18/include/asm-i386/semaphore.h#L97

  97static inline void down(struct semaphore * sem)
98{
99 might_sleep();
100 __asm__ __volatile__(
101 "# atomic down operation\n\t"
102 LOCK_PREFIX "decl %0\n\t" /* --sem->count */
103 "js 2f\n"
104 "1:\n"
105 LOCK_SECTION_START("")
106 "2:\tlea %0,%%eax\n\t"
107 "call __down_failed\n\t"
108 "jmp 1b\n"
109 LOCK_SECTION_END
110 :"+m" (sem->count)
111 :
112 :"memory","ax");
113}

使用LOCK_SECTION_START和LOCK_SECTION_END。它们在http://lxr.linux.no/#linux+v2.6.18/include/linux/spinlock.h#L63中定义。作为

  61#define LOCK_SECTION_NAME ".text.lock."KBUILD_BASENAME
62
63#define LOCK_SECTION_START(extra) \
64 ".subsection 1\n\t" \
65 extra \
66 ".ifndef " LOCK_SECTION_NAME "\n\t" \
67 LOCK_SECTION_NAME ":\n\t" \
68 ".endif\n"
69
70#define LOCK_SECTION_END \
71 ".previous\n\t"

因此,所有锁定操作都部分放入第1小节或.text.lock.SMTH_STRING部分。

这是什么原因?

最佳答案

我不是100%确定,但我认为这与SMP alternatives for i386有关,其中内核可以在启动时甚至运行时在 SMP 和 UP 之间切换。

关于assembly - 为什么Linux内核中的自旋锁位于 ".subsection 1"(或 ".text.lock.smth")中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3512744/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com