多CPU系统中,各个CPU中的寄存器,始终一致吗?
本帖最后由 _nosay 于 2016-07-12 17:00 编辑hi:em09:一致吗?
这样问好像不对,换一下噢:
各个CPU要从startup_32进入内核,%bx为0的CPU为主CPU,后面经过这里的都属于次CPU了,次CPU的%bx为1,是因为主CPU经过这里之后将%bx置1的原因吗? 不一致, 每个CPU的寄存器都是独立的,不会同步。不然CPU就没有独立工作,干不同的事情了。 回复 2# Tinnal
启动时,有些关于环境初始化的代码,根据bx寄存器判断当前是主cpu在执行,还是次cpu在执行,保证初始化只有主cpu执行,次cpu直接享受成果,那哪块cpu是主,那块cpu是次,是由bios决定,并依次设置它们bx寄存器的吗? 建议你打本书看看, 系统的学一下。看看毛德操的Linux内核情景分析。或http://tldp.org/HOWTO/Linux-i386-Boot-Code-HOWTO/smpboot.html
回复 4# Tinnal
噢,我在看Linux内核情景分析,第十章主要是从startup_32开始介绍,对bootsect.S、setup.S的描述不多。 不管boot protocol是怎么定义的,有一点是可以肯定的,没有任何实体(bios or os)具有修改其它cpu寄存器的能力。
唯一的通讯手段是IPI和共享内存。
所以那个bx,估计是ap根据某个memory flag自己设置的? 回复 6# nswcfd
哦,知道了。
页:
[1]