计算机系统和中断的概念

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

1、CPU和外设芯片 编程

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

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

相关文章
相关标签/搜索