学点计算机——计算机系统漫游一
今天开始,我在此写点关于计算机系统的知识点,内容参考《深入理解计算机系统》,我觉得这本书还是很友好的,起码像我这样的计算机小白还是看得懂的(
计算机系统组成
说实话,计算机系统内部很复杂——我觉得,但是它可以概括为由硬件和系统软件组成。
CPU简单操作
- 加载:从主存复制一个字节或者一个字到寄存器
- 存储:从寄存器复制一个字节或者一个字到主存的某个位置
- 操作:从两个寄存器中分别复制一个字的内容到ALU,ALU对这两个字做算术运算,并将结果存放到一个寄存器中
- 跳转:从指令本身中抽取一个字,并将这个字复制到程序计数器(PC)中
信息就是位+上下文
我们编写的程序、源文件等在计算机中就是由值为0和1组成的位序列。其中8个位被组织成一组,称为字节。其中只由ASCII字符构成的文件称为文本文件,其他文件称为二进制文件。
区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。因为系统中的所有信息都是由一串比特表示的,在不同的上下文中,一个同样的字节序列可能表示不同的含义,就像我们的中文一样。
程序被其他程序翻译成不同的格式
C源程序编译过程:
预处理阶段:
预处理器根据"#"开头的命令修改原始C程序
编译阶段:
编译器将.i文件翻译成.s文件
汇编阶段:
汇编器将.s文件翻译成机器语言指令,把这些指令打包成可成定向目标程序的格式,将结果保存在.o文件中。
链接阶段:
链接器将.o文件与标准库中的.o文件合并成可执行文件
了解编译系统如何工作的益处
优化程序性能:
有助于我们做出好的编码选择
理解链接时出现的错误
避免安全漏洞:
例如缓冲区溢出错误