关于X86体系结构下硬件和多核并行OS的问题,高手请进!
吾为男子 2012-08-29 11:17:47 这个问题有点复杂,怕描述不清楚,请各位前辈耐心看完
在一台4核的机器上,同时运行两个操作系统,一个是Windows,一个是XXX(类Linux操作系统,部分代码来自Linux,部分代码重写),这两个系统分别使用两个核和不同区段的内存,互不干扰,完全并行运行,双方完全对对方透明。
现在要在XXX操作系统上使用APIC中断模式,Local APIC的设置没问题,因为每一个核都自带一个,互不干扰,然而IO APIC的设置则出现问题了,经过这些天的测试和试验,有以下情况和疑问:
1.在Windows和XXX都启动之后,在XXX操作系统中尝试访问基址FEC00000的IO APIC MMIO的寄存器,XXX操作系统则会触发异常,为什么不能访问这段内存呢?(XXX操作系统中建立了这段内存的段描述符和页表的,对于映射到RAM的内存地址,其中定义了一些Windows和XXX共享的区段用于进行通信和交互,Windows和XXX并发的访问,是不存在问题的,而且他们之间也没有任何同步机制,总线仲裁会串行化CPU核的总线请求)
2.在Windows启动之前(启动顺序是先启动XXX操作系统,然后再启动Windows),在XXX的初始化代码中访问IO APIC内存映射的寄存器,可以进行读写,但是读写的内容完全不对,经过实验验证,发现这段内存地址没有被映射到IO APIC的IOREGSEL和IOREGWIN两个寄存器上,按理说IO APIC的MMIO寄存器是硬布线映射的,为什么会出现这种情况?