[A-25]ARMv8/v9-GIC的系统架构(中断的硬件基础)

ver0.1

前言

我们在观看很多的影视剧过程中,尤其是军旅体裁类型的布景中,经常会看见高级干部的办公桌上都会有几部电话机。这样的电话可不能小看,重要的事情尤其是突发和紧急的情况都要通过这几部电话第一时间通知给决策者。这几部电话,必须举报几个特点:及时性好、稳定性好、私密性好、传递的信息重要性高。
0-0
当然生活中的决策者一般都是重要组织的高级Leader,那些电话离我们普通人也很远。对于码农来说,计算机才是我们的世界。这个世界中也有一个地位无与伦比的决策者,SOC世界中的Leader,那就是CPU。那这个世界中的电话就是我们接下来要讨论的主题-GIC(通用中断控制器)。
研究GIC的目的还是为了研究虚拟化技术打下基础,中断的虚拟化也是虚拟化技术领域的重要基础之一,Hypervisor自己不想多干活就要好好的利用硬件提供的辅助能力。在ARM体系下,中断属于异常模型的范畴,所以大家在阅读本文之前,还是建议提前看看前序文章建立起对异常的基本感觉:
(1) [V-05] 虚拟化基础-异常模型(Exception)(AArch64)

正文

1.1 中断的背景

独木不成林,SOC的世界中不能只有CPU,还需要搭配各种各样的设备才能构成有价值的功能单元,必要的时候还需要通过接口扩展,链接进来更多的外部设备,如图1-1。
1-1

图1-1 SOC中的相关设备集合

到这里,我们已经帮助CPU配置齐了一套设备,下一步就要考虑如何管理这些设备了。考虑下面一种场景,CPU分配了一块显存交给GPU去渲染,GPU接到指令后自然是不敢怠慢,加班加点的干活。当GPU完了CPU交办的渲染任务之后,自然是要向CPU复命的。那么问题来了,GPU要怎么通知CPU它已经干完活了呢?或者说,CPU要怎么知道GPU当前的渲染状态呢?你也许会说,CPU直接去问一下GPU不就行行了吗?事实上还真有这种方式,通过CPU主动查询的方式。GPU可以和CPU提前做好约定,例如在GPU的IO空间中分配一个寄存器,GPU可以在工作的过程中更新这个寄存器的状态,CPU可以在想要的时候不断的去读取GPU这个寄存器的状态。这样做法看似简单,实则一点也不难。只是这么个搞法会有一个效率的问题:
(1) CPU到底要啥时候去访问这个GPU的寄存器啊? 早了吧,GPU可能还没有干完活,CPU白跑一趟。晚了吧,GPU可能早就干完了,CPU白等了好长时间。
(2) 设个定时查询的机制,让CPU不断的轮询行不行呢?也不行的,因为同样会浪费很多CPU的时间片资源。就比如说,到底定时多长时间去轮询一次啊,这个值就不好确定。

似乎看上去CPU主动去查询的方式效率不高,处理不当会造成很大的CPU资源浪费。这个方向不行,就换一个方向考虑问题,让设备通知CPU就可以了。还是以GPU为例,CPU交办的任务是否完成了、完成的进度如何、实施的过程中是否有问题,只有GPU自己最了解情况,因此让GPU主动通知GPU是比较合理的处理方式了。这样CPU该干啥干啥,只是需要的时候由设备发起通知让CPU介入处理一下就可以了,双方都很满意。这种由设备主动发起通知CPU的行为就称为

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/66386.shtml

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

相关文章

ffmpeg将mp4等文件转mp3

安装ffmpeg 目录 安装ffmpeg macOS Windows 实现方法 Base Golang macOS 在macOS上,你可以使用Homebrew来安装FFmpeg,这是最简单和推荐的方法。以下是具体步骤: ‌安装Homebrew‌(如果尚未安装): 打开终端,执行以下命令来安装Homebrew: /bin/bash -c "$(c…

13-线段的转折点样式

13-线段的转折点样式_哔哩哔哩_bilibili13-线段的转折点样式是一次性学会 Canvas 动画绘图(核心精讲50个案例)2023最新教程的第14集视频,该合集共计53集,视频收藏或关注UP主,及时了解更多相关视频内容。https://www.bi…

计算机网络 (28)虚拟专用网VPN

