x86_64下多个内核栈的疑问
时间:2010-10-02
来源:互联网
x86_64的smp下,我发现会有多个内核栈,这里它定义了一个kernel_stack的per cpu变量,这个设计是怎么考虑的呢?为什么只有在x86_64下面需要多个kernel stack呢?那么这些kernel stack之间的同步是如何来做的呢?
我的内核代码是2.6.35.7.
下面的代码是在do_boot_cpu中的:
复制代码
而定义是在common.c中:
复制代码
可以看到这里会多出来一个KERNEL_STACK_OFFSET的东西,这个偏移是什么意思?如何计算出来的呢?
我的内核代码是2.6.35.7.
下面的代码是在do_boot_cpu中的:
- #ifdef CONFIG_X86_32
- /* Stack for startup_32 can be just as for start_secondary onwards */
- irq_ctx_init(cpu);
- #else
- clear_tsk_thread_flag(c_idle.idle, TIF_FORK);
- initial_gs = per_cpu_offset(cpu);
- per_cpu(kernel_stack, cpu) =
- (unsigned long)task_stack_page(c_idle.idle) -
- KERNEL_STACK_OFFSET + THREAD_SIZE;
- #endif
- #ifdef CONFIG_X86_64
- DEFINE_PER_CPU(unsigned long, kernel_stack) =
- (unsigned long)&init_thread_union - KERNEL_STACK_OFFSET + THREAD_SIZE;
- EXPORT_PER_CPU_SYMBOL(kernel_stack);
- ................
作者: simohayha_cu 发布时间: 2010-10-02
每进程都有自己的内核栈 你这里说的好象是初始化的时候
INTEL 3A上MP协议的CPU 分BSP和AP
都会跳到保护模式 猜测这个原因需要内核栈
而Intel486和Pentium只在主处理器执行初试化 其他一律停机
INTEL 3A上MP协议的CPU 分BSP和AP
都会跳到保护模式 猜测这个原因需要内核栈
而Intel486和Pentium只在主处理器执行初试化 其他一律停机
作者: smalloc 发布时间: 2010-10-11
就是,和x86-64有什么关系
作者: snail_314 发布时间: 2010-10-11
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28