计算机体系结构重点学习

2024-06-14 00:52

本文主要是介绍计算机体系结构重点学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

从外部I/O与上层应用交互的整体软硬件过程

上层应用发出I/O请求:上层应用程序,如一个文本编辑器、网络浏览器或者任何软件应用,需要读取或写入数据时,会通过调用操作系统提供的API(如文件操作API、网络操作API等)来发出I/O请求。
操作系统层面的处理:操作系统接收到应用程序的I/O请求后,会执行一系列的操作来管理这个请求。这包括确定需要交互的具体I/O设备调用对应的设备驱动程序,以及将请求从用户空间转移到内核空间
设备驱动程序:设备驱动程序是与具体硬件设备通信的软件接口。当操作系统确定了需要交互的设备,它会使用设备的驱动程序来具体操作设备。设备驱动程序了解如何控制特定的硬件设备,并执行如数据传输等操作。
I/O操作执行:驱动程序通过各种控制信号和数据传输协议与硬件设备通信,执行实际的读写操作。这可能涉及到中断请求(IRQ)、直接内存访问(DMA)等机制,以高效地完成数据的传输。
中断和轮询:I/O操作通常会通过中断或轮询的方式来告知操作系统其完成状态。中断方式下,设备在完成操作后会发送一个中断信号给CPU,CPU响应中断,执行中断处理程序;而轮询方式则是操作系统不断检查设备的状态,以确定操作是否完成。
将结果返回给应用:操作完成后,操作系统会处理如数据复制、状态更新等后续任务,然后通过之前的API调用,将结果返回给发起请求的应用程序。
应用程序处理结果:应用程序收到操作系统返回的数据或操作结果后,根据需要进行后续处理。这可能包括更新用户界面、处理数据或生成输出等。
这个过程显示了从上层应用到底层硬件的一系列交互动作,涉及软件(应用程序、操作系统、驱动程序)和硬件(I/O设备)的紧密合作,确保信息能够正确、高效地在系统各部分间流动。

基于LoongArch处理器的Linux操作系统TLB例外过程

TLB例外:TLB(Translation Lookaside Buffer)例外是指处理器在执行程序时,试图访问的虚拟内存地址没有在TLB中找到相应的物理地址映射条目时发生的一种特殊情况。TLB作为一种快速映射虚拟地址到物理地址的缓存,其目的是加速虚拟到物理地址的转换过程。当程序试图访问的地址未在TLB中找到时,即触发TLB例外,此时需要操作系统介入,通过查询页表(Page Table)来处理这个例外,找到或者分配适当的物理地址并更新TLB,以便程序可以继续执行。
TLB重填异常:TLB重填异常是TLB例外的一种具体处理过程,它发生在TLB未命中的情况下。在LoongArch处理器或MIPS处理器等采用软件TLB重填机制的体系结构中,当发生TLB未命中例如由于操作系统只分配了虚拟地址范围而未实际分配物理内存空间时,就会引起TLB重填异常。此时,操作系统的TLB重填异常处理程序会被激活,负责从对应的页表中取得页表项内容填入TLB。如果在处理过程中发现相关的物理页面尚未分配,则会先进行物理页面的分配和页表项的初始化,然后再进行TLB的更新。这确保了后续对该虚拟地址的访问能直接在TLB中命中,不会再次触发异常。
总之,TLB例外和TLB重填异常是虚拟内存管理中处理虚拟地址转换未命中的机制,是操作系统与处理器共同协作处理虚拟内存访问的重要手段。
TLB重填异常是TLB例外中的一种,关系是包含和被包含的关系。TLB重填异常特指因TLB查找未命中而导致的需要重填TLB表项的情况,而TLB例外则是更广义的概念,包括TLB重填异常在内的所有与TLB相关的异常情况。
基于LoongArch处理器的Linux操作系统处理TLB(Translation Lookaside Buffer)例外的过程包括以下几个关键步骤
TLB重填异常的触发:当处理器执行指令需要访问内存时,会首先在TLB中查找虚拟地址到物理地址的映射。如果这个映射不存在于TLB中,就会触发一个TLB重填异常。
异常处理程序的执行:一旦TLB重填异常被触发,处理器会开始执行操作系统中的TLB重填异常处理程序。TLB重填异常处理程序需要执行9条指令,每增加一个级别的页表,只需增加一条LDDIR指令。在这个过程中,异常处理程序会根据需要访问的虚拟地址去检查页表,查找虚拟地址对应的物理地址。

