随笔分类 -  Computer Systems

摘要:1、静态链接注:链接器将重定位目标文件(relocatable object files)组合成一个可执行目标文件。cpp(c previous processor,C预处理器);ccl(C编译器);as(汇编器)2、为了创建静态链接,链接器完成两个主要任务:1)符号解析(symbol resolution):将每个符号引用和一个符号定义联系起来。2)重定位(relocation):编译器和汇编器生成从0地址开始的代码和数据节。链接器通过把每个符号定义与一个存储器位置联系起来,然后修改所有对这些符号的引用,使得它们指向这个存储器位置,从而重定位这些节。3、目标文件有三种形式Relocatabl 阅读全文
posted @ 2011-06-14 21:43 浪里飞 阅读(672) 评论(0) 推荐(0)
摘要:1、缓存友好的代码 对局部变量的反复引用是好的,因为编译器能够将它们缓存在寄存器文件中(时间局部性)。(内部循环) 步长为1的引用模式是好的,因为存储器层次结构中所有层次上的缓存都是将数据存储为连续的块(空间局部性)。(通过按照数据对象存储在存储器中的顺序来读数据) 2、使用分块来提高时间局部性 分块的大致思想是将一个程序的数据结构组织成块(block)的组块(chunks)。 <Compute... 阅读全文
posted @ 2011-06-13 23:32 浪里飞 阅读(484) 评论(0) 推荐(0)
摘要:1、组相联高速缓存(set associative cache) 1 < E < C/B 2、全相联映射(fully associative cache) E = C/B 因为全相联高速缓存需要并行搜索许多相匹配的行,所以构造相对是困难的;因此只适合做小的高速缓存;如虚拟存储器系统中的TLB,它缓存页表项。 3、写回(write back):尽可能推迟存储器更新,只有当替换算法要驱逐已更新的块时... 阅读全文
posted @ 2011-06-13 15:10 浪里飞 阅读(668) 评论(0) 推荐(0)
摘要:1、高速缓存存储结构 注:set(组) 组索引位告诉我们这个字必须存储在那个组中;然后A中t个标记位告诉我们这个组中的那一行(if any)包含这个字;当且仅当设置了有效位并且该行的标记位与地址A中的标记位相匹配时,组中的这一行包含这个字;确定行后,b个块偏移位给出了在B个字节的数据块中的字偏移。 2、直接映射高速缓存 每个组只有一行(E = 1)的高速缓存被称为直接映射高速缓存(direct-mapped cache)。 高速缓存确定一个请求是否命中,然后抽取出被请求的字的过程,分为三步:组选择,行匹配,字抽取。 如果把高速缓存看作一个关于组的一维数组,那么这些组索引就是一个到这个数组的索. 阅读全文
posted @ 2011-06-13 11:23 浪里飞 阅读(897) 评论(0) 推荐(0)
摘要:1、局部性有两种形式:时间局部性(temporal locality)和空间局部性(spatial locality)。在一个具有良好时间局部性的程序中,被引用过一次的存储器位置很可能在不远的将来再被多次引用;在一个具有良好空间局部性的程序中,如果一个存储器位置被引用了一次,那么程序很可能在不远的将来引用附近的一个存储器位置。 2、重复引用同一个变量的程序有良好的时间局部性。对于具有步长为k的引... 阅读全文
posted @ 2011-06-12 22:46 浪里飞 阅读(755) 评论(0) 推荐(0)
摘要:1、磁盘构造 每个表面是由一组称为磁道(track)的同心圆组成;每个磁道被划分成一组扇区(sector);每个扇区包含相等数量的数据位(通常是512字节);这些数据编码在扇区上的磁性材料中。扇区之间由一些间隙(gap)分隔开,这些间隙中不存在数据位。间隙存储用来标识扇区的格式化位。 注:spindle(主轴),platter(盘片),cylinder(柱面) 2、磁盘容量 (扇区大小×每条磁道... 阅读全文
posted @ 2011-06-12 22:00 浪里飞 阅读(743) 评论(0) 推荐(0)
摘要:1、如果你的程序需要的数据是存储在CPU寄存器中的,那么在执行期间,在零个周期内就能访问到它们。如果存储在高速缓冲中,需要1~10个周期。如果存储在主存中,需要50~100个周期。如果存储在磁盘上,需要约20000000个周期。 2、随机访问存储器(RAM,Random-access memory)分为两类-静态和动态的。静态RAM(SRAM)比动态RAM(DRAM)更快,但也贵很多。SRAM用... 阅读全文
posted @ 2011-06-09 21:55 浪里飞 阅读(1012) 评论(0) 推荐(0)
摘要:1、编译技术被分为“与机器无关”和“与机器相关”两类。“与机器无关”,使用这些技术时可以不考虑将执行代码的计算机的特性;而“与机器有关”,指这些技术依赖于许多机器的低级细节。2、最小二乘法拟合3、优化之一:消除循环的低效率将循环中需要每次计算,但是计算结果不会改变的语句移出去,称为代码移动(code motion)。4、减少不必要的过程调用。如可以确保边界安全的情况下,就不需要每次都进行边界安全检查。5、消除不必要的存储器引用示例代码void Test1(int *pToInt){ *pToInt = 0; for (int i = 0; i < 10; i++) { *pToInt + 阅读全文
posted @ 2011-06-06 23:07 浪里飞 阅读(890) 评论(0) 推荐(0)
摘要:1、CISC(Complex Instruction Set Computing),RISC(Reduced Instruction-Set Computer),MIPS(Million Instructions Per Second)。2、CISC编码是可变长度的,IA32的指令长度可以是1~15;RISC编码是固定长度的,通常所有的指令都是编码为4个字节。3、在硬件设计中,电子电路被用来计算位的函数(function on bits),以及在各种存储元素中存储位。大多数现代电路技术都用信号线上的高电压或低电压来表示不同的位值。要实现一个数字系统需要三个主要的组成部分:计算位的函数的组合逻辑 阅读全文
posted @ 2011-06-04 23:11 浪里飞 阅读(660) 评论(0) 推荐(0)
摘要:1、Intel现在称其指令集为IA32,即Intel 32位体系结构(Intel Architecture 32-bit),这个处理器也俗称为“x86”。2、Linux使用了平面寻址方式(flat addressing),在这种寻址方式中,程序员将整个存储空间看做一个大的字节数组。3、在平面寻址中,对特殊寄存器的需求已经大为降低了。在大多数情况下,前六个寄存器都可以看作是通用寄存器,对它们使用的没有限制。4、对于C语言中比如if表示式,switch,while,for循环等对应的汇编表示,在本书都有详细描述,对于研究汇编写程序有极大帮助。此略。5、一个过程调用包括将数据(以过程参数和返回值的形 阅读全文
posted @ 2011-06-04 10:48 浪里飞 阅读(1047) 评论(0) 推荐(0)
摘要:1、机器级程序将存储器视为一个非常大的字节数组,称为虚拟存储器(virtual memory)。存储器的每个字节都由一个唯一的数字来标识,称为地址(address),所有可能地址的集合就称为虚拟地址空间(virtual address space)。虚拟地址空间是一个展现给机器级程序的概念性映像(image),具体的实现使用的是随机访问存储器RAM,磁盘存储,特殊硬件和OS软件的结合,来为程序提供一个看上去统一的字节数组。2、指值有两个方面:它的值和它的类型。它的值表示的是某个对象的位置,而它的类型表示那个位置上所存储对象的类型(如int,float)。3、每台计算机都有一个字长(word s 阅读全文
posted @ 2011-06-02 10:32 浪里飞 阅读(639) 评论(0) 推荐(0)
摘要:1、系统的硬件组成Figure1 Hardware organization of a typical system. CPU: Central Processing Unit, ALU: Arithmetic/Logic Unit, PC: Program counter, USB: Universal Serial Bus.1)总线贯穿整个系统的一组电子管道,它携带信息字节并负责在各个部件间传递。通常总线被设计成传送定长的字节块,也就是字(word)。各个系统中字长不尽相同,intel pentium系统的字长为4字节。2)I/O设备 I/O设备是系统与外界的联系通道。 控制器是I/O设备 阅读全文
posted @ 2011-05-29 15:46 浪里飞 阅读(788) 评论(0) 推荐(2)