计算机体系相关知识记录

1、组成计算机的五部分

(1)控制器

计算机的控制系统,是计算机的神经中枢,指挥着计算机中各个部件自动协调工作。
在控制器的控制下,计算机能够自动按照程序设定的步骤进行一系列操作,以完成特定任务。

(2)运算器

计算机的运算系统,计算机中执行各种算术和逻辑运算操作的部件。

(3)存储器

计算机存储系统,是一种利用半导体、磁性介质等技术制成的存储资料的电子设备。是计算机用来存放所有数据和程序的记忆部件。
它的基本功能是按指定的地址存(写)入或者取(读)出信息。
计算机中的存储器可分成两大类:一类是内存储器,简称内存或主存;另一类是外存储器(辅助存储器),简称外存或辅存。
存储器由若干个存储单元组成,每个存储单元都有一个地址,计算机通过地址对存储单元进行读写。
一个存储器所包含的字节数称为存储容量,单位有B、KB、MB、GB、TB等。

(4)输入设备

是向计算机中输入信息(程序、数据、声音、文字、图形、图像等)的设备。
常见的输入设备有:键盘、鼠标、图形扫描仪、触摸屏、条形码输入器、光笔等。
外存储器也是一种输入设备。

(5)输出设备

是计算机硬件系统的终端设备,用于接收计算机数据的输出显示、打印、声音、控制外围设备等。

2、计算机架构

(1)冯诺依曼架构

冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同,如英特尔公司的8086中央处理器的程序指令和数据都是16位宽。
数学家冯·诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备),这套理论被称为冯·诺依曼体系结构。

(2)哈弗架构

哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。中央处理器首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一步的操作(通常是执行)。程序指令存储和数据存储分开,可以使指令和数据有不同的数据宽度,如Microchip公司的PIC16芯片的程序指令是14位宽度,而数据是8位宽度。

(3)总结

冯诺依曼架构的计算机数据的存储和指令的存储是在同一个存储区,只能取命令和取数据分步骤进行,不能同步进行。
哈弗架构的计算机将数据和指令存放在不同的存储器,通过数据线总线和指令总线可以分别同步进行。

3、多级流水线

本质一个指令的执行要分为多个可独立执行的步骤

1、概念

多级流水线是一种在计算机体系结构、数字电路设计等众多领域广泛应用的技术。它是将一个复杂的任务(如指令执行、数据处理等)分解为多个子任务,这些子任务就像工厂生产线上的不同工序一样,在不同的阶段(级)依次执行。每个阶段都有专门的硬件单元负责处理对应的子任务,各个阶段之间通过流水线寄存器连接,使得数据能够像流水一样在各个阶段之间顺畅地传递,从而提高整体的处理效率。
工作原理
以计算机 CPU 中的指令流水线为例。一条指令的执行通常可以分为取指(从内存中取出指令)、译码(分析指令的操作码和操作数等信息)、执行(进行实际的算术逻辑运算等操作)、访存(访问内存读取或写入数据)和写回(将执行结果写回到寄存器等存储单元)等多个阶段。
在多级流水线中,当第一条指令进入取指阶段后,第二条指令就可以紧接着进入流水线的取指阶段,而第一条指令进入译码阶段。这样,多条指令在不同的阶段同时执行,就好像流水线上的产品在不同的工序同时被加工一样。只要每个阶段的处理时间相对均衡,且各个阶段之间的衔接足够高效,就可以在单位时间内处理更多的指令,提高 CPU 的运行速度。
例如,假设每个阶段需要 1 个时钟周期来完成,没有流水线时,一条指令执行完所有 5 个阶段需要 5 个时钟周期。但在 5 级流水线中,从第 5 个时钟周期开始,每个时钟周期都能完成一条指令的执行,大大提高了指令的吞吐率。

2、优点