异常处理程序具体操作步骤

异常触发当处理TLB查找不命中时,操作触发TLB重填异常。
记录虚地址信息异常处理程序根据CSR.TLBRBADV中VAddr域记录的虚地址信息。
遍历多级页表程序利用CSR.PGD中得到的页目录表PGD的基址信息,遍历发生TLB重填异常的进程的多级页表。
页表项信息读取从内存中取回页表项信息填入CSR.TLBRELO0和CSR.TLBRELO1的相应域中。
使用TLBFILL指令填入TLB最终用TLBFILL指令将页表项填入TLB。这个过程中,写入TLB的信息来自CSR.TLBRELO0和CSR.TLBRELO1的各个域,以及CSR.ASID中ASID域和CSR.TLBREHI中VPPN域的信息。
上述步骤保证ASID域不变在TLB重填异常处理过程中,软硬件都没有修改CSR.ASID中的ASID域,所以在执行TLBFILL指令时,CSR.ASID中的ASID域记录的就是发生TLB重填异常的进程对应的ASID。
设置TLBREHI中的VPPN域至于CSR.TLBREHI中的VPPN域,在TLB重填异常发生并进入异常入口时,已经被硬件填入了触发该异常的虚地址中的虚双页号信息。

页表遍历和物理地址获取:异常处理程序会遍历页表,寻找虚拟地址对应的页表项。如果页表项在内存中存在,处理程序会从中取得页表项,包括物理页的地址以及相关权限等信息。
更新TLB:一旦物理地址被获取,TLB重填异常处理程序会把虚拟地址到物理地址的映射更新到TLB中,使得后续对相同虚拟地址的访问不会再触发TLB重填异常。
处理其他TLB地址翻译相关的异常:根据recall slice 1的内容,除了TLB重填异常外,LoongArch指令系统下常见的TLB相关异常还包括取指操作页无效异常、load操作页无效异常、store操作页无效异常以及页修改异常。这些异常的处理相似,涉及页表的查找和物理页面的分配,并更新TLB表项。
异常处理完成:处理完成后,异常处理程序会将控制返回给被中断的程序。那个程序现在可以继续执行,由于TLB已被更新,相同的内存访问现在应该可以直接通过TLB进行地址转换,而无需再次触发异常。
通过上述过程,基于LoongArch处理器的Linux操作系统能够有效地处理TLB例外,保障内存访问的正确性和效率。这个过程不仅展示了硬件(TLB和LoongArch处理器)和软件(操作系统的页表管理和异常处理程序)的密切配合,也体现了现代计算机系统在处理内存访问时的复杂性和高效性。

C语言与指令系统的关系

C语言与指令系统的关系是基于如何将C语言的高级语句和操作映射到处理器执行的机器指令上。关系可以从多个方面来理解:
高级语言结构映射:C语言的高级构造,如算术语句、控制流语句(for循环、if语句、switch语句等)可以被直接映射为对应的机器指令或一系列机器指令序列。例如,算术运算语句(如加、减、乘、除)会映射到处理器执行的相应算术指令;for循环和while循环可以转换为条件跳转指令。
内存访问与地址空间映射:C语言中的变量访问和内存操作会映射为指令系统中的内存访问指令。具体的映射方式取决于变量的类型(全局、局部或动态分配的)以及对应的存储位置(如全局变量映射到静态数据区,局部变量映射到堆栈区,动态分配的数据映射到堆区)。
系统和库函数调用:C语言标准库和系统调用(比如文件IO、网络通信等)在指令系统级别上,通常通过特定的机器指令进行系统调用(如中断或陷入指令),进而由操作系统内核处理相应的功能。
外部设备交互:C语言程序中涉及到外部设备交互的部分,比如读取键盘输入、输出信息到屏幕或文件,最终也会转化为特定的指令和操作系统调用,由操作系统通过设备驱动程序与实际硬件设备进行交互。
通过编译过程,C语言代码被转换成对应的机器可执行指令。编译器的优化阶段会改进这些映射,尽可能高效地利用目标处理器的指令系统,包括选择最高效的指令和调整指令顺序以增强流水线和缓存的利用率。

