1.编译系统
程序示例
#include<stdio.h>
int main(){
printf("hello world");
return 0 ;
}
生成命令:
gcc -o hello hello.c
编译系统工作流程:
1.预处理:读取头文件插入代码中
2.编译:进行语法等等分析
3.汇编:翻译成机器指令
4.链接:合并代码,得到可执行目标文件
2.硬件架构图
程序执行流程:
1.通过键盘输入内容,内容存入到寄存器,处理把内容放入内存中。
2.加载可执行文件
3.数据直接从磁盘到达内存
4.处理器执行主函数的代码
3.设备容量
设备种类 | 存储容量 |
---|---|
寄存器文件 | 100~1000B |
内存 | 1~100GB |
磁盘 | 1~1000TB |
Cache一般有三级高速缓存,分别为L1,L2和L3,速度依次递减。
4.操作系统
软件:操作系统,应用程序
硬件:处理器,内存和I/O设备
进程:一个进程由多个线程组成,
例子:一个微信程序就是一个进程,而我们在微信里一边文字聊天边视频聊天、边传输文件就是三个线程同时进行.
虚拟内存:虚拟内存能够创建一个连续更大的空间给进程使用,出现的原因是由于主存的空间是有限,当运行多个进程或者一个进程需要更大的空间进行存储运行,主存显然是不够的,这个时候就需要更大更便宜的磁盘进行保存一部分数据
三个定律
1.Amdahl定律:当我们对系统的某个部分加速时,其对系统整体性能的影响取决于该部分的重要性和加速程度.
2.Gustafson定律:系统优化某部件所获得的系统性能的改善程度,取决于该部件被使用的频率,或所占总执行时间的比例。
3.Sun-Ni定律:记α是某任务无法并行处理部分所占的比例.假设该任务的可并行部分随着处理器个数n按照因子G(n)缩放,则对任意n,相比于1个处理器,能够取得的加速比S*(n)满足:
并发与并行
线程级并发:当多个线程在操作的时候,如果系统只有一个CPU,同一时刻就只有一条线程指令在执行,但是各个线程指令被快速的轮换执行,这就是的宏观上看起来是多个线程在同时执行
指令级并行: 指令级并行是指存在于指令一级即指令间的并行性, 主要是指机器语言一级, 如存储器访问指令、整型指令、浮点指令之间的并行性等。
单指令多数据并行:现代处理器拥有特殊的硬件部件,允许一条指令产生多个并行的操作