发布网友 发布时间:2022-03-28 15:37
共3个回答
懂视网 时间:2022-03-28 19:58
ia32处理器有:代码段即存放指令代码;数据段即存放数据(数据默认存放在数据段,也可放在其他段);堆栈段即堆栈区域。
中央处理器(CPU,英语:Central Processing Unit / Processor),是电子计算机的主要设备之一,电脑中的核心配件。其功能主要是解释计算机指令以及处理计算机软件中的数据。电脑中所有操作都由CPU负责读取指令,对指令译码并执行指令的核心部件。
程序是由指令构成的序列,执行程序就是按指令序列逐条执行指令。一旦把程序装入主存储器中(简称主存),就可以由CPU自动地完成从主存取指令和执行指令的任务。
热心网友 时间:2022-03-28 17:06
先简单描述一下中断和异常相关的基本概念:
中断是一种机制,这种机制使I/O设备能够打断cpu当前正在进行的计算,这种机制使cpu能够同时进行计算和I/O操作。
异常,当cpu在执行指令的时候探测到一个错误条件,就会产生一个异常,比如被零除,访问的数据当前不在内存中等。
不管是中断还是异常,内核是通过中断向量号来识别的,cpu将中断向量号做为中断描述表的索引,相应的表项中包含了
中断处理程序或者异常处理程序的地址。
这里将不讨论I/O设备产生的中断,因为其牵扯的内容多且有点复杂,留作以后分析。
因为异常是cpu内部识别的,所以其对应的中断向量号是固定的,处理期间中断对应的中断向量号也是固定的,将从这些
中断和异常里面摘取几个典型简要分析一下,看看在能处理异常和中断前,freebsd9.2所完成的初始化工作以及
IA32提供的中断处理机制。
[IA32:高级可编程中断控制器(APIC)]-对于APIC,下面简单介绍一下相关概念以及用来发送处理器间中断的寄存器,详细信息
可以参考"Intel 64 and IA-32 ArchitecturesSoftware Developer’s Manual Volume 3A"第十章,将处理器间中断简称为IPI。
在IA32中,APIC分为local APIC和I/O APIC两种:
local APIC,主要用来完成:
1:从cpu的处理器引脚,或者外部中断源,或者外部的I/O APIC接收中断,并将中断发送给处理器核心进行处理。
2:在SMP系统中,local APIC从系统总线上接收其它cpu发送的IPI消息或者将IPI消息通过系统总线发送给其它cpu,IPI消息
也可以用来在系统中的cpu间分发中断。
I/O APIC:主要用来接收I/O设备产生的中断,并且将中断转换为中断消息发送给local APIC,关于I/O 1PIC将不会去深入分析,
知道其作用就行;作为一个实例,大家可以参考82093AA I/O APIC这个中断控制器芯片的详细说明。
local APIC和I/O APIC的关系图如下所示:
local APIC包含了一组寄存器,在local APIC能正确工作之前,要初始化这些寄存器,其中有些寄存器是只读的,在SMP系统的配置
中,这组寄存器被映射到一个大小为4KB的连续物理地址空间中,起始物理地址为FEE00000H,当然也可以通过修改IA32_APIC_BASE MSR
这个寄存器来更改起始物理地址。
下面简单描述一下两个local APIC寄存器:Local APIC ID Register和Interrupt Command Register。
[Local APIC ID Register]:
在加电时,系统硬件会给每个local APIC分配一个唯一的APIC ID,系统硬件基于系统拓扑以及编码插槽位置信息等获取一个APIC ID。
在SMP系统中,BIOS和操作系统使用local APIC ID 作为cpu的id,和前面描述的logical cpu id不同,该寄存器如下图所示。
[Interrupt Command Register]-该寄存器是64bit,主要用来发送IPI,为了发送一个IPI,必须要正确的构造这个寄存器,向低32位
执行一个写操作,将导致一个IPI被发送,寄存器详细格式如下图所示,正确构造这个寄存器就是用正确的值来初始化其中的字段:
只关心下面的字段:
Vector:中断向量号。
Delivery Mode:指定了IPI发送类型,Fixed之外的类型大部分在多处理器启动阶段使用,用来启动AP等。
Delivery Status:指示IPI的发送状态。0:IPI已经成功发送出去;1:还没有完成IPI的发送。
Destination:IPI的目的地,只有当Destination Shorthand字段为00时,才使用,此时该字段的值为目的cpu的local APIC ID。
Destination Shorthand:使用速记符号指定IPI的目的地,编码如下:
00:IPI目的地在Destination字段中指定。
01:IPI的目的地仅包括发送此IPI的cpu。
10:IPI的目的地为系统中全部cpu,包括发送此IPI的cpu。
11:IPI的目的地为系统中除发送此IPI的cpu以外的cpu。
热心网友 时间:2022-03-28 18:24
异常是单个程序的代码,中断是系统的代码,异常是由中断呼叫的