系统初始化时PCI设备的探测过程?

系统初始化时,PCI设备的探测过程主要包括以下几个步骤:
初始化搜索参数:系统在开始探测之前,将初始总线号、初始设备号、初始功能号设为0。这是搜索PCI设备的起点。
构建配置空间地址:使用当前的总线号、设备号、功能号组成一个PCI配置空间地址。PCI配置空间地址用于访问设备的配置寄存器。
访问配置寄存器:通过构建的配置空间地址,访问其0号寄存器,检查其设备号。0号寄存器一般包含了设备的供应商ID和设备ID。
判断是否为有效设备:如果读出的设备号为全1或全0,表示无设备。否则,表示该地址对应一个有效的PCI设备。
BAR空间大小检测:对于有效的PCI设备,检查每个基地址寄存器(BAR)所需的空间大小。这是通过向寄存器写入全1的值,再读出来观察0的个数来实现的,从而得知该BAR所映射空间的大小。
多功能与桥设备检测:检测该设备是否为多功能设备;如果是,则递增功能号,重复步骤2-5的流程。如果该设备为桥设备,配置新的总线号,并使用新总线号从设备号0、功能号0开始递归调用,重复整个探测过程。
设备号递增:如果当前设备号不是31,则递增设备号,继续执行步骤2-6;如果设备号为31,并且总线号为0,则表示本次扫描结束。如果总线号非0,则退回到上一层递归调用。
通过以上步骤,系统可以得到整个PCI总线上的所有设备及其所需的所有空间信息。有了这些信息,就可以对所有的空间从大到小进行合理分配,并通过分配得到的基地址和设备的ID信息,加载相应的驱动程序以正常使用设备。

IO通信中DMA传输过程

在IO通信中,使用直接存储器访问(DMA)传输数据的一般过程如下:
预分配地址空间:首先,处理器或者操作系统为DMA传输预先分配一段连续的内存地址空间,这片空间将用于存放来自IO设备的数据或者存放待发送给IO设备的数据。
设置DMA控制器参数:处理器通过编程设置DMA控制器的相关参数,这些参数包括待传输数据的源地址和目标地址、数据传输的方向(从IO设备到内存,或者从内存到IO设备)、传输的字节大小,以及在传输完成后是否需要向处理器发出中断通知。
DMA控制器执行数据传输:DMA控制器根据设置的参数直接控制数据的传输,不需要处理器介入数据传输的每个步骤。DMA控制器直接访问内存,从IO设备读取数据并将数据写入预先分配的内存地址空间,或者从内存读取数据并发送到IO设备。
传输完成通知:一旦数据传输完成,DMA控制器会向处理器发出一个中断信号,通知处理器DMA操作已经完成。处理器随后可以处理或访问刚刚传输的数据。
处理器处理DMA请求:在接收到DMA完成的中断信号后,处理器可能会执行一些后续处理工作,例如根据需要更新数据处理状态,释放已用完的内存缓冲区,或准备新的DMA传输。
在这里插入图片描述
通过DMA方式,可以有效地在存储器和外部设备之间传输大量数据,而无需占用CPU大量资源来逐字节地处理数据,从而显著提高系统的数据处理效率。常见使用DMA的设备包括硬盘、SSD、网络接口卡以及各种外部接口设备等。

先行进位加法器结构及其verilog实现

先行进位加法器是一种改善行波进位加法器延迟问题的设计,通过并行计算每一位的进位来加速整体的加法过程。这种加法器的设计原理是基于进位生成因子(g)和进位传递因子(p)来提前计算每一位的进位,从而降低加法器的延迟。
下面是一个基本的先行进位加法器的Verilog实现。假设这是一个4位加法器的设计:

