计算机系统和中断的概念

晨曦之光 发布于 2012/04/10 14:58
阅读 609
收藏 0

概念:
cpu:特指处理器核心,而不是处理器封装,因为很多处理器将桥芯片和内存控制器芯片都封装在一起,造成一种误解,实际上处理器核心并不包含这些内容。
外设:带有处理逻辑的集成电路核心。

一、CPU和外设芯片

1、功能对等性和地位的不平等
外设芯片也可以处理数据,因此和cpu在功能上是对等的,GPU概念的提出加深了我们对这种对等性的理解。cpu是相对比较通用的芯片,而外设呢是功能比较专一的芯片。有时候,外设在某方面的处理能力要远远高于cpu。
冯.诺依曼机器是以处理器即CPU为中心的,因此在编程层面上cpu和外设是不平等的。由于历史原因,在那个年代,计算机主要用于科学计算,cpu足以胜任全部任务,因此外设几乎是不存在的,加上设计的简单性,软件指令统一由cpu发出和执行,因此软件意义上的不平等是历史原因和设计原因造成的。
2、通信机制
不管怎样,外设连接于系统上,cpu和外设必然需要相互通信。由于编程的不平等性,一般意义上所有指令由cpu发出,cpu可以主动读写或者操作外设,而外设却很难直接操作cpu,因此提出中断的概念。外设通过硬件逻辑,而不是软件逻辑(软件逻辑一般全部由cpu负责)来通知cpu有事情要做,cpu必然需要一种机制被动得到这种通知,这就是中断。
二、主板架构
1、以cpu为中心
由于历史原因和设计原因,主板都是以cpu为中心的,然后通过硬件连线逻辑连接各种外设。最简单的连接方式就是外设们和cpu连接在一条共享的线路上(由于它们的平等性)。
2、以各种桥连接各种总线
然而外设们的速率和通信协议彼此并不一定相同,和cpu之间的协议也有所不同,那么必然需要一种设备来进行协议转换和数据缓冲,以适配速率不同,协议不同的各种外设之间以及外设和cpu之间的通信。因此提出总线的概念,连接在一种总线上的所有设备的速率和底层通信协议是一致的。
3、外设连接在各种总线上
相同协议和相同速率的外设连接在一类总线之上。注意,系统中某一种总线并不一定只有一条,每一条总线(注意,不是一种,而是一条)都定了一个地址空间,也就是一个地址命名空间,在这个意义上,cpu访问的地址x和pci设备的地址x并不是一个地址,因此桥设备必须可以提供一个地址映射机制,可以将一端的地址映射到另一端的y(可以直接等于x,然而意义却不一样)。
4、中断引脚
cpu核心为了可以被外设中断,它必须有一个中断引脚。外设为了可以中断cpu,也必须有一种机制使它和cpu中断引脚直接或者间接相连接。
4.1、基于硬连线的中断

