[已注销]对《计算机组成与设计硬件/软件接口》的笔记(6)

计算机组成与设计硬件/软件接口
  • 书名: 计算机组成与设计硬件/软件接口
  • 作者: [美] David A.Patterson/John L.Hennessy
  • 页数: 593
  • 出版社: 机械工业出版社
  • 出版年: 2007-4
  • 第39页
    硬件设计四个基本原则:
    1.简单源自规整(指令操作数个数)
    2.越少越快(寄存器个数)
    3.加速常用操作(量化也提高了)
    4.适当的折中
    当前计算机两大特性:
    1.指令以数据的形式表示
    2/程序和数据一样保存在存储器中,可以读写
    为了保持双操作数的格式(规整),MIPS引入了(或非)NOR 取代NOT
    如果一个操作数是0,那么它的结果等价与NOT
    A NOR 0 = NOT(A OR 0)=NOT(A)
    2012-11-06 18:22:57 回应
  • 第45页
    MIPS设置jr(无条件跳转)指令是为了支持软件(switch case语句)
    p52
    $fp并不是必须的,只是有了以后更方便
    p59
    条件分支指令的编址:
    【操作码6位】【操作数1:5位】【操作数2:5位】【只有16为编址分支地址】
    2^16表示的地址范围太小了
    为此我们还要使用一个寄存器,用寄存器+分支地址一共32位来表示跳转地址
    问题是哪个寄存器?
    PC保存了当前地址,用PC前或后2^16个地址完全可以表示循环和if语句!
    2012-11-07 22:09:11 回应
  • 第67页
    ### linker的三个步骤
    1.将代码和数据模块按符号特征放入内存
    2.决定数据和指令标记的地址
    3.修改内部和外部引用
    linker把几个独立的汇编机器语言程序组合起来并且解析所有未定义的标记,最后形成一个可执行文件。
    -----------------------
    ### loader用来将磁盘上的可执行文件加载到内存中,并启动它
    1.读取可执行文件header,确定正文段和数据段的大小
    2.为正文和数据创建地址空间
    3.把可执行文件的指令和数据全部复制到相应地址中
    4.把主程序参数复制到栈顶(从命令行获取argv)
    5.初始化机器寄存器,sp指向第一个空单元(sp-1表示第一个元素)
    6.跳转到启动例程(?),把参数复制到参数寄存器,然后调用main,当main返回后启动例程通过exit终止程序。
    2012-12-02 17:13:58 回应
  • 第80页
    inline优化虽然降低了函数调用的开销,但可能是代码变长,因此可能会降低cache的命中率。
    循环展开也是如此。
    2012-12-02 17:34:11 1人喜欢 回应
  • 第148页
    数字是无限的,而电路的状态是有限的,所以表示时会有损失,要么损失精度,要么损失范围
    第三章先跳过了
    2012-12-02 19:07:22 回应
  • 第317页
    write-through(书上翻译为“写通过”,翻译成“写直达”更好一些):当处理器发现cache和主存有数据不一致时为了保证一致性(consistance)把数据既写到cache又写到主存。
    这种方式的性能很差,因为一次写操作要100个处理器周期。
    一种解决方法是是使用写缓冲(write buffer)
    另一种方式方式是写回机制(write back),当写操作产生时,新的值仅仅写到cache中,暂时不写主存,只有当这段数据被替换时,才把它写到主存中去。
    2012-12-07 14:43:54 1回应

[已注销]的其他笔记  · · · · · ·  ( 全部295条 )

The Design of Everyday Things
1
About Face 3
6
Engineering a Compiler
1
人有人的用处
8
Understanding the Linux Kernel
4
计算机程序设计艺术
1
公正
1
The Art of Doing Science and Engineering: Learning to Learn
1
科学革命的结构
7
罗素论教育
3
三十六大
1
娱乐至死
3
Real World Haskell
2
Writing Analytically
1
Is Parallel Programming Hard, And, If So, What Can You Do About It?
1
计算机与人脑
1
组合数学
2
菊与刀
1
Rework
5
翻译新究
4
计算机程序的构造和解释
5
The Laws of Simplicity
4
写给无神论者
2
放任自流的时光
3
哥德尔、艾舍尔、巴赫
2
树上的男爵
2
C++语言的设计与演化
1
Land of LISP
7
C陷阱与缺陷
2
CUDA by Example
3
C++沉思录
1
世界尽头与冷酷仙境
4
Head First C
2
刀锋
1
并行编程模式
2
The Ph.D. Grind
2
计算机系统结构
2
禅与摩托车维修艺术
14
流浪的面包树
2
翻译研究
18
An Introduction to Programming in Emacs Lisp
1
GNU Emacs Lisp 编程入门
1
计算机系统概论
1
编码
3
拖延心理学
1
古今数学思想(一)
1
挪威的森林
9
奇特的一生
7
GPU高性能运算之CUDA
5
那些年,我们一起追的女孩
8
十八岁给我一个姑娘
2
C++编程思想(第1卷)
9
多核计算与程序设计
8
少有人走的路
5
忧伤的情欲
3
Hackers & Painters
7
哲学的慰藉
9
男人来自火星 女人来自金星
8
旅行的艺术
14
活着活着就老了
1
如何阅读一本书
7
Data-intensive Text Processing With Mapreduce
1
学习GNU Emacs
1
给研究生的学术建议
3
C专家编程
2
Spring揭秘
2
Head First Java(第二版·中文版)
1
自私的基因
1
C程序设计语言
2
计算机网络
3
自由在高处
2
大话设计模式
16
计算机网络
12