CPU总体架构
总线按照用途分为系统总线、存储器总线、IO总线。
也可以这样分类看:
ITCM对于单核使用,类似CPU Cache,可以提醒性能。
Hello world的一生
1:输入源码
2: 保存到磁盘的hello.c
磁盘都是按照字节存储的,不同上下文中,可以按照不同含义解析。
文本文件每个字节按照ascii码,同时包含\n\t<space>等(10进制)
Linux使用命令:
#十进制打印
od -Ax -tcu1 helloworld.c
#如果采用16进制,逐个字节打印ASCII字符
od -Ax -tcx1 helloworld.c
3:编译
gcc -o helloworld helloworld.c
后面再补充细节,这里重点说明CPU架构
4:运行
结合CPU架构图,执行如下:
1:shell是外壳程序,当键盘输入helloworld,通过USB接口通过IO总线和系统总线,读入到CPU的寄存器;CPU通过系统总线和存储器总线写入到主存。
2:当键盘输入回车时,外壳程序直到输入结束,通过一系列指令加载helloworld文件,把目标文件代码和数据从磁盘复制到主存。
3:处理器执行代码指令,把主存的Hello world加载到寄存器,再复制到显示设备,显示再屏幕上。
缓存
从helloworld运行看,CPU执行很快,但是IO设备和内存速度很慢,需要缓存。
执行时间如下:
1cycle=0.3纳秒
L1 Data cache=1纳秒
L2 Data cache=4纳秒
RAM= 80+纳秒
读写硬盘15+毫秒
互联网访问 80毫秒
抽象
helloworld程序没有直接访问键盘、寄存器、磁盘和主存,依靠是操作系统提供的服务。
操作系统可以看成应用软件和硬件之间的一层软件,屏蔽处理器、主存、IO设备差异。
操作系统提供进程、虚拟内存VM和文件,对应如下功能。
进程
进程是操作系统对正在运行程序的一种抽象。一个系统可以运行多个进程,好像可以独立使用硬件(实质并发,即交错执行)。多个进程是切换,上下文(寄存器、PC指针、缓存)切换。
Shell壳到helloworld程序切换,执行完后切回shell,采用上述流程。
虚拟内存
操作系统对于每个进程提供一个抽象,独占使用内存,包含代码段、数据段、共享库、堆、栈、内核态等
文件
文件是对于I/O设备的抽象,是一个字节序列。
跨系统的网络通讯
并发和并行
单处理器下多线程并发
超线程下不依赖数据的并行(PC和寄存器有多份,但是ALU只有1份)
多处理器下多线程的并行(每个处理器独立PC、寄存器和ALU)
流水线保证指令级并行
单指令多数据并行SIMD