关于多核编程的问题

lyramilk 2010-03-12 11:14:14
DOS下的com程序,怎样操作两个CPU分别去做两件不同的事呢?明白的说下思路,有相关代码的给一些也好。
我知道APIC,不过看不明白。
...全文
151 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
budao3 2010-03-22
  • 打赏
  • 举报
回复
local APIC是每个CPU都会有的;而IO APIC是在南桥。在DOS下有一颗CPU是处于活动的状态,这个cpu可以通过自己的local APIC发一个message给其他的CPU来唤醒它,当cpu接收到这个message之后就会醒过来。线程的调度跟这个是两回事吧,线程的调度是由OS来完成的,就算只有一个cpu还是有多线程;它是将cpu的时间分成多个时间片,每个线程有固定的时间片。
lyramilk 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 budao3 的回复:]

在DOS下面只会有一个cpu(BSP)在运作,其他都是处于睡眠状态;如果你在想要其他的CPU(AP)来做其他事情的话,必须通过BSP的local APIC发message给AP APIC来唤醒它。DOS并不支持多核的情况,不知道这样会不会照成死机。APIC有两个地方有,一个是在CPU中,对于每个CPU都会有一个local APIC负责接收所有的中断(包括CPU内部自身的中断,CPU之间的互相传递……
[/Quote]

localAPIC给CPU的IOAPIC发消息的时候,CPU怎样被唤醒的呢?是进行一个中断响应吗?如果CPU是被这个消息中断的,那么它被中断后是执行线程调度吧?

在多线程工作的时候,是如何切换任务的呢?是所有CPU都去响应时钟中断吗?
大熊猫侯佩 2010-03-12
  • 打赏
  • 举报
回复
从x86硬件底层来说,可以看一下intel的手册的cpu调度部分。
budao3 2010-03-12
  • 打赏
  • 举报
回复
在DOS下面只会有一个cpu(BSP)在运作,其他都是处于睡眠状态;如果你在想要其他的CPU(AP)来做其他事情的话,必须通过BSP的local APIC发message给AP APIC来唤醒它。DOS并不支持多核的情况,不知道这样会不会照成死机。APIC有两个地方有,一个是在CPU中,对于每个CPU都会有一个local APIC负责接收所有的中断(包括CPU内部自身的中断,CPU之间的互相传递的message(IPLs),还有就是外围设备中断),并将中断交给CPU去处理。还有一APIC叫IOAPIC,在南桥内部;负责接收南桥上所有device的传过来的中断,一个有24个接口,不过在DOS下这个是被disable的,DOS用到的是8259A中断接收。现在8259A也是通过local APIC传到CPU去处理。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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