CSC3060 Introduction to Computer Systems
L0 前言
课本:深入理解计算机系统 Computer Systems: A Programmer's Perspective, 3/E (CS:APP3e)
网站:https://hansimov.gitbook.io/csapp
L1 计算机系统漫游
计算机系统是由硬件和系统软件组成的,它们共同工作来运行应用程序。
本书先用一个小例子来引起读者兴趣,并让读者构建一个简单的框架。
#include <stdio.h>
int main() {
printf("FUCK, world!\n");
return 0;
}
这个程序是从源文件开始的,比如文件名叫做 hello.c,用 ASCII 标准来表示文本字符存在系统里。
C 编程语言:是由贝尔实验室的人创建的,有三个特点让它变得成功:1. 与 Unix 操作系统关系密切,或者说其开始就是作为 Unix 的程序语言开发出来的,也写了很多 Unix 的工具和库;2. 小而简单,易于学习,也易于移植到不同的计算机上;3. C 是为实践目的设计的。这使得其成为系统级编程的首选,也适用于应用级程序。
接着,这个程序会被编译成不同的格式,由高级编程语言转化为低级机器语言指令,打包。下图为编译系统。
了解编译系统之后,我们可以:
- 优化程序性能
- 理解链接时出现的错误
- 避免安全漏洞
此刻,我们已经将源程序编译成了可执行目标文件 hello,并被存放在磁盘上。然后我们将其运行!关于这个时候程序发生的事情,我们需要了解系统的硬件组成(下图)。
总线:贯穿整个系统的电子管道,携带信息字节并负责在各个部件间传递。
I/O 设备:Input / Output 设备是系统与外界的联系通道,例如键盘、鼠标、显示器和磁盘。每个 I/O 设备都是通过一个控制器或适配器与 I/O 总线连接起来的,控制器是主板上的芯片组,适配器则是一块插在主板插槽上的卡。
主存:临时储存设备,在处理器执行程序时用来存放程序和程序处理的数据,是由一组 DRAM(动态随机存取存储器)芯片组成的,本质上是栈性的字节数组。
处理器:中央处理单元(CPU)的简称,是解释或执行存储在主存中指令的引擎,其核心是一个被称为程序计数器(PC)的字长大小的存储设备(或寄存器),还有算术逻辑单元(ALU)。CPU 在指令的要求下可能会执行这些操作:
- 加载:从主存复制一个字节(字)到寄存器,覆盖寄存器原来的内容
- 存储:从寄存器复制一个字节(字)到主存的某个位置,覆盖原来内容
- 更新:复制两个寄存器的内容到 ALU,ALU 将两个字相加,并将结果存放到一个寄存器中,覆盖原来内容
- I/O 读写:将一个 I/O 设备中复制一个字节(字)到寄存器,或者反过来
- 转移:从指令本身中抽取一个字,并将其复制到 PC 中,覆盖原来的值