外设要想能中断cpu,最直接的方式是引出一根线,和cpu的唯一的中断引脚相连,然而cpu只有一个引脚,所以cpu需要在后续的总线周期中查询是谁发送了中断信号,因此外设需要有机制告知这个信息,这个信息就是中断向量号,然而很多设备会共享一个向量号,这就需要cpu在基于中断向量号的中断处理程序中遍历所有的设备进行确认了。
5.协议软化
早期很多的总线都是并行的,芯片除了片选引脚外,地址线/数据线都是并行的,这样的话不利于通信协议的更改,因为并行总线的通信协议(总线事务)完全基于时序,而时序是硬件设计时定义的,比如对于地址/数据复用线,第一个总线周期发出地址,然后后续周期发出数据等,这些都是硬连线确定的,另外,并行线路,频率越高干扰越大,离得越近干扰越大,然而事情却在向高频,小型化发展,这明显是一个矛盾,因此设计出了串行总线,将处理逻辑集中于芯片,总线线路只负责传输基于frame的数据,这就是协议软化,也叫总线事务软化。当需要更新协议的时候,只需要更换芯片即可,线路无需更改。
5.1、基于消息的中断
pci/pcie总线使用基于消息的中断,即msi/msi-x,这种中断机制无需设备的中断线引脚,只需要在串行总线发出一个中断事务,然后会有芯片接管这个事务,这个事务消息中有中断向量号信息,然后该芯片会代理设备向cpu发出中断事务,具体如何向cpu转发设备的中断,有很多种方式,一种古老的方式用于使用8259的系统中,8259会向cpu的intr引脚发送中断,然后到cpu查询向量号的时候8259会将从msi中得到的向量号发给cpu。一种更新的方式是使用apic,msi向一个存储器地址空间写一个中断消息,该地址在pcie桥处被转换为cpu的存储空间地址,该地址就是local-apic的映射地址,然后在fsb上发送中断事务,由于地址被映射到处理器封装中的local-apic,该事务被local-apic接管,然后local-apic再向处理器核心即cpu发送中断。这种方式完全由消息事务完成,丝毫不需要任何硬连线。
三、系统软件相关
系统软件并不仅仅是操作系统,实际上操作系统并不直接管理硬件。fireware和硬件接口,而操作系统和用户接口。
1、fireware定义硬连线拓扑
这种fireware和主板硬件接口,在x86平台上,这种fireware称为bios,在bios定义了丰富的信息。主板上电后,bios执行,bios中保存了E820映射信息,也就是cpu的地址空间的什么地址映射到什么总线,接下来的一种可能实现是bios根据这些信息检测并初始化总线设备,实际上是一种遍历,为各个设备分配基地址,也就是写入配置空间基地址信息。这些信息由操作系统读出并使用。(当然也可以将这信息写死到设备的rom中)
2、操作系统
和用户接口,操作完全是为了管理用户进程的,它对硬件的管理完全是基于fireware的。操作系统根据fireware的信息得到主板拓扑信息,设置中断向量,得到设备的基地址等信息。
附:软化
不知以太网以及tcp/ip的设计思想有没有影响主板设计,以太网的802.3设计就是一个串行协议设计的成功例子,tcp/ip的设计也是类似的一个例子,网络协议的设计几乎都是串行的,这和计算机早期的并口不同,串口有着简单性和抗干扰性的优点,这点意义上,双绞线最终淘汰了并口线,同轴线等...
不管怎样,串行线路是软的,而不像并行线路那样硬,这样就可以将处理逻辑集中于端点而不是线路本身,比如再也不用定义哪根线是数据准备好信号,那些根线是地址信号了,只需要定义一个frame的格式,然后按照这个格式发送数据就可以了,这样在串行线路上,甚至都不再区分什么地址线和数据线了,地址和数据都包含在数据包本身了,这样分层协议和封装协议就容易设计出来了,芯片本身使用软件或者硬件处理数据包,和线路没有关系,正如ipv6的数据包和ipv4的包都可以跑在一条线路上一样,虽然它们的地址信息一点都不同。
串行线路将更多的事交给了端点的软件或者硬件,这就解耦了线路和线路载荷。一般意义上,并行线路在低频率时钟情况下比串行线路快,然而当这种优势达到极端时,当时钟频率发展到使并行线路不再可以提升性能时反而降低性能时,串行线路取代了并行了线路,此时由于时钟频率足够高,串行线路也已经足够快了,前仆后继,善莫大焉!我们的主板将越来越像一个网络了,实际上,最终,我们的互联网和主板将归于一种设计,那就是串行线路连接各端点。人们一直以为软件处理效率不如硬件直接处理,说不定最终接替摩尔定律的恰恰的软件的设计思想而不再是单纯的硬件,这里的软件并不是编程意义上的软件,而是设计意义上的软件,也就是将处理逻辑集中于端点的设计思想。
笑声中说一句,串行总线中可以轻松实现中断的动态配置,操作系统可以参与中断向量的配置,而在并行线路中,操作系统只能使用fireware的信息。


原文链接:http://blog.csdn.net/dog250/article/details/6329511
加载中
返回顶部
顶部