提高性能:通过并行处理多个子任务,能够有效提高系统的吞吐量。就像在生产线上,同时有多个产品在不同的工序进行加工,总的生产效率得到了提升。在 CPU 中,多级流水线使得指令的执行效率显著提高,从而加快了计算机的运行速度。
资源利用率高:每个阶段的硬件单元可以专门用于处理特定的子任务,这样可以充分利用硬件资源。例如,取指单元在每个时钟周期都可以取指,而不是像非流水线结构那样,取指单元在指令执行的其他阶段处于闲置状态。

3、缺点

增加硬件复杂度:为了实现流水线,需要增加额外的流水线寄存器来存储各个阶段之间的数据,还需要复杂的控制逻辑来确保数据在各个阶段之间正确地流动。这些额外的硬件会增加芯片的面积和成本。
存在流水线冒险:这是多级流水线的一个重要问题。流水线冒险主要包括结构冒险、数据冒险和控制冒险。
结构冒险:是指硬件资源不能同时满足所有流水级的要求。例如,当指令的取指和访存阶段都需要访问内存,而内存只有一个端口时,就会出现结构冒险。
数据冒险:是由于指令之间的数据相关性引起的。比如,一条指令需要使用前一条指令的执行结果,但在流水线中,前一条指令的结果可能还没来得及写回,后一条指令就已经进入了需要使用该结果的阶段。
控制冒险:主要是由分支指令等引起的。当遇到分支指令时,流水线可能已经预取了分支指令后面的指令,但如果分支预测错误,这些预取的指令就需要被丢弃,从而影响流水线的效率。
应用场景
CPU 设计:现代 CPU 广泛采用多级指令流水线来提高指令执行的速度。例如,英特尔酷睿系列处理器采用了深度流水线技术,通过十几级甚至更多级的流水线来优化指令执行,提高处理器的性能。
数字信号处理(DSP):在 DSP 芯片中,对于信号的滤波、变换等复杂操作,多级流水线可以将这些操作分解,高效地处理大量的数字信号。比如在音频处理中,多级流水线可以同时处理多个音频样本的不同处理阶段,如采样、量化、滤波等。

4、为啥LINUX操作系统可以运行在硬件资源不同的计算机上?安装系统时是如何识别硬件资源的种类和数量的?

