由于 TSS 不存储 x86-64 中寄存器的值,所以在上下文切换发生时如何保存这些值?
主页
/
user-514788
Aramya's questions
Aramya
Asked:
2022-03-23 07:58:10 +0800 CST
我正在使用此代码来可视化自旋锁如何防止上下文切换:
pthread_spinlock_t lock;
void pp()
{
pthread_spin_lock(&lock);
char d = 'D';
while(1) write(1, &d, 1);
}
void ppp()
{
char a = 'C';
while(1) write(1, &a, 1);
}
int main()
{
pthread_t thread;
pthread_t tthread;
pthread_spin_init(&lock, PTHREAD_PROCESS_PRIVATE);
pthread_create(&thread, NULL, pp, NULL);
pthread_create(&tthread, NULL, ppp, NULL);
pthread_join(thread, NULL);
pthread_join(tthread,NULL);
}
问题是我希望它永远不会切换到第二个线程,因为我永远不会释放在 pp() 中完成的锁,并输出DDDDDDDDDDDD
......因为根据我的理解,它应该防止上下文切换。但是我得到的输出是这样的:DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC
...
我们该如何解释呢?我对自旋锁的理解不正确吗?
Aramya
Asked:
2022-03-22 05:01:06 +0800 CST
我一开始以为是堆,但它似乎在不同的地方分配内存。radare2 将其标记为以下内容:
0x00007fb07dacd000 - 0x00007fb07dace000 - usr 4K s rw- unk2 unk2
既然不是堆,那我们把mmap
ped内存所在的段叫做什么?