各位晚上好,这里是第五位面壁者。
上一期我们讲了Intel多处理器协议V1.4版本的前三章,主要的篇幅都花在了硬件Spec和中断的部分,在硬件Spec部分,我们蜻蜓点水的稍微提了SMP系统的对称性,BSP和AP,Cache一致性协议,原子操作,lock机制和memory order等概念。在中断部分,我们介绍了Spec规定的三种中断模式以及它们的各自特点,分别是PIC Mode,VirtualWire Mode和对称IO Mode, 以及它们之间是怎么进行切换的。
刚才出现的每一个技术名词在x86体系结构中十分重要,如果通过我上期的视频大家可以在整体框架上能把这些名词串起来,那么我就达到目的的,大家如果想了解细节,可以参考Intel/AMD的手册,以及我后续的相关视频。视频播出后,有读者提出我的语速有些快以及屏幕对手机用户有些小,语速的问题我尽量调整,屏幕的问题我暂时想到的就是把PPT里的图标和文字尽量往大调整,但是今天的这期的PPT是之前就做好的,所以这期还保持之前的样子,我在下一期会注意这个问题。
视频录播完整版请去B站:第五位面壁者Andrew,以下是视频中所使用的PPT与语音文字记录(语音文字记录同视频不完全一致)
这一期呢,我们一起学习一下后面的几章,重点在由BIOS负责创建,传递给OS使用的MP Configuration Table。我们先来看一下他的大体结构,由两部分构成,一个是Floating Pointer Structure,一个MPConfiguration Table,二者是一个链式的结构,BIOS创建好后,OS要先找到Floating Pointer Structure 然后通过的PHYSICALADDRESS POINTER里面的地址再找到MP Configuration Table,下面我们先来看看Floating Pointer Structure 的具体定义以及OS要怎么找到它。
可以看到上面这张是这个结构的示意图,下面是具体每个Field的定义,从低地址到高地址开始,第一个先是signature,可以看到在description里说它是一个searchkey。当BIOS创建完成后,OS想用的时候,就到大家都约定好的地址区域内去暴力搜索这个signature,Spec指定的如右边这三个,基本都是1M一下的某个位置。怎么个暴力搜索法?我们自己写程序也能做到,从0开始一直到1M,挨个比对是否由4个byte的ACSII码和_MP_一直,如果找到