一、信息就是位+上下文
为什么信息就是位+上下文
eg:int a = 10;
a在内存中存储的是00000000000000000000000000001010,以整形的方式解读他是10,但是以浮点数的方式解释,他就不是10了,因此上下文不同,即使内存中存储的一段相同的二进制位,解读方式也不一样。
(一)、源程序(源文件)(hello.c)
源程序中的每一个字符都用ASCII码值表示
#include<stdio.h>int main(){ printf("Hello world\n"); return 0;}
上面这个程序中每一个字符都由对应的ASCII码值表示。
(二)、c语言优点
- 与Unix操作系统关系密切,C语言是为了设计Unix系统而开发的。
- C语言小儿简单。
- C语言是为了实践目的而设计的。
二、程序被其它程序翻译成不同的格式
GCC编译器驱动 hello.c--->可执行目标文件hello
三、了解编译器如何工作的好处
1.优化程序性能
2.理解链接时的错误
3.避免安全漏洞
四、处理器读并解释存储在内存中的指令
(一)、系统的硬件组成
1.总线
贯穿系统的一组电子管道
作用:传输字(1个字4个字节(32位),1个字8个字节(64位))
为了方便理解,假设总线每次只传输一个字,1个字四个字节。
2.IO设备
用户输入的键盘和鼠标
用户输出的显示器
长期存储数据和程序的磁盘驱动器(磁盘),最初的可执行目标程序hello就储存在这里。
3.主存
临时存储设备,存放程序和程序处理的数据。
4.
4.1处理器(中央处理单元,CPU)
1.CPU的核心是寄存器(或者叫PC计数器)(实质上是大小为1个字(4个字节)的存储区域)
2.任何时刻PC都指向主存中的某条机器语言,PC中存储的是某一条指令的地址,直到系统断电前,他都不断地执行着处理器要他执行的指令,PC不断更新指向下一条指令,下一条指令与刚刚执行的指令不一定是相邻的。
3.寄存器文件:由一些字长为1的寄存器组成。
4.在指令要求下CPU会进行的一些操作。
- 1.加载:把一个字节或者一个字从主存复制到寄存器,以覆盖寄存器原来的内容。
- 2.存储:把一个字节或者一个字从寄存器复制到主存的某个位置,以覆盖寄原来的内容。
- 3.操作:把两个寄存器的内容复制到ALU(算数/逻辑单元)中,ALU对这两个字作算数操作,将运算结果放到原来的一个寄存器中,覆盖原来寄存器中的内容。
- 4.跳转:从指令中拿一个字,复制到PC中,覆盖PC中原来的值。
4.2hello程序的运行过程
1.
程序写完保存后,就是被存储在了硬盘中,运行的时候,从硬盘中把信息先复制到主存,再从主存复制到寄存器,再从寄存器通过IO总线输出到显示器上面
请看下图。
2.根据机械原理,较大的存储设备要比较小的存储设备运行得慢。
快速设备造价远远高于同类的低速设备。
寄存器(造价较高) | 主存 | 高速缓存存储器 | |
大小 | 只能存储几百个字节 | 可以存储几十亿个字节。 | 数十万到数百万字节 |
处理器读数据的速度 | 主存速度的100倍 | 慢 | 比寄存器慢,但却是主存的5~10倍 |
五、高速缓存至关重要
为了解决寄存器内存小,主存访问速度慢等等这些问题,系统设计者采用了更小更快的存储设备:高速缓存存储器(简称高速缓存)
那么,有了高速缓存后,程序写完代码保存,即就是被存储在了硬盘中,运行的时候,从硬盘中把信息先复制到主存,再从主存复制到寄存器或者高速缓存存储器,再从寄存器通过IO总线输出到显示器上面。
我们得到一个重要结论:程序员可以利用高速缓存将程序的性能提高一个数量级。
六、存储设备形成层次结构
每一个计算机的存储设备都可以画出一张存储层次结构的图来。
在这张图中,本层次的存储器可以作为低一层次存储器的高速缓存,例如L1是L2的高速缓存,L2是L3的高速缓存,L3是主存的高速缓存。