系统

计算机系统的分层

计算机系统的分层计算机系统(computer system)是计算机的硬件系统和软件系统构成的整体,这个概念跟操作系统(operating system)易混淆,因为平时较少使用到前者,后者其实是前者的一部分。在研究结构比较复杂的系统时,通常会先根据一些原则和思想将其划分成多个层(layer),然后通过逐个的研究各个层来研究整个系统。现代计算机系统也是分层研究和实现的,一般认为其最底层位于数字电路(digital circuit)中靠顶层的位置,该位置实际并不太关心电路本身,而是关心如何用电路基本组件来构造可实现具体逻辑的组件,而该位置以下的部分则属于电子工程学(electronic engineering)等其他领域。需要明确这里的计算机指数字式电子计算机,而计算机系统本身并不限制实现方式,比如更早出现的机械计算机、模拟式电子计算机。… 阅读全文

计算机体系结构与计算机组成

计算机体系结构与计算机组成 之前的文章确立了研究对象并将其划为6个层,之后自然应当讨论各个层的设计与实现,这相当于在分层的视角下讨论计算机体系结构(computer architecture)。计算机体系结构研究的是“如何通过组件拆分的形式构造计算机系统”,其中有高观点的“设计方面的问题”,也有低观点的“如何实现给定的设计”,后一类问题被称为计算机组成(computer organization)。 实际上计算机体系结构和计算机组成的概念边界是不太清楚的,在英文维基百科中两者是上述的包含关系,计算机系统学者A.S. Tanenbaum认为这两者通常相同。历史上这两个概念的分裂可追溯至1960s,在这期间图灵奖得主、《人月神话》的作者Fred Brooks创造了计算机体系结构这个术语。当时他作为设计者在描述IBM… 阅读全文

现代计算机系统的硬件结构

现代计算机系统的硬件结构                  现代计算机系统中的主要硬件是CPU、内存、IO设备、总线(bus),因为它们共同实现了冯·诺依曼结构的主要功能。需要明确这几种硬件不一定完全是物理上互相独立的实体,下面先简单描述它们的功能和结构: 1) 总线:用于在多个硬件之间或多个计算机系统之间实现标准化的连接与数据传输的系统。通常认为总线指硬件,但总线也可泛指相关的标准、协议、软件等。计算机系统中通常包含多种总线,同一种总线还可能有很多个(条)。上述其他硬件通过多种总线互连,它们内部的各个模块也可能通过多种总线互连,而不同总线之间可通过桥片(bridge)这种硬件互连; 2) 内存:配合内存控制器(memory controller)实现冯·诺依曼结构中的内存。内存具备存储能力,其通过内存总线直连内存控制器,再由内存控制器统一处理按内存地址读写的请求。通常将内存和内存控制器统称为内存系统(memory… 阅读全文

处理控制冒险的分支预测技术

分支预测分支预测技术是用于处理控制冒险的。这里借上图中的一段高级语言的IF-ELSE程序,及其对应的某种汇编语言来讨论分支预测,汇编包含1个条件跳转指令(BR)、1个无条件跳转指令(BNE)。 首先,上面的无条件跳转指令看起来似乎容易处理,因为其目的地址不会改变,似乎能直接让取值单元取目的地址的指令,但在很多计算机里并不能这样,这由流水线本身的特点决定。在这样的计算机里,当译码单元“发现”无条件转移指令时,取指单元已经在取其后面的指令了。换句话说,无条件跳转的下一条指令已经上了流水线。这时解决的办法是干脆让这条指令执行完,然后再去执行跳转到的指令。这种情况是很难让人接受的,因为完全不符合前后次序。不过有2种“通融”方式: 1) 默认把所有无条件转移指令的下一条指令“当作”其上一条指令来执行; 2) 让所有无条件转移指令的下一条指令都是NOP;… 阅读全文

处理数据冒险的乱序执行技术

顺序执行与数据冒险为讨论乱序执行技术,先引入一种超标量计算机,并先讨论其上的顺序执行,所谓顺序执行就是前面讨论的流水线的执行方式,即指令都按流水线的方向完成其各个步骤。 该机器包含R0~R7共8个指令层可见的寄存器,其所有算术指令都由3个寄存器完成(比如R0=R1+R2)。而超标量意味该机器的流水线是有“分支”的,2个分支能“同时”完成计算并写回公共的R0~R7寄存器,这种分支流水线通常是每个分支有自己独立的ALU等硬件。 该机器执行算术指令的时序是这样,如在第n周期译码,则在第n+1周期开始执行,加减在第n+2周期结束时把结果写入寄存器,乘法则要多占1个周期。比如第k周期发射2个加法指令,如寄存器不冲突,第k+2周期结束时,和就分别在2个寄存器里。译码器能在1个周期里译码和发射指令,也可之后发射。… 阅读全文

推测执行技术

基本块程序可划分成数个基本块,基本块包含多条顺序执行的指令,且只有一个入口和一个出口。一个入口意味着整个程序中不能有跳转类指令进入基本块第一条指令后的指令,一个出口意味着基本块最后一条指令才能是跳转指令。上图给出了一段高级语言程序,其包含多个基本块。 前面在讨论乱序执行时,使用到的汇编程序完全由算术指令构成,不包含跳转指令。所以说前面讨论的乱序执行仅适用于基本块内部,这有较大的局限性,因为实际程序中的基本块通常都很短,且基本块间不一定能并行。所以乱序执行只有跨越基本块边界才能有更大效果。而跨越基本块则意味着执行可能不应该执行的指令,这种不知道是否需要执行就提前执行的技术统称为推测执行技术。对于很多硬件来说,其无法支持跨越基本块的乱序执行,所以这部分工作也会交给编译器完成,称为指令重排。  … 阅读全文