一、BIOS(基本输入输出系统)/UEFI(统一可扩展固件接口)的协助
启动阶段的信息传递
当计算机启动时,BIOS/UEFI 是最先被加载并运行的程序。它会对计算机的硬件进行初步的检测和初始化。例如,BIOS 会扫描主板上的各种接口,如 PCI(周边元件扩展接口)、PCI - E(PCI Express)等,以确定连接在这些接口上的硬件设备。
对于像 CPU(中央处理器)、内存等关键硬件,BIOS 会读取它们的基本信息。以内存为例,BIOS 会检测内存的容量、类型(如 DDR3、DDR4 等)和频率。这些信息会被存储在 BIOS 的特定数据区域中,在系统安装过程中,安装程序可以通过标准的 BIOS 调用接口来获取这些信息。
UEFI 则在 BIOS 的基础上有了进一步的发展。它使用更先进的驱动模型和数据结构来管理硬件。UEFI 固件可以提供更详细的硬件信息,包括硬件的固件版本等。例如,对于一块支持 UEFI 的硬盘,UEFI 可以提供其型号、容量、分区格式等详细信息,方便系统安装程序更好地识别和处理。
硬件中断和设备标识
BIOS/UEFI 会为硬件设备分配中断请求(IRQ)等资源。在早期的计算机系统中,IRQ 是硬件设备与 CPU 通信的重要方式。例如,键盘、鼠标等输入设备都有对应的 IRQ。当系统安装程序运行时,它可以通过 BIOS/UEFI 获取这些设备的 IRQ 分配情况,从而确定硬件的种类和连接方式。
设备还会有唯一的标识信息。例如,每一块网卡都有一个 MAC(媒体访问控制)地址,BIOS/UEFI 可以将这些标识信息传递给系统安装程序。通过 MAC 地址,系统可以识别网络设备的类型(如以太网网卡、无线网卡等)和数量。在安装操作系统的网络配置部分,这些信息就非常有用。
二、硬件设备自身的固件和驱动程序支持
内置固件信息
许多硬件设备本身带有固件。以显卡为例,显卡固件包含了显卡的型号、显存容量、支持的图形处理功能(如支持的 DirectX 或 OpenGL 版本)等信息。在系统安装过程中,安装程序会尝试与显卡的固件进行通信,获取这些关键信息。
对于存储设备,如固态硬盘(SSD),其固件可以提供存储容量、读写速度参数、采用的闪存芯片类型(如 TLC、MLC 等)等信息。这些信息有助于系统安装程序确定如何对存储设备进行分区和格式化等操作。
设备驱动程序的早期加载(部分情况)
在一些操作系统的安装过程中,会包含一些基础的硬件驱动程序。这些驱动程序在安装初期就会被加载,以帮助识别硬件。例如,在安装 Windows 操作系统时,安装程序自带了一些通用的 USB(通用串行总线)控制器驱动。当计算机通过 USB 接口连接了外部设备(如 U 盘、USB 键盘等)时,这些早期加载的驱动程序可以识别出 USB 设备的类型,并将相关信息反馈给安装程序。
对于一些比较新的硬件设备,可能需要用户在安装过程中提供额外的驱动程序。例如,某些高端的 RAID(独立磁盘冗余阵列)控制器,在安装操作系统时,用户需要通过软盘、光盘或者 USB 设备提供专门的驱动程序,这些驱动程序一旦加载,就会向安装程序详细说明硬件设备的配置情况,包括连接的硬盘数量、RAID 级别等信息。
三、系统安装程序的扫描和检测机制
基于硬件接口标准的扫描
系统安装程序会按照已知的硬件接口标准进行扫描。例如,对于计算机的内部存储设备,安装程序会扫描 SATA(串行高级技术附件)接口和 IDE(集成设备电路)接口(虽然 IDE 接口在现代计算机中已经较少使用)。通过扫描这些接口,安装程序可以发现连接在上面的硬盘、光驱等设备。
对于外部设备接口,如 USB 和 Thunderbolt(雷电接口),安装程序会定期轮询这些接口,以检测是否有新的设备插入。当检测到新设备时,安装程序会尝试通过设备描述符来确定设备的种类。设备描述符是一种遵循特定标准的数据结构,其中包含了设备的类型(如打印机、存储设备等)、制造商信息、产品型号等内容。
资源分配和枚举过程
在安装过程中,系统安装程序会对硬件资源进行分配。例如,它会为每个硬件设备分配内存地址空间、I/O(输入 / 输出)端口等资源。在这个过程中,通过记录分配的情况,安装程序可以了解到硬件设备的数量。以内存为例,安装程序会根据 BIOS 提供的内存容量信息,划分出一部分内存用于系统内核的加载和运行,同时为其他硬件设备(如显卡的显存共享部分)分配内存。通过统计这些分配操作,就可以知道内存资源的分配情况以及硬件设备对内存的需求,从而确定硬件设备的数量和种类。

5、寄存器是什么

寄存器是一段特殊的内存 ,寄存器通过存储器映射可以向内存一样寻址和访问,它实际上是硬件资源的一部分,它连接到硬件电路,所以对寄存器的写会变成对应的电路的电压,通过门电路,这种电压的改变对应到物理电路中。
每个外设是一块独立的时序电路,它内部有有一个叫D触发器的电路,这个电路可以保存高低电平,一个8bit的外设寄存器就是有8个D触发器,D触发器连接CPU的总线,通过存储器映射,CPU可以通过地址访问D触发器,所以CPU可以通过总线向D触发器写入高低电平(0 和 1),**同时,**D触发器连接外设内部的门电路,CPU向D触发器写0或1,D触发器保存值,并通过这些值(给高低电平)控制门电路的开关,从而改变整个外设时序电路的状态。这就是为啥我们像外设地址写值可以控制外设的状态的根本原因。(2025.03.20)

6、OS 内核模型