前言 虚拟专用网络(VPN)是一种在公共网络上建立私有网络连接的技术,它允许远程用户通过加密通道访问内部网络资源,实现远程办公和安全通信。 一、基本概念 定义:VPN是一种通过公共网络(如互联网&#xff09…

基于transformer的目标检测:DETR

目录 一、背景介绍 二、DETR的工作流程 三、DETR的架构 1. 损失函数 2. 网络框架讲解及举例 一、背景介绍 在深度学习和计算机视觉领域,目标检测一直是一个核心问题。传统方法依赖于复杂的流程和手工设计的组件,如非极大值抑制(nms&…

代码随想录18

20. 有效的括号 给定一个只包括 (,),{,},[,] 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有…

Vue Amazing UI 组件库(Vue3+TypeScript+Vite 等最新技术栈开发)

Vue Amazing UI 一个 Vue 3 组件库 使用 TypeScript,都是单文件组件 (SFC),支持 tree shaking 有点意思 English | 中文 Vue Amazing UI 是一个基于 Vue 3、TypeScript、Vite 等最新技术栈开发构建的现代化组件库,包含丰富的 UI 组件和常…

git:指令集

以下是对这些 Git 新特性和命令的更详细解读和实际用例分析,帮助更好地理解它们的作用及适用场景: 1. git switch 和 git restore 背景: 传统上,git checkout 是一个多功能命令,用于切换分支、检出文件、创建分支等&…

C语言----指针

目录 1.概念 2.格式 3.指针操作符 4.初始化 1. 将普通变量的地址赋值给指针变量 a. 将数组的首地址赋值给指针变量 b. 将指针变量里面保存的地址赋值给另一个指针变量 5.指针运算 5.1算术运算 5.2 关系运算 指针的大小 总结: 段错误 指针修饰 1. con…

ElasticSearch系列(一)

一.了解ES、倒排索引、es的一些概念、安装es、kibana 二.DSL;索引库操作 三.Java RestClient:索引库操作 一、了解ES、倒排索引、es的一些概念、安装es、kibana kibana、logstash、beats Elasticserach 存储,计算 ,搜索数据 –…

Python应用——将Matplotlib图形嵌入Tkinter窗口

Python应用——将Matplotlib图形嵌入Tkinter窗口 目录 Python应用——将Matplotlib图形嵌入Tkinter窗口1 模块简介2 示例代码2.1 Matplotlib嵌入Tkinter2.2 Matplotlib嵌入Tkinter并显示工具栏 1 模块简介 Tkinter是Python的标准GUI(图形用户界面)库&…

C#语言的网络编程

C#语言的网络编程 引言 随着互联网的飞速发展,网络编程成为了软件开发中的一个重要领域。C#语言作为一种现代编程语言,凭借其丰富的类库、良好的可读性和强大的功能,广泛应用于开发各种网络应用程序。无论是Windows应用、Web应用还是云服务…

软件工程大复习之(四)——面向对象与UML

4.1 面向对象概述 面向对象(OO)是一种编程范式,它将数据和处理数据的方法封装在对象中。面向对象的主要概念包括: 对象:实例化的数据和方法的集合。类:对象的蓝图或模板。封装:隐藏对象的内部…

【linux基础I/O(2)】理解文件系统|文件缓冲区|软硬链接|动静态库

目录 前言1. 理解C语言的缓冲区2. 对文件系统的初认识3. 理解软硬链接1. 软硬链接的特征2.软硬链接的作用 4. 理解动静态库5. 总结 前言 对于文件来讲,有打开的在内存中的文件,也有没有打开的在磁盘上文件,上一篇文章讲解的是前者,本篇文章将带大家了解后者! 本章重点: 本篇文…

什么是Redis的渐进式ReHash?

文章内容收录到个人网站,方便阅读:http://hardyfish.top/ 文章内容收录到个人网站,方便阅读:http://hardyfish.top/ 文章内容收录到个人网站,方便阅读:http://hardyfish.top/ Redis 的渐进式 rehash 是一…

Linux应用软件编程--网络通信(udp协议,tcp协议)

网络通信:不同主机,进程间通信,分为广域网和局域网 OSI 七层模型:是一种理论模型 应用层:通信传输的数据内容 http、FTP、TFTP、MQTT 表述层:数据加密,解密操作,压缩&#xff…

深度学习,训练集准确率高,但验证集准确率一直不上升,很低的问题

在训练过程中,训练集的准确率稳步上升,但是验证集的准确率一直在40%左右徘徊,从网上搜索可能的原因有: 1、学习率太小,陷入局部最优。 2、数据量太小(4000多条数据,应该还可以吧) …

【C++】构造函数与析构函数

写在前面 构造函数与析构函数都是属于类的默认成员函数! 默认成员函数是程序猿不显示声明定义,编译器会中生成。 构造函数和析构函数的知识需要建立在有初步类与对象的基础之上的,关于类与对象不才在前面笔记中有详细的介绍:点我…

期刊选择【生物医学工程】

所有数据来源letpub Academic radiology【共一共通,速度√杠杠的】 【LetPub】ACADEMIC RADIOLOGY 影响因子3.800分,是几区,2023-2024年期刊投稿经验分享,ACADEMIC RADIOLOGY主页,推荐审稿人、编辑,审稿…

【简博士统计学习方法】3. 统计学习方法的三要素

3. 统计学习方法的三要素 3.1 监督学习的三要素 3.1.1 模型 假设空间(Hypothesis Space):所有可能的条件概率分布或决策函数,用 F \mathcal{F} F表示。 若定义为决策函数的集合: F { f ∣ Y f ( X ) } \mathcal{F…

Flink如何设置合理的并行度

一个Flink程序由多个Operator组成(source、transformation和 sink)。 一个Operator由多个并行的Task(线程)来执行, 一个Operator的并行Task(线程)数目就被称为该Operator(任务)的并行度(Parallel)。即并行度就是相对于Operator来说的。 合理设置并行度可以有效提高Flink作业…