module carry_lookahead_adder_4bit(input [3:0] a, b,  // 输入的两个4位加数input cin,        // 输入的低位进位output [3:0] sum, // 输出的4位和output cout       // 输出的高位进位);wire [3:0] g;  // 进位生成因子
wire [3:0] p;  // 进位传递因子
wire [4:0] c;  // 进位// 计算进位生成因子和进位传递因子
assign g = a & b; // g[i] = a[i] & b[i]
assign p = a ^ b; // p[i] = a[i] ^ b[i]// 进位
assign c[0] = cin;
assign c[1] = g[0] | (p[0] & c[0]);
assign c[2] = g[1] | (p[1] & c[1]);
assign c[3] = g[2] | (p[2] & c[2]);
assign c[4] = g[3] | (p[3] & c[3]);// 计算和
assign sum = p ^ c[3:0]; // sum[i] = p[i] ^ c[i]
assign cout = c[4]; // 输出的高位进位endmodule

这个Verilog模块描述了一个4位的先行进位加法器。在该设计中:
g 和 p 分别为进位生成因子和进位传递因子。
c 为进位,其中 c[0] 是输入进位 cin,c[1] 到 c[4] 依次为各位的进位输出。
sum 为两个4位数相加的结果,而 cout 为从最高位溢出的进位。
用这种方式设计的先行进位加法器能有效减少加法运算的延迟,尤其适用于高性能数字电路系统设计。需要注意的是,对于更大位数的加法器,可以通过对4位加法器组件进行层次化级联,进一步构建起更大位数的加法系统。

Booth编码和华莱士树原理

Booth编码和华莱士树是两种用于高效计算乘法和加法的算法,分别用于处理乘法器中部分积的生成和加速多个数相加的过程。
Booth编码
Booth编码主要用于改进二进制乘法的过程。传统的二进制乘法通过多次的加法来实现,但这对于大型数字或是硬件实现来说效率不够高。Booth算法通过编码乘法过程中的乘数,减少了必要的加法次数,从而加速了乘法操作。
在这里插入图片描述
补码乘法,得到有规律的数列P(i)
在这里插入图片描述
booth乘法器根据P(i)设计,b数列每两个的差决定后面S的效果,即对A*2^n的处理,即对A的左移。
最后相加。
核心思想是在乘数的二进制表示中使用位串的形式将连续的1进行编码,利用这些编码规则对乘数进行重新表示,从而减少了部分积的数量。在硬件实现中,这意味着减少了加法器的使用次数,提高了乘法操作的效率。
具体来说,Booth算法识别乘数中连续的1序列,并将其转换为特定的加减操作,这些操作相对于直接采用简单二进制乘法需要较少的步骤来完成。比如,对于乘数的连续两位进行分析,根据前一位和后一位的关系(如从0变到1、从1变到0等),采取不同的处理策略(如加上乘数的部分值,或减去乘数的部分值等)。
华莱士树
把Booth算法中每次循环选出的操作一次性全部选好并相加。华莱士树 (Wallace Tree) 结构可以大幅降低多个数相加的硬件开销和延迟。
用到了CSA加法器:将3个N位数求和转化为2个N位数求和
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
华莱士树是一种硬件加法器结构,用于并行地将多个二进制数相加。其主要目的是减少多数相加时的延迟。通过将加法操作组织成树状结构,多个部分积可以并行地被加起来,从而减少整个加法操作的时间。
华莱士树的基本操作是将加法操作分解成多层,每一层使用多个全加器和半加器对部分积进行处理。通过逐层递进,最终将所有输入数加到一起。华莱士树的精髓在于其能够有效地平衡各级加法器中进位的传递,最终只需要一个更大的加法器来完成最后一步的加法操作。
在这里插入图片描述
图中间标注为 switch 的部分, 负责收集 8 个 Booth 核心生成的 8 个 32 位数, 进行类似矩阵转置的操作, 重新组织为 32 组 8 个一位数相加的格式, 输出给华莱士树, 并将 Booth 核心生成的 8 个 “末位加 1” 信号从 switch 部分右侧接出, (booth其中减去 [X] 补 的操作, 可以视作加上按位取反的 [X] 补 再末位加 1)提供给华莱士树最右侧的一位树及最后的加法器。 此外图中没有画出的是, 被乘数 X 送到 8 个 Booth 编码器时需要先扩展到 32 位, 并按照编码器所处的位置进行不同偏移量的左移操作。
华莱士树通过减少加法操作的层数和优化进位的传递方式,显著地减小了加法操作的延迟,特别适用于硬件乘法器,因为可以快速并行地合并乘法器生成的多个部分积。
在这里插入图片描述
Booth编码的目的是减小乘法器生成的部分积数量,而华莱士树的目的则是加速这些部分积的累加过程。两者合用在乘法器的设计中,可以显著提高数字电路处理乘法操作的速度和效率。

这篇关于计算机体系结构重点学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1058916

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个