计算机最早可以起源于图灵计算机
现代的计算机大部分基于冯诺依曼模型,冯诺依曼模型将计算机分为五大部分,输入设备--控制器--运算器--存储器--输出设备,cpu与内存通过总线进行数据交互。
cpu的组成
控制单元:编译并分配指令,直接操作cpu的语言有汇编、等,使用cpu出厂时设置的硬件原语
运算单元(ALU):根据控制单元的命令对数据进行算法运算和逻辑运算等操作,属于指令的执行者
存储单元:存放数据和指令的地方,包括cpu内存与寄存器
cpu
cpu的高速缓存
cpu遵从摩尔定律,即每隔18个月性能翻一倍,而内存等硬件的发展较慢,cpu的效率需要数据的高速存取,为了提高cpu的工作效率,在cpu内部划分了三级缓存
cpu示例
插槽:目前支持单个cpu
四核八线程:是指这个cpu有四个物理核,每个物理核又有两个逻辑核
缓存:三级缓存的大小,l1逻辑核独有,l2属于物理核区域,逻辑核共享,l3物理核共享
- 读写速度:寄存器>l1>l2>l3>内存
- 离cpu的距离:寄存器<1<l2<l3<内存
- 内存大小:寄存器<1<l2<l3<内存
cpu在查找数据时会从寄存器依次向下直到内存,在内存中获取到数据后会依次向上备份最后交由cpu使用,存取数据会将缓存行锁住,遵循两大原则
-
空间局部性原则:默认目前使用的数据周围的数据也会被使用到
计算机存储数据的最小单元为缓存行(cacheLine)大小为64B,大数据可以跨行存储,运算时一般会将较大的聚合量数据拆分成标量进行操作 -
时间局部性原则:默认目前使用的数据近期很可能会再次被使用
使用完的数据并不会立即从内存中删除掉
cpu的安全性
计算机将进程的安全等级分为4种,ring0-ring3
以32位系统为例,寻址空间为2的32次方,空间大概为4个G,为了程序运行的安全隔离和稳定,cpu会将内存分为两部分内核空间(1G)和用户空间(3G),目前windows和linux系统内核空间的安全等级为ring0,用户空间的安全等级为ring3。
线程的状态切换与上下文切换
不同的空间中状态分为用户态和内核态,当线程操作的安全等级切换时就会发生用户态与内核态的相互转换成为状态切换
cpu的单核可以同时处理多个线程,当线程被分配的运行时间结束切换到别的线程时,称为上下文切换
线程模型
- 内存线程模型(KLT):
由内核实现线程的状态切换和上下文转换
速度低于ULT
线程阻塞不会引起进程阻塞 - 用户线程模型(ULT):
由应用管理线程
内核对线程状态无感知,无状态切换
执行速度更快
线程阻塞会导致整个进程阻塞
进程与线程:进程是cpu资源分配的最小单位,线程是调度cpu的最小单位,也成为轻量级进程,一个进程包含多个线程
虚拟机指令集架构
- 栈指令集架构:
a. 设计与实现更简单
b. 使用零地址指令分配
c. 运行依赖于操作栈,可移植性强
d. 指令集更小 - 寄存器指令集架构:
a. 使用二级制指令集
b. 指令集以一地址指令,二地址指令,三地址操作指令为主,
c. 操作依赖于硬件,可移植性差
d. 完成一项操作需要的指令更少