当前位置: 首页 > news >正文

Intel x86架构之多处理器

全文来自Intel手册:MultiProcessor Specification(http://download.intel.com/design/pentium/datashts/24201606.pdf)
Version 1.4
May 1997
注意:下文中已经指出手册中的对应页面和章节,请对照手册原文看,任何个人理解错误,请包涵。
一,以下内容来自(P25):3.6 Multiprocessor Interrupt Control
在多处理器系统上,中断通过APIC进行控制。下面将描述APIC架构和多处理器系统上的三种不同中断模型。

APIC基于分布式架构,中断控制功能有两个基本的功能组件,分别为本地单元(lapic)和I/O单元(io apic)。本地单元和I/O单元之间通过ICC总线进行通信。I/O单元类似于中断输入器,它通过ICC总线把中断分发到本地单元,而对应的本地单元就接收并处理对应的中断消息。

在多处理器系统上,每一个CPU都需要有一个对应的lapic吗,而根据总共的中断线数,需要一个或多个io apic。
Intel 82489DX APIC是一款离散式APIC的实现,与此相对,还有集中式APIC的实现。不管是老旧的离散式APIC,还是新近的集中式APIC,它们都包含有一个版本寄存器(version register),分别存储以数值0x和1x(其中x表示十六进制数据)。

为了更好的扩展,Intel APIC架构仅规定了APIC单元的编程接口,而ICC总线协议以及电气规格特性却是与具体实现相关联的。这意味着不同版本的APIC实现可以运行相同的二进制软件,但各个不同版本的APIC部件可能具有不同总线协议或电气规格特性的实现。在使用不同版本的APIC时需格外注意。

APIC架构被设计为可伸缩扩展。82489DX APIC有8bit的ID寄存器,可以表示最多255个APIC设备,此外,它的逻辑目标寄存器(Logical Destination register)可支持32bit,可以表示最多32个设备。对于小型系统实现,APIC ID寄存器可以缩减到最少4bit,而逻辑目标寄存器可以缩减到最少8bit。

为了保证所有APIC实现版本的软件兼容性,软件开发者最好遵循如下编程准则:
1,分配8bit的APIC ID号时需从零开始。
2,分配逻辑目标时从32bit寄存器的MSB开始。(MSB,最高有效位,一般是位于二进制数的最左侧,请参考http://en.wikipedia.org/wiki/Most_significant_bit)
3,将APIC的估算虚假向量(spurious vector)设置为xF,其中x为4bit的十六进制数据。

如下特性仅在集中式APIC上可用:
1,io apic中断输入信号极性(input signal polarity)可编程。
2,名为STARTUP IPI的新IPI中断被定义。

一般而言,在集中式APIC的系统上,操作系统必须使用STARTUP IPI来唤醒其它应用处理器(application processors),而在82489DX APIC的系统上,需使用INIT IPI来唤醒其它应用处理器。

二,以下内容来自(P26):3.6.2 Interrupt Modes
多处理器系统的三种不同中断模式:
1,PIC模式(PIC Mode):绕开所有APIC组件,强制系统使用单核模式。
2,虚线模式(Virtual Wire Mode):使用一个APIC作为虚拟线,其它同PIC模式。
3,对称I/O模式(Symmetric I/O Mode):系统启用多个处理器。

前两种模式提供PC/AT兼容,而第三种模式需实现在前面两种模式中任何一种的基础之上。一个多处理器系统以前面两种模式中任何一种启动,然后再切换到第三种模式,从而实现进入到多处理器模式下。

其它:
1,大多数较新的机器支持高级配置和电源接口(ACPI),而ACPI包含有MPS的功能,所以MPS逐步将被ACPI所取代。
2,不管是MPS还是ACPI,都是由BIOS程序根据当前机器硬件写好对应的条目,然后OS启动后读取这些条目进行初始化。

参考:
1,http://en.wikipedia.org/wiki/MultiProcessor_Specification
2,http://en.wikipedia.org/wiki/Advanced_Configuration_and_Power_Interface
3,http://en.wikipedia.org/wiki/Intel_APIC_Architecture
4,http://www.acpi.info/

相关文章:

  • 程序语言相关知识——偏向Eigen矩阵
  • 即时设计:设计流程图,让您的设计稿更具条理和逻辑
  • C#,冒泡排序算法(Bubble Sort)的源代码与数据可视化
  • CoTracker 环境配置与ORB 特征点提取结合实现视频特征点追踪
  • Grouping Increases
  • alibabacloud学习笔记02(小滴课堂)
  • [python]使用pyqt5搭建yolov8 竹签计数一次性筷子计数系统
  • 镜头选型和计算
  • Linux之Ubuntu环境Jenkins部署前端项目
  • 【uniapp】APP打包上架应用商-注意事项
  • 2024年度 ROTS - 实时操作系统 Top 15
  • 【管理篇 / 登录】❀ 06. macOS下使用USB配置线登录 ❀ FortiGate 防火墙
  • 【Nodejs】基于node http模块的博客demo代码实现
  • Go后端开发 -- Go Modules
  • x-cmd pkg | trafilatura - 网络爬虫和搜索引擎优化工具
  • 【译】理解JavaScript:new 关键字
  • Angular 响应式表单之下拉框
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • Go 语言编译器的 //go: 详解
  • JS+CSS实现数字滚动
  • laravel5.5 视图共享数据
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • tweak 支持第三方库
  • Web Storage相关
  • 彻底搞懂浏览器Event-loop
  • 大整数乘法-表格法
  • 代理模式
  • 工程优化暨babel升级小记
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 讲清楚之javascript作用域
  • 精彩代码 vue.js
  • 前端路由实现-history
  • 区块链共识机制优缺点对比都是什么
  • 因为阿里,他们成了“杭漂”
  • RDS-Mysql 物理备份恢复到本地数据库上
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • #大学#套接字
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (3)选择元素——(17)练习(Exercises)
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (四) 虚拟摄像头vivi体验
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)http协议
  • .libPaths()设置包加载目录
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .net 微服务 服务保护 自动重试 Polly
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .net程序集学习心得
  • @Resource和@Autowired的区别
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现