计算机体系结构重点学习

news2025/1/12 8:48:55

从外部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.coloradmin.cn/o/1820036.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CATIA P3 V5-6R 中文版软件下载安装 达索CATIA三维设计软件获取

CATIA的建模和装配能力堪称业界翘楚。其强大的建模工具能够轻松应对各种复杂的几何形状和结构,帮助设计师们快速构建出精准的产品模型。同时,装配模块则能够实现零部件的快速装配,大大提高了设计效率。 在分析和仿真方面,CATIA同样…

基于python多光谱遥感数据处理、图像分类、定量评估及机器学习

原文链接:基于python多光谱遥感数据处理、图像分类、定量评估及机器学习 普通数码相机记录了红、绿、蓝三种波长的光,多光谱成像技术除了记录这三种波长光之外,还可以记录其他波长(例如:近红外、热红外等)光…

【技术】MySQL 8.4 免安装版配置

MySQL 8.4 免安装版配置 官网下载压缩包解压文件创建配置文件初始化数据库安装MySQL服务链接数据库修改密码 官网下载压缩包 从MySQL官网下载压缩包,官网:https://www.mysql.com/ 头部菜单点击【DOWNLOADS】,跳转到下载页面。在页面底部点击…

如何通过逆向分析法挖掘真实需求?

逆向分析法从现有问题或现象出发,反向追溯其根本原因,以揭示隐藏需求和潜在问题。此方法有助于深入理解用户的真实需求,提高需求分析质量和效率,优化用户体验,提高用户满意度和忠诚度。如果缺乏逆行分析法,…

4.1 Python 字符串类型常用操作及内置方法

0. 序列类型 序列是一种数据存储方式, 用来存储一系列的数据. 在内存中, 序列使用连续的内存空间用来存放多个值.序列类型的变量存储序列对象的地址, 而不是直接存在值的地址. 序列对象保存索引和对象的绑定关系.s ABCDprint(id(s), type(s), s) # _ 2050757126000 &…

电商开发者必读:微店商品详情API接口全解析

微店作为一个流行的电商平台,提供了丰富的API接口供开发者使用。详细介绍商品详情API接口的使用方法,帮助开发者快速获取商品信息,实现商品信息的自动化展示和管理。 1. 接口简介 微店商品详情API接口允许开发者通过商品ID获取商品的详细信…

三星公布尖端芯片进展 | 百能云芯

三星电子在本周三举办的年度晶圆制造盛会上,揭开了未来多项技术革新的神秘面纱,并宣布其晶圆制造业务将整合全球领先的记忆芯片、晶圆制造及封装服务,为AI芯片客户提供一站式服务,以加速其生产进程。 三星强调,客户仅需…

qt(使用c++建立图形化界面)

建立QQ页面 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {//1:设置窗口标题this->setWindowTitle("QQ");//2:重新设计窗口大小this->resize(540,420);//3:设置窗口小图标 添加QIcon头文件 注意路径中替换/this->setWindowIcon(QIcon(&q…

Windows本地使用SSH连接VM虚拟机

WIN10 VM17.5 Ubuntu:20.04 1.网路设置 1)选择编辑->更改设置 配置完成 2.修改了服务器文件,修改sshd配置,在此文件下/etc/ssh/sshd_config,以下为比较重要的配置 PasswordAuthentication yes PermitRootLogin yes PubkeyAuthenticat…

【安装笔记-20240613-Linux-在 OpenWrt 的 LuCI界面支持命令行调试】

安装笔记-系列文章目录 安装笔记-20240613-Linux-在 OpenWrt 的 LuCI界面支持命令行调试 文章目录 安装笔记-系列文章目录安装笔记-20240613-Linux-在 OpenWrt 的 LuCI界面支持命令行调试 前言一、软件介绍名称:ttyd主页官方介绍特点 二、安装步骤测试版本&#xf…

远程开发端口转发

应用推荐场景: 1.服务器跑后台,本地出前端应用。 比如Stable Diffusion的大模型打标应用。 2.Docker容器服务器。 对于本地服务想要转出去,跑出来前端。该项能克服虚拟机的端口与ip访问问题。 正文: 涉及的软件: …

了解AIGC:让AI创造内容,改变未来

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 什么是AIGC? 定义和概念 🧠 关键技术 🤖 AIGC的发展历程 &#x1f…

【LeetCode滑动窗口算法】长度最小的子数组 难度:中等

我们先看一下题目描述&#xff1a; 解法一&#xff1a;暴力枚举 时间复杂度&#xff1a;o(n^3) class Solution { public:int minSubArrayLen(int target, vector<int>& nums){int i 0, j 0;vector<int> v;for (;i < nums.size();i){int sum nums[i];fo…

0101 电路模型和电路定律

电路模型和电路定律 1.1电路和电路模型1.2电压和电流的参考方向1.3电功率和能量 理论分析课程 重点&#xff1a; 1.电压、电流的参考方向 2.电阻元件和电源元件的特性 3.基尔霍夫定律&#xff08;KCL、KVL&#xff09; 1.1电路和电路模型 1.实际电路&#xff1a;由电工设备和…

CentOS手工升级curl记

笔者一台服务器装有 CentOS 7.9 系统&#xff0c;运行 curl -V 查询 curl 的版本是 7.29&#xff0c;这个老版本的 curl 不支持 HTTP/2 协议。为了使 curl 能连接HTTP/2&#xff0c;curl 必须升级到至少7.46.0版本以上。查询 curl的官网得知当前最新版本是 8.8.0&#xff0c;然…

基于51单片机的温控风扇-数码管显示-风扇人体感应

一.硬件方案 系统采用51单片机作为控制平台对风扇转速进行控制。可由用户设置高、低温度值&#xff0c;测得温度值在高低温度之间时打开风扇弱风档&#xff0c;当温度升高超过所设定的温度时自动切换到大风档&#xff0c;当温度小于所设定的温度时自动关闭风扇。风扇控制状态随…

MySQL主从复制(六):数据库是否可用

select 1判断 场景示例&#xff1a; -- 设置innodb并发度为3&#xff0c;从而限制并发查询 set global innodb_thread_concurrency3;-- 创建表t CREATE TABLE t (id int(11) NOT NULL,c int(11) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB;-- 插入1行数据 insert into t v…

华为昇腾异构计算架构CANN及AI芯片简介

异构计算架构CANN 异构计算架构CANN&#xff08;Compute Architecture for Neural Networks&#xff09;是华为针对AI场景推出的异构计算架构&#xff0c;向上支持多种AI框架&#xff0c;包括MindSpore、PyTorch、TensorFlow等&#xff0c;向下服务AI处理器与编程&#xff0c;…

C语言小例程10/100

题目&#xff1a;要求输出国际象棋棋盘。 程序分析&#xff1a;国际象棋棋盘由64个黑白相间的格子组成&#xff0c;分为8行*8列。用i控制行&#xff0c;j来控制列&#xff0c;根据ij的和的变化来控制输出黑方格&#xff0c;还是白方格。 #include<stdio.h>int main() {…

联邦学习权重聚合,联邦学习权重更新

目录 联邦学习权重聚合 model.state_dict() 保存模型参数 加载模型参数 注意事项 联邦学习权重更新 联邦学习权重聚合 model.state_dict() 在PyTorch框架中,model.state_dict() 是一个非常重要的方法,它用于获取模型的参数(即权重和偏置)作为一个有序字典(Order…