目录
1 简介
从概念上讲,一台计算机可以抽象为下图的模型
CPU,内存以及I/O设备都由一条系统总线连接起来并通过总线与其他设备通信
2 CPU
CPU是计算机的大脑,它从内存中取出指令并执行
2.1 CPU的工作流程
从内存中取出指令,对取出的指令进行解码,执行,CPU就是一直不断的重复这个过程
2.2 超标量CPU
流水线作业效率不高,于是就引入了超标量CPU
超标量CPU是这样工作的,多个取值和解码同时进行,取值解码完成后的指令会进入缓冲区,缓冲区对应多个执行单元,每当缓冲区中有指令且有空闲的执行单元时,就会从缓冲区取出指令进入执行单元执行。
2.3 内核态和用户态
多数CPU多有两种模式,内核态和用户态
在内核态运行时,CPU可以执行指令集的每一条指令,使用硬件的全部功能
在用户态运行时,CPU只能执行指令集的一个子集和访问所有功能的一个自己
在台式机和服务器上,操作系统在内核态运行。在大多数嵌入式系统中,一部分操作系统在内核态运行,其余部分在用户态运行
3 存储器
3.1 存储器分为四个层次
寄存器、高速缓存、内存、硬盘
3.2 寄存器
寄存器存在于CPU中,访问和CPU一样快,没有时延
3.3 高速缓存
常用的高速缓存行放置在CPU内部或非常接近CPU的位置
3.3.1 高速缓冲命中
当程序需要读取一个字时,检查所需要的字是否在高速缓存中,如果在高速缓存中,称为高速缓存命中
如果高速缓存未命中,就要通过总线,把访问请求传递到内存,这带来了访问速度的下降
PS:缓存
大量的资源存在于计算机存储器的某一处,其中一小部分资源会被频繁的用到,把频繁用的资源放到比大量资源更高层次的存储器中,这就是缓存
计算机在读取文件时,将硬盘中频繁用到的文件放入到内存中,这就是缓存的应用
使用缓冲时我们需要考虑几个问题
1)何时把资源放入缓存中
2)把资源放在存储器的那一层上
3)在缓存满了时,把什么内容从缓存中移走
4)移走的内容又该放到何处
3.3.2 内存
内存通常称为随机访问存储器(RAM),速度比磁盘快,程序先进入这里执行,内存具有断电数据消失的特效。
PS:闪存
速度介于内存和磁盘间,断电后数据不消失
3.4 磁盘
3.4.1 磁盘工作流程
像是老式的唱片机,一个又一个重叠起的圆盘,每个圆盘上配有一个指针,当从磁盘读取数据时指针不断旋转,读取一段环形区域,这段环形区域叫做磁道。
我们常讲硬盘的转速,多少MB每秒,从磁盘的工作流程上我们可以了解到,磁盘的转速就是磁盘臂旋转的速度。
3.4.2 固态硬盘
固态硬盘和普通磁盘不是同一种工作方式,固态硬盘其实是一种闪存
3.4.3 虚拟内存
计算机的虚拟内存机制就是将磁盘中需要反复读取的内容放到内存中,加快计算机的速度,也是一种缓存的应用
4 I/O设备
I/O设备分为两个部分 设备控制器和设备本身
4.1 设备控制器
设备控制器是插在电路板上的一块芯片和一组芯片,他是操作系统和设备之间的桥梁,配合操作系统操作设备,操作系统对它发出命令,它对操作系统的命令进行复杂的转换,控制设备。
4.2 设备本身
硬盘、键盘、鼠标、显示器等等
设备本身有一个相对简单的标准化接口,比如创建的SATA硬盘,SATA就是设备接口名
4.3 设备驱动程序
操作系统如何操作设备控制器呢,这个答案就是在操作系统上安装设备控制程序,设备控制程序负责与控制器对话,发出命令,接受响应
4.4 实现输入输出的三种方式
1)忙等待:用户程序发起一个系统调用,内核将其翻译成一个对应设备驱动程序的过程调用。设备驱动程序启动I/O,循环的检查设备是否完成工作,当完成工作后,设备驱动程序将设备返回的数据送到指定的位置,随后操作系统将控制返回给调用者。
缺点:显而易见,在设备执行完成前,要一直占用CPU,CPU要一直循环的检查,这期间用户什么也不能干
2)中断控制:设备驱动程序启动设备,让该设备在操作完成时发出一个中断,驱动程序将中断传递给操作系统。
3)直接存储器访问:为I/O操作使用一种特殊的芯片(DMA),它无需持续的CPU干预,直接控制内存和控制器之间通信,操作完成后,也发出中断。
5 总线
一条连接计算机上所有硬件的线
5.1 PCI总线
多个设备使用同一条导线传输数据,当多个设备需要发送数据时,仲裁器决定哪个设备可以使用总线(已过时)
5.2 PCIe总线
端到端的链路,即每个设备都拥有单独的一条导线用来发送数据
6 启动计算机
学完了计算机相关的硬件知识,我们来了解一下启动计算机时,计算机内部是如何工作的
首先,BIOS开始运行,它扫描I/O设备,存储器是否安装正常,接着扫描出总线上的所有设备,随后从硬盘中找出一个启动装载模块,这个启动装载模块负责启动操作系统(WINDOWS/LINUX),然后,操作系统询问BIOS获得每种设备的配置信息,操作系统检查对应设备的驱动程序是否安装正常,如果全部正常,操作系统将他们调入内核,创建需要的所有进程,在终端上启动登录程序。