计算机系统由硬件和系统软件组成
系统是硬件和软件相互交织的集合体
理解编译过程的目的
- 优化程序性能
- 理解链接时出现的错误
- 避免安全漏洞
系统的硬件组成
总线:
贯穿系统的电子管道,携带信息字节并在各个部件间传递。
传送定长的字节块——字(Word).
字节长是一个基本的系统参数。如4个字节,8个字节
I/O 设备
输入/输出设备是系统与外部世界的联系通道。
每个I/O设备通过一个控制器或适配器与I/O总线相连。
控制器—>主板芯片组
适配器->主板插槽上的卡
主存
临时存储设备,用来存放程序和程序处理的数据
物理:DRAM
逻辑:线性字节数组
处理器 CPU
执行主存指令的引擎
不断执行指令
高速缓存
减少主存与CPU的直接数据访问
高速缓存用来存放近期可能会需要的信息
物理:SRAM
存储器层次结构
存储器 |
---|
寄存器 |
L1 |
L2 |
L3 |
DRAM |
SSD |
HDD |
从上倒下访问速度越来越慢
OS管理硬件
操作系统
OS: 应用程序与硬件之间的中间层
- 防止硬件被应用程序滥用
- 提供API来控制复杂的低级硬件设备
- 通过进程、虚拟存储器、文件来实现应用程序与硬件之间的交互
进程
对正在运行的程序的一种抽象。
CPU一个核只能执行一个进程,当新的进程需要执行时,会进行上下文切换。
上下文: 操作系统保持跟踪进程运行情况所需的所有状态信息
线程
每个线程运行在进程的上下文中,共享同样的代码和全局数据。
多用于网络服务器并发处理请求。
虚拟存储器
给每个进程提供一层独占主存的抽象。
虚拟地址空间 | |
---|---|
内存虚拟内核存储器 | OS内核 |
栈 | 在运行时动态的扩展大小 |
共享库 | 共享代码库 |
堆 | 在运行时动态的扩展大小 |
程序代码和数据 | 可执行文件 |
文件
字节序列
I/O设备都可以认为是文件。
网信也可以视为文件
并发和并行
Concurrency 并发
- 计算机做的更多
- 同时具有多个活动的系统
超线程,同时多线程,允许一个CPU执行多个控制流的技术,简单的说就是当A线程取数据的时候,B线程立马执行,在单个周期上进行判断应该执行那个线程,如果没有超线程技术,则需要在多个时钟周期内切换
Parallelism 并行
- 计算机做的更快
- 用并发时系统运行的更快
- 可以在系统的多个层次上使用
- 指令级并行
- 单指令多数据并行
抽象
抽象时计算机领域的重要概念
文件对I/O抽象
虚拟存储器对程序存储器抽象
进程对运行的程序抽象
虚拟机对计算机的抽象
Hello World程序运行的过程
源文件通过编译系统经过如下步骤生成源程序
文本->预处理->编译->汇编-> 连接->源程序
.c -> .i -> .s -> o -> binary
通过Shell运行,程序加载到主存,从main开始执行,通过指令Hello World执行如下步骤显示到屏幕上
主存->寄存器->显示设备
源程序: 由0和1组成的位(bit)序列,8个位被组织成一组,为1个字节,每个字节表示程序中某个文本字符。
区分不同数据对象的唯一方法是根据这些数据对象的上下文
Shell: 命令行解释器
Compilation System