计算机硬件构成与功能
根据冯·诺依曼思想,计算机结构必须包含:运算器(CPU)、控制器(控制单元)、存储设备(内存,硬盘),总线,以及输入输出设备,而现代计算机结构中把计算单元和控制单元都被集成到了CPU中
CPU(Central Processing Unit,中央处理器)
**是计算机最重要的组成部分之一,主要功能是执行程序中的指令。**CPU的结构一般包含以下三个部分:
- 控制单元(Control Unit,CU):控制单元负责从内存中获取/解码指令、控制数据的流动、以及跳转到指令的正确位置等。控制单元通常被认为是CPU的大脑。
- 算术逻辑单元(Arithmetic Logic Unit,ALU):算术逻辑单元执行CPU中的数学运算和逻辑运算,例如加法、减法、乘法、除法等运算。
- 寄存器(Registers):寄存器是一些高速缓存的存储区域,用于存储CPU需要快速访问的数据,例如指令指针、程序计数器Program Counter,PC)、累加器、标志寄存器等。
除了上述主要部分,CPU还包括高速缓存(Cache)、总线(Bus)和时钟(Clock)等组成部分。高速缓存用于提高CPU和内存之间的数据传输速度,总线用于传输数据和指令,时钟用于控制CPU中各部分的运行速度,保证各部分的同步运行。
控制单元
**负责从内存中获取执行指令。**当进程启动时,操作系统会将进程的代码段载入到内存中的某个位置,并将该位置的内存地址存储在CPU的指令指针寄存器中。当CPU要执行下一条指令时,控制单元会从PC中读取当前指令的地址,然后通过总线将地址发送给内存。内存会将指定地址中的指令读取到CPU中的指令寄存器中,然后控制单元会执行该指令。具体如下:
- 取指令:控制单元从内存中获取下一条要执行的指令,指令地址存储在PC中。
- 解码指令:控制单元对获取的指令进行解码,确定需要执行哪些操作,例如读取寄存器或者存储器。
- 执行指令:控制单元执行指令,并根据指令的结果更新状态寄存器和其他寄存器的值。
- 循环执行:重复执行以上步骤,直到程序执行完成或者出现错误。
注:虽然控制单元获取的指令是二进制形式的机器代码,但是CPU内部的电路并不能直接识别并执行这些指令。因此,控制单元需要对获取的指令进行解码,将其转换为对应的控制信号,以控制CPU内部的各个电路完成特定的操作。
算术逻辑单元
**ALU接收控制单元的指令,执行算术和逻辑操作,并将执行结果存储回寄存器中。**细节如下:
当控制单元从内存中获取到一条指令时,会将其分发给ALU进行执行。ALU的输入通常来自于寄存器文件中的寄存器。控制单元会从指令中提取操作数,并将其存储在寄存器中,然后将寄存器的编号发送给ALU。ALU根据指令从寄存器中读取数据,并进行相应的算术或逻辑操作。执行结果存储在另一个寄存器中,以供后续的指令使用。
储存单元:
用于存储正在运行的程序和数据的主要硬件组件之一。当计算机启动时,操作系统和其他关键程序会被加载到内存中。程序在执行过程中需要从内存中读取数据和指令。
总线:
CPU通过内存总线读取内存数据,I/O总线用于连接CPU和其他外部设备,例如硬盘、网卡等。
- 内存总线:内存总线的带宽决定了CPU读写内存的速度,对系统的性能影响非常大。
- I/O总线:I/O总线的带宽影响着系统的输入输出速度。
进程启动过程
进程启动时,操作系统会为进程分配内存空间、加载代码和数据、初始化进程环境。进程启动后会进入就绪状态,等待操作系统分配CPU时间片。当操作系统选择该进程来执行时,控制单元会按顺序读取代码并执行指令,直到进程让出CPU执行权、执行完毕或出现错误。
- 分配进程所需的内存空间:操作系统会为进程分配一定量的内存空间,用于存储进程代码、数据和堆栈等信息。这些内存空间可以来自物理内存或虚拟内存。
- 加载进程代码和数据:操作系统会将进程的代码和数据从磁盘等存储设备中读取到内存中,以便进程能够执行这些代码和访问这些数据。
- 初始化进程环境:操作系统会为进程创建一个进程控制块(PCB),并初始化该进程的上下文环境,包括进程状态、程序计数器、堆栈指针、寄存器等。此外,操作系统还会为进程分配其他资源,如文件描述符、套接字等。
- 分配 CPU 时间片:操作系统会为进程分配一定的 CPU 时间片,允许进程在该时间片内执行一定的计算任务。
- 进入就绪状态:进程启动后,它会进入就绪状态,等待操作系统分配 CPU 时间片以便执行计算任务。
- 调度进程:当操作系统需要选择一个进程来执行时,它会使用进程调度算法从就绪队列中选择一个进程,并将 CPU 时间片分配给该进程。
- 执行代码:抢夺到CPU的调度权后,系统会加载该进程的PCB块到CPU中,然后执行代码,细节如下:
- 控制单元会从PC中获取将要执行的指令的内存地址,将内存地址发送到内存控制器
- 然后内存控制器通过内存总线将指令读取到寄存器中
- 控制单元通过寄存器获取到指令后分发给ALU进行执行,并根据指令的结果更新状态寄存器和其他寄存器的值。
- 循环执行:控制单元一直进行第七个步骤执行代码
- 进程停止:进程直到让出CPU执行权或进程执行完毕或者进程报错停止为止,进程结束
- 清除进程数据:操作系统会释放进程所占用的内存空间、文件句柄等资源,将进程标记为“已终止”,并从进程调度队列中移除该进程,使其不再被调度执行,释放PCB,到此为止该进程的生命周期就此结束
注一:**控制单元读取数据:**当CPU执行指令需要读取数据时,控制单元会从指令中解析计算出实际的物理地址,然后再通过内存总线向内存发送读取请求,请求读取指定地址处的数据。内存控制器收到请求后,会在内存中查找相应的地址,读取出对应的数据,并通过内存总线将数据传输回CPU,最后由数据寄存器接收数据。这个过程通常被称为“取数指令周期”或“数据访问周期”,它是指令执行过程中的一个重要步骤。
注二:**进程中的三级缓存:**在上述进程执行过程的描述中,关于三级缓存的描述,CPU首先会从主存储器中加载指令和数据,如果需要访问的数据已经存在于处理器的三级缓存中,则可以直接从三级缓存中读取,而不需要再次从主存储器中获取,这样可以显著降低访问数据的时间。如果数据不在三级缓存中,则需要从主存储器中读取,但这个过程也会被三级缓存优化,因为三级缓存可以在读取主存储器数据时,将数据块加载到缓存中,这样如果需要再次访问这些数据时,就可以直接从缓存中读取,而不必再次访问主存储器,从而提高程序执行效率。
进程切换过程
当操作系统切换进程时,需要保存当前进程的所有状态。所以操作系统通常会将进程的状态信息存储在该进程的控制块(Process Control Block, PCB:是一个数据结构,含了操作系统需要保存和恢复进程状态的所有信息,如进程的程序计数器、寄存器值、打开的文件等)中。
PCB存储在操作系统的内存空间/内核空间/内核态中,每个进程都有一个PCB。当操作系统切换进程时,它会将当前进程的PCB保存到内存中,并加载下一个要执行的进程的PCB。这个过程被称为上下文切换。
注:不存放到进程内存/用户空间/用户态中,原因有两点:
首先:如果PCB存储在进程内存空间中,那在进程创建/终止时,进程内存空间会被分配/释放,则PCB也需要被创建/释放。这样会增加操作系统管理进程的复杂度和开销。
其次:如果PCB存储在进程的内存空间中,那么进程可以通过修改自己的PCB来欺骗操作系统,从而破坏系统的稳定性和安全性。
文章详细介绍了计算机硬件的核心组成部分,包括CPU的结构,如控制单元、算术逻辑单元和寄存器的功能。CPU如何从内存中获取并执行指令,以及内存、总线和高速缓存的角色。还讨论了进程的启动、执行和切换过程,强调了上下文切换和PCB的作用。
3761

被折叠的 条评论
为什么被折叠?



