WindowsXP下的裸核APIC异常,AMP模式

随鑫所欲 2014-02-12 05:40:59
我公司最近写了一套系统,采用AMP模式,在一个双核的处理器上,一个核跑WindowsXP,另一个核跑我们的系统(简称裸核程序)。
现在的问题是,当在裸核中注册APIC定时中断后,定时中断可以正常进入,但跑一段时间后就会死机(时间在3个小时以内,一般在2个小时左右,十几分钟的情况也有),死机时整个电脑静止了,没有任何反应,只能通过长按电源键关机。但如果是跑Win7-32,裸核起APIC定时器就没问题。
APIC定时中断的时间间隔是500us,中断函数中,除了置一下EIO,什么也没干。如果不起APIC就没问题。
BIOS启动后先进入的WindowsXP,然后在XP下我写了一个驱动,通过INIT-SIPI-SIPI启动裸核程序,这些都是正常的,没有什么问题。

请各位大神帮忙看看是什么原因。

我尝试过很多实验:
(1)重装XP系统,重装驱动,还是死机;
(2)更换内存,2G和4G内存条,还是死机;
(3)精简了裸核程序,就剩下几项内容:启动APIC、注册中断与陷阱、注册APIC定时中断,还是死机,如果不注册APIC定时中断就不死了;
(4)我注册了APIC的Error中断,中断是好用的(尝试进过),但是APIC定时中断一开就死机;
(5)通用保护异常中断也注册了,所有31号之前的中断都注册了,还是死机,整个系统停止工作。
我怀疑是不是XP下的某些驱动做了什么导致了,但也没法挨个驱动卸载吧!
由于每次都得等2个小时左右,非常痛苦,还请各位大侠看看有没有什么点子。
...全文
200 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
随鑫所欲 2014-03-12
  • 打赏
  • 举报
回复
问题解决了,如果有遇到的可以参考。 原因是Windows某些驱动软件将内存前1M的数据刷新了,导致我存在那里的GDT表被冲,使得CS和DS段选择子失效,最终在三重异常宕机。 解决方案是在进入保护模式后,将GDT表重新装载到高地址受保护的内存中。
随鑫所欲 2014-02-18
  • 打赏
  • 举报
回复
没人会吗? 自己顶一个

1,319

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