1、独立模型(Linux)

整个内核作为一个独立的完整的程序运行。所有的功能全部由一个程序提供。

2、微内核模型(Minix 、QNX)

将内核功能划分为多个进程(多模块),作为系统服务的服务器,比如:有个进程是内存管理,当用户需要内存时向它请求空间,它返回分配的空间信息。就好像 浏览器的服务器一样(C/S)。

3、混合模型

微内核 + 独立内核

7、内存屏障

1、内存屏障(Memory Barrier)

内存屏障(Memory Barrier),也被叫做内存栅栏,是一种 CPU 指令,用于控制内存操作的顺序,保障数据的可见性与一致性。在现代计算机系统里,为了提升性能,CPU 与编译器会对指令进行重排序,不过这在多线程或者多处理器环境中可能引发问题,内存屏障就用来解决这些问题。

2、重排序问题

在多线程编程里,编译器和 CPU 可能会对指令进行重排序,从而提高程序的执行效率。重排序可以分为以下三种类型:
编译器重排序:编译器为了优化代码,可能会对指令的顺序进行调整。
指令级并行重排序:现代 CPU 为了提高指令执行效率,会对指令进行并行执行和重排序。
内存系统重排序:由于 CPU 缓存的存在,内存操作的顺序可能与程序中的顺序不一致。

3、内存屏障的作用

内存屏障的主要作用是限制指令重排序,确保某些内存操作在其他内存操作之前或之后执行。具体来说,内存屏障可以分为以下几种类型:
写屏障(Store Barrier):确保在写屏障之前的所有写操作都在写屏障之后的写操作之前完成,并且这些写操作的结果对其他处理器可见。
读屏障(Load Barrier):确保在读屏障之后的所有读操作都在读屏障之前的读操作之后完成,并且这些读操作能看到其他处理器写操作的最新结果。
全屏障(Full Barrier):同时具备写屏障和读屏障的功能,确保在全屏障之前的所有内存操作都在全屏障之后的内存操作之前完成。

8、死锁

在操作系统中,死锁(Deadlock) 是指多个进程因竞争资源或通信而相互等待,导致所有进程都无法继续执行的状态。

1、死锁形成的条件

1. 互斥条件(Mutual Exclusion)

定义:系统中存在至少一个资源被进程 独占使用,即该资源在一段时间内只能被一个进程占用,其他进程若请求该资源,必须等待直到资源被释放。
示例:打印机、磁带机等独占设备,同一时间只能被一个进程使用。

2. 持有并等待条件(Hold and Wait)

定义:进程在持有至少一个资源的同时,又 申请新的资源,且在等待新资源分配期间,不释放已持有的资源。
示例:进程 A 已获得文件资源 R1,此时又申请打印机资源 R2,在等待 R2 分配时,进程 A 仍继续占用 R1。

3. 不可抢占条件(No Preemption)

定义:资源只能被持有它的进程 主动释放,而不能被其他进程或操作系统 强行抢占。
示例:进程 B 持有内存资源 M,即使进程 C 优先级更高,也无法强制剥夺进程 B 的内存资源 M,只能等待进程 B 主动释放。

4. 循环等待条件(Circular Wait)

定义:存在一个 进程 - 资源的循环链,链中的每个进程都在等待下一个进程所持有的资源。
示例:进程 P1 等待进程 P2 持有的资源 R1,进程 P2 又等待进程 P3 持有的资源 R2,依此类推,最终形成一个环路(如 Pn 等待 P1 持有的资源 Rn)。

2、如何预防死锁

死锁只能预防,一般通过破坏死锁形成的条件,比如超时等待,超时则释放所持有的资源,破坏了持有并等待条件。
破坏不可抢占条件(可以让优先级高的进程抢占优先级低的进程的资源)
坏请求与保持条件(当进程申请不到自己所需要的的资源时,必须释放掉自己所持有的资源)
破坏循环等待条件(进程只能往前申请资源,不能往后申请资源) 如何预防:有序资源分配法、银行家算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值