信息就是位+上下文
源程序:就是一个由0和1组合的位(bit)序列,8位组成一字(byte),每个字节表示某个文本字符。
系统中所有的信息——包括磁盘文件、存储器中的程序、存储器中存放的用户数据以及网络上传送的数据,都是由一串位表示的。区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。
C语言的起源:
由Dennis Ritchie在1969年~1973年创建的。
美国国家标准学会(American National Standards Institute,ANSI)在1989年颁布了ANSI C标准,后来由国际标准化组织(International Standards Organization,ISO)负责C语言的标准化工作。
Kernaghan和Ritchie合著的经典书被程序“K&R”。
程序被其他程序翻译成不同格式
为了在系统上运行hello.c程序,每条C语句都被编译器转化成一系列的低级机器语言指令。然后这些指令按照一种称为可执行目标程序的格式打好包,并以二进制磁盘文件的形式存放起来。目标程序也称为可执行目标文件。
代码-hello.c文件:
#include
int main()
{
printf("hello world\n");
}
在Unix系统上,从源文件到目标文件的转化是由GCC编译器驱动程序完成的:
unix> gcc -o hello hello.c
系统的硬件组成
总线
贯穿整个系统的是一组电子管道 , 称做总线, 它携带信息字节并负责在各个部件间传递 。
传送定长的字节块 , 也就是字 ( word )。
现在的大多数机器字长有的是 4 个字节 ( 32 位 ), 有的是 8 个字节 ( 64 位 )。
假设字长为 4 个字节 , 并且总线每次只传送 1 个字。
I/O设备
每个 I/O 设备都通过一个控制器或适配器与 I/O 总线相连 。
控制器和适配器之间的区别主要在于它们的封装方式 。
控制器:置于 I/O 设备本身的或者系统的主印制电路板 ( 通常称为主板 ) 上的芯片组 ;
适配器:则是一块插在主板插槽上的卡。
主存
主存是一个临时存储设备 , 在处理器执行程序时 , 用来存放程序和程序处理的数据。
物理上,是一组动态随机存取存储器 ( DRAM )芯片。
逻辑上 , 是一个线性的字节数组 , 每个字节都有其唯一的地址 ( 即数组索引 ), 这些地址是从零开始的。
例如 , 在运行 Linux 的 IA32 机器上 , short 类型的数据需要 2 个字节 , int 、 float 和 long 类型需要 4 个字节 , 而 double 类型需要 8 个字节 。
处理器
中央处理单元 ( CPU ), 简称处理器 , 是解释 ( 或执行 ) 存储在主存中指令的引擎 。
处理器的核心是一个字长的存储设备 (或寄存器), 称为程序计数器( PC )。在任何时刻 , PC都指向主存中的某条机器语言指令 (即含有该条指令的地址)。
CPU 在指令的要求下可能会执行以下操作 :
加载:把一个字节或者一个字从主存复制到寄存器 , 以覆盖寄存器原来的内容。
存储:把一个字节或者一个字从寄存器复制到主存的某个位置 , 以覆盖这个位置上原来的内容 。
操作: 把两个寄存器的内容复制到ALU, ALU 对这两个字做算术操作, 并将结果存放到 一个寄存器中 , 以覆盖该寄存器中原来的内容 。
跳转:从指令本身中抽取一个字, 并将这个字复制到程序计数器(PC) 中 , 以覆盖 PC中原来的值。