德州仪器OMAP4430及其缓存与LPDDR2内存操作

OMAP4430片上系统   OMAP4430是德州仪器2011年的产品,基于德州仪器第4代OMAP(开放式多媒体应用平台)架构。使用OMAP4430片上系统的代表产品有LG Optimus 3D、Motorola Milestone 3、Motorola Atrix等。这款芯片是一个片上系统(SoC),所谓SoC就是指芯片中不仅包含CPU的部分,还可能包含GPU、手机通信基带等等。目前SoC和CPU之间的区别越来越小,比如INTEL的CPU需要和主板上的INTEL芯片组一起工作,在之前INTEL主板有北桥芯片和南桥芯片,后来北桥芯片就装进了CPU内,主板上就只剩下了南桥芯片,也就是说后来的INTEL处理器也可看作SoC。   内部结构OMAP4430和酷睿的最大区别是其使用ARM指令集,其应用场景不在PC/笔记本,在高性能的移动/嵌入式场景,比如智能手机、平板、物联网设备等。这里来看OMAP4430内部的模块:… 阅读全文

爱特梅尔ATMEGA168及其管脚信号

ATMEGA168单片机 单片机又叫微控制器,其和前面提到的两种CPU/SoC有很大区别,后两者属于不同场景的高性能芯片。其中OMAP4430的应用场景和单片机可能重合度高,但两者性能差别很大。所谓单片机就是指把所有东西都放到芯片里(包括内存等),整个电脑就只有一个芯片。通常单片机的性能差,但其价格低廉,ATMEGA168的价格不到1美金。单片机通常被用作微波炉、洗衣机的”CPU”的。从上面两张图片可以看出,该单片机的封装方式和前面两种CPU/SoC不太相同,并且其仅有28个管脚,管脚少的一部分原因是因为该单片机不需要很多管脚连接内存和很复杂的总线。   管脚信号和内部结构ATMEGA168用于取代复杂的地址总线、数据总线跟外部进行通信的是数字IO接口,其中PD有8个管脚、PB有8个管脚,PC有7个。这种接口的每个管脚可被软件配置成输入/输出管脚。PC的其中6个管脚更是可被直接配置成模拟信号的输入/输出管脚,比如这种模拟信号管脚可以接入温度传感器,这种传感器的输出直接就是变化的电压值,这个值会被特定函数计算出对应的温度值。ATMEGA168的其他管脚包括地线(GND)、用于配置模拟电路的AVCC/AREF、电源输入(VCC)。… 阅读全文

PCI系统总线

PCI总线这里先分析用“古老的”电脑看电影大概需要多少的总线带宽这个问题。这里设需要按1024*768分辨率、30FPS、24位真彩色的规格展示视频,那么色彩决定每个像素需要3个字节(24位),1024*768个像素是2 359 296字节,每秒需要30个帧共67.5MB,所以需要67.5MB/s的带宽。不过这只是“显示”占用的带宽,实际播放过程是先把外存数据载入内存,再把内存数据变为图像。考虑到“古老的”电脑只有1条总线,没有独立显卡(集成显卡的显存就是内存),内存不足以把电影一次性装入内存。所以播放过程是2阶段流水线式的“一边读外存数据到内存、一边把内存数据用于播放视频”,这样2个阶段的流量会同时被1条总线承载,所以实际需要翻倍的135MB/s的总线带宽。 早期使用ISA总线的IBM PC没有图形用户界面(GUI),这时的计算机在显示器上输出内容时,总线带宽不受上述分析的限制。后来进入Windows时代,这时的计算机可以在显示器上输出复杂的图形界面,那么这时的计算机就会受上述分析的限制。由于ISA总线只有16.7MB/s的带宽,由ISA升级来的EISA总线也只有33MB/s的带宽,于是这时候的总线成为了计算机性能的瓶颈。… 阅读全文

INTEL酷睿I7的微体系结构

功能模块上图为酷睿I7的每个核心的组成结构,其包括如下4大部分: 1) 内存子系统:内存系统的一部分,不包括核心外的L3缓存、主板上的内存; 1.1) L2缓存:不区分指令和数据,为256KB的8路组相联结构,缓存块大小为64字节; 1.2) 系统接口:连接到L3缓存,L3缓存也不区分指令和数据,大小为1-20MB(根据产品型号确定,比如i5、i3等),采用12路组相联结构,缓存块大小为64字节。L3缺失时继续访问DDR3内存总线; L1缓存和内存子系统间存在未画出的2个预取单元,第1个是按内存块大小预取的。第2个是按步长预取的,当CPU总以连续的k个地址(步长)取数据时,该预取单元会获取到这个步长,并根据这个步长预取数据,这种预取策略考虑的是便于操作数组等数据结构。 2) 前端:取指令并将指令译码为微操作序列,酷睿的微操作和RISC处理器的微操作风格类似。并且能够把译码前的指令装入L1指令缓存,把译码后的微操作装入微操作缓存(INTEL内部称为L0缓存);… 阅读全文
滚动至顶部