第一章 系统概述
这张图说的真的好,虽然和知识没有什么关系,最初看到也觉得没什么,但是学了大半学期再倒回来看这些话,我认为是十分正确的。同样的代码,不同的写法,效率可能差上成百上千倍。然后就是特别是通过bomb lab,做了之后我对整个C语言的理解都不一样了。知其然,更要知其所以然,可能这就是系统的魅力吧!
为什么要学习计算机系统
- 为了编程序的时候少出错(逻辑性,准确性,内存溢出等)
- 为了在程序出错的时候很快找到出错的地方(gdb调试,或者直接查看汇编指令,找到错误)
- 为了明白程序是怎样在计算机上执行的(利用程序执行的原理,可以编写出更快的程序)
- 作为计算机专业的同学应该具有的底层意识。
计算机基本工作原理
一些基本的概念。
冯·诺依曼体系
冯·诺依曼结构最重要的思想是存储程序。
- 计算机的基本部件:控制器、存储器、运算器、输入设备和输出设备。
(计导必考题目!!) - 存储器不仅能存放数据,而且也能存放指令,形式上两者 没有区别,但计算机应能区分数据还是指令。
- 控制器应能自动取出指令来执行。
- 运算器应能进行加/减/乘/除四种基本算术运算,并且也 能进行一些逻辑运算和附加运算。
- 操作人员可以通过输入设备、输出设备和主机进行通信。
- 内部以二进制表示指令和数据。每条指令由操作码和地址码两部分组成。操作码指出操作类型,地址码指出操作数的地址。由一串指令组成程序。
- 采用“存储程序”工作方式。
计算机是如何工作的
图中的部件解释:
-
CPU:中央处理器 -
PC:程序计数器 -
MAR:存储器地址寄存器 -
ALU:算术逻辑部件 -
IR:指令寄存器 -
MDR:存储器数据寄存器 -
GPRs:通用寄存器组(由若干通用寄存器组成,早期就是累加器)
程序执行前:
数据和指令事先存放在存储器中,每条指令和每个数据都有地址,指令按序存放,指令由OP、ADDR字段组成,程序起始地址置PC
注意:
- 程序启动前,指令和数据都存放在存储器中,形式上没有差别,都是0/1序列
- 采用”存储程序“工作方式:程序由指令组成,程序被启动后,计算机能自动取出一条一条指令执行,在执行过程中无需人的干预。
-
指令中需要给出的信息:
(1) 操作性质(操作码)
(2) 源操作数1 或/和源操作数2(立即数、寄存器编号、存储地址)
(3) 目的操作数地址(寄存器编号、存储地址)
开始执行程序:
- 第一步:根据
PC取指令 - 第二步:指令译码
- 第三步:取操作数
- 第四步:指令执行
- 第五步:回写结果
- 第六步:修改
PC的值 - 继续执行下一条指令
程序的开发和执行
机器语言
机器语言就是0/1代码啦!在计算机科学导论中我们也动手写了图灵机的操作(虽然我们班好像没有要求,但因为某种原因我写过几份,现在回想起来也挺有趣的)。感觉机器语言和图灵机有点类似,通过读写纸带和打孔之类的。
但是,如果要修改,或者打错了,那么就要从头再来,非常地崩溃,可读性也非常差。
汇编语言
- 用助记符表示操作码
- 用标号表示位置
- 用助记符表示寄存器
优点:
- 不会因为增减指令而需要修改其他指令
- 不需记忆指令编码,编写方便
- 可读性比机器语言强
高级语言
- 它们与具体机器结构无关
- 面向算法描述,比机器级语言描述能力强得多
- 高级语言中一条语句对应几条、几十条甚至几百条指令
- 有“面向过程”和“面向对象”的语言之分
- 处理逻辑分为三种结构:顺序结构、选择结构、循环结构
- 有两种转换方式:“编译”和“解释”
• 编译程序(Complier):将高级语言源程序转换为机器级目标程序,执行时只要启动目标程序即可,比如C++、C、Java等
• 解释程序(Interpreter ):将高级语言语句逐条翻译成机器指令并立即执行,不生成目标文件,比如Python等
源代码的处理
计算机的层次结构
计算机性能的定义
这部分在书上有,mooc上没有。其主要指标为吞吐率(throughput)和响应时间(response time)
- 吞吐率:在单位时间内所完成的工作量。
- 响应时间:从作业提交开始到作业完成所用的时间。