SylixOS x86中断探测(二)

  • MP Spec简介

    MP Spec即MultiProcessor Specification,简称MPS,中文翻译为多重处理器规范,定义了MP系统配置的数据结构。BIOS构建MP配置数据结构,将硬件以已知格式呈现给标准设备驱动程序或操作系统的硬件抽象层。该规范的总体概念如图 1.1所示。

    图 1.1 总体概念

    MP Spec提供了两种将信息传递给操作系统的方法:一种符合一组常见硬件默认设置的最小配置方法,以及一种在硬件设计中提供最大灵活性的最大方法。图 1.2显示了MP配置数据结构的总体布局。

    图 1.2 MP配置数据结构体

    MP兼容系统必须实现Floating Pointer Structure,该结构是16字节的倍数的可变长度数据结构。目前,只定义了一个16字节的数据结构。要确定系统是否符合MP规范,操作系统必须按照规范定义的顺序搜索Floating Pointer Structure。图 1.3显示了该结构的格式。其中Physical Address Pointer字段表明MP Configuration Table的起始地址。如果MP Configuration Table不存在则全为0。MP Feature Information Byte 1字段指定MP系统的默认配置类型。如果非零,则系统配置符合其中一个默认配置。

    图 1.3 Floating Pointer Structure

    MP Configuration Table Header的格式如图 1.4所示。

    图 1.4 MP Configuration Table Header

    MP Configuration Table Header之后跟着数量不固定的且长度可变的条目。每个条目的第一个字节标识条目类型。每个条目类型具有已知的固定长度。MP Configuration Table的总长度取决于系统的配置。软件必须遍历Base Table中的每个条目,直到达到Entry Count。 条目按照Entry Type升序排序。图 1.5给出了Entry Type的每个值的含义。

    图 1.5 Base MP Configuration Table Entry Types

    配置表包含一个或多个I/O APIC条目,每个I/O APIC条目的格式如图 1.6所示。

    图 1.6 I/O APIC Entry

    I/O Interrupt Assignment Entries条目指示哪个中断源连接到各个I/O APIC中断输入。每个连接的I/O APIC中断输入都有一个条目。图 1.7显示了每个条目的格式。

    图 1.7 I/O Interrupt Entry

    其中中断类型有图 1.8所示几种。

    图 1.8 Interrupt Type Values

  • 参考资料

    《Intel Multiprocessor Specification》

  • 原文地址:http://blog.51cto.com/12557713/2073844

    时间: 2024-10-14 11:18:36

    SylixOS x86中断探测(二)的相关文章

    C++ 哈希表 线性探测 二次探测 哈希桶

    #pragma once #include<iostream>//含一次探测  二次探测 #include<vector> #include<math.h> using namespace std; enum Status { EXIST, EMPTY, DELET, }; template <class K,class V> //key/value形式结构体 struct KV { K _key; V _value; KV(const K& key

    SylixOS 共用中断号机制

    1.原理概述 SylixOS开发人员在编写中断驱动时经常会遇到多个中断源共用一个中断号的情况,但在驱动中为了保证代码独立性,各个外设的中断服务函数应该放在各自的C文件中编写,用统一的中断服务函数是不合理的.为了适应这种情况,SylixOS支持队列类型中断向量,即SylixOS内核将同一中断向量号的多个中断服务函数链接成队列,执行时依次执行. 2.技术实现 2.1应用举例 下面以at91sam9x25处理器为例,该处理器的调试串口,tick时钟等外设共用1号中断向量.如图2-1所示. 图2-1 中

    SylixOS最小系统开发(二)

    系统Tick MPC8313芯片的Tick实现比较特殊,因为在MPC8313芯片中存在名为Decrementer的寄存器,如图 1.1 Decrementer寄存器所示. 图 1.1 Decrementer寄存器 Decrementer寄存器中保存的数据会每4个总线周期减1,当Decrementer寄存器递减到0时,触发Decrementer异常,CPU会执行异常服务程序.Decrementer的异常服务函数需要在startup.S文件中设置,如图 1.2 startup.S所示. 图 1.2

    linux平台学x86汇编(二十):汇编库的使用

    [版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] 汇编语言和C一样,可以通过使用库来简化阻止大量函数的目标文件的问题.GNU C编译器可以不在命令行中独立地包含每个独立地函数目标文件,它允许吧所有目标文件组合在单一存档文件中.在编译C程序时,要做的工作就是包含单一的目标库文件,在编译时,编译器可以从库文件中挑出所需的正确目标文件.在库文件中,经常按照应用程序类型或者函数类型把函数分组在一起,单一应用程序项目可以使用多个库文件

    SylixOS x86平台C++符号表

    1.C++跨平台问题说明在x86平台下编译C++工程过程后,运行编译好的C++共享库时出现符号表__atomic_fetch_sub_4找不到的问题,如图 1.1所示. 图 1.1 符号表缺失 2.问题解决符号表缺失的原因是由于在跨平台编译时要加对应的平台编译选项,在x86平台下要增加-march=i686选项,如图 2.1所示. 图 2.1 增加Makefile编译选项 编译上传后,再运行动态库,发现动态库没有出现符号表未定义的问题,如图 2.2所示. 图 2.2 动态库正常运行截图 原文地址

    STM32串口中断实例二

    int main(void) { uint8_t a=0;//LED高低电压控制 /* System Clocks Configuration */ RCC_Configuration(); //系统时钟设置 /*嵌套向量中断控制器 说明了USART1抢占优先级级别0(最多1位) ,和子优先级级别0(最多7位) */ NVIC_Configuration(); //中断源配置 /*对控制LED指示灯的IO口进行了初始化,将端口配置为推挽上拉输出,口线速度为50Mhz.PA9,PA10端口复用为串

    s3c2440裸机-异常中断(二. und未定义指令异常)

    1._und(未定义指令异常)介绍 我们之前分析过5种异常,那么如何进入未定义指令异常,当然是cpu读取指令发生异常,出现了指令解析异常. 我们先来看下当cpu解析到什么样的指令才会触发未定义指令异常呢? 从上面的arm指令格式中可知,只要指令码属于划线的格式,就属于未定义指令异常. 2.汇编向c函数传参 我们知道汇编给C语言函数传参是通过r0,r1,...通过堆栈的方式去传递的参数,比如r0=1, r1=2;那么在被调用的c函数中argv0就是r0, argv1就是r1...,那么我们如果通过

    linux平台学x86汇编(二):处理器指令码及IA-32平台了解

    [版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] 在计算机操作的最底层,所有计算机处理器都按照制造厂商在处理器内部定义的二进制代码来操作数据,这些代码定义了处理器应该利用程序员提供的数据完成相应的功能,这些预置的代码被称为指令码.不同类型的处理器的指令码是不一样的,但处理指令码的方式是类似的. 当计算机处理器芯片运行时,他会读取存储在内存中的指令码,每个指令码包含不同长度字节的信息,这些信息指示处理器完成特定任务.每条指令码

    Java解决Hash(散列)冲突的四种方法--开放地址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区

    最近时间有点紧,暂时先放参考链接了,待有时间在总结一下: 查了好多,这几篇博客写的真心好,互有优缺点,大家一个一个看就会明白了: 参考 1. 先看这个明白拉链法(链地址法),这个带源码,很好看懂,只不过是只讲了拉链法一种: 2. 再看这个比较全的,四种全讲了,链接,这篇比较形象,有图.但是这两篇都没有仔细介绍优缺点: 3. 最后看优缺点,点击这里: 原文地址:https://www.cnblogs.com/gjmhome/p/11372883.html