Skip to content

Commit

Permalink
Deployed 7772187 with MkDocs version: 1.5.3
Browse files Browse the repository at this point in the history
  • Loading branch information
TomSjtu committed Sep 15, 2024
1 parent 19c9198 commit 4592080
Show file tree
Hide file tree
Showing 145 changed files with 8,875 additions and 995 deletions.
23 changes: 23 additions & 0 deletions 404.html
Original file line number Diff line number Diff line change
Expand Up @@ -550,6 +550,8 @@








Expand Down Expand Up @@ -747,6 +749,27 @@



<li class="md-nav__item">
<a href="/notes/linux/kernel/wait/" class="md-nav__link">


<span class="md-ellipsis">
等待队列
</span>


</a>
</li>










<li class="md-nav__item">
<a href="/notes/linux/kernel/sched/" class="md-nav__link">

Expand Down
23 changes: 23 additions & 0 deletions ai/dl/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -563,6 +563,8 @@








Expand Down Expand Up @@ -760,6 +762,27 @@



<li class="md-nav__item">
<a href="../../linux/kernel/wait/" class="md-nav__link">


<span class="md-ellipsis">
等待队列
</span>


</a>
</li>










<li class="md-nav__item">
<a href="../../linux/kernel/sched/" class="md-nav__link">

Expand Down
23 changes: 23 additions & 0 deletions ai/dl/onnx/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -563,6 +563,8 @@








Expand Down Expand Up @@ -760,6 +762,27 @@



<li class="md-nav__item">
<a href="../../../linux/kernel/wait/" class="md-nav__link">


<span class="md-ellipsis">
等待队列
</span>


</a>
</li>










<li class="md-nav__item">
<a href="../../../linux/kernel/sched/" class="md-nav__link">

Expand Down
23 changes: 23 additions & 0 deletions ai/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -563,6 +563,8 @@








Expand Down Expand Up @@ -760,6 +762,27 @@



<li class="md-nav__item">
<a href="../linux/kernel/wait/" class="md-nav__link">


<span class="md-ellipsis">
等待队列
</span>


</a>
</li>










<li class="md-nav__item">
<a href="../linux/kernel/sched/" class="md-nav__link">

Expand Down
23 changes: 23 additions & 0 deletions ai/opencl/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -563,6 +563,8 @@








Expand Down Expand Up @@ -760,6 +762,27 @@



<li class="md-nav__item">
<a href="../../linux/kernel/wait/" class="md-nav__link">


<span class="md-ellipsis">
等待队列
</span>


</a>
</li>










<li class="md-nav__item">
<a href="../../linux/kernel/sched/" class="md-nav__link">

Expand Down
114 changes: 75 additions & 39 deletions arm/aarch64/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -563,6 +563,8 @@








Expand Down Expand Up @@ -760,6 +762,27 @@



<li class="md-nav__item">
<a href="../../linux/kernel/wait/" class="md-nav__link">


<span class="md-ellipsis">
等待队列
</span>


</a>
</li>










<li class="md-nav__item">
<a href="../../linux/kernel/sched/" class="md-nav__link">

Expand Down Expand Up @@ -4158,19 +4181,19 @@ <h1 id="arm">ARM架构基础知识<a class="headerlink" href="#arm" title="Perma
<p>M系列:面向嵌入式应用</p>
</li>
</ul>
<p>ARMv8 是第一代支持64位处理器的指令集和体系结构,为了兼容还提供了对32位指令集的支持。它还引入了许多新的特性:</p>
<p>ARMv8 是第一代支持 64 位处理器的指令集和体系结构,为了兼容还提供了对 32 位指令集的支持。它还引入了许多新的特性:</p>
<ul>
<li>
<p>超大物理地址空间,提供超过 4GB 物理内存的访问。</p>
</li>
<li>
<p>64位宽的虚拟地址空间</p>
<p>64 位宽的虚拟地址空间</p>
</li>
<li>
<p>自动事件信号,可以实现节能、高性能的自旋锁。</p>
</li>
<li>
<p>31个64位宽的通用寄存器,可以减少对栈的访问。</p>
<p>31 个 64 位宽的通用寄存器,可以减少对栈的访问。</p>
</li>
<li>
<p>提供 16KB 和 64KB 的页,有助于降低 TLB 的伪命中率。</p>
Expand Down Expand Up @@ -4204,7 +4227,7 @@ <h1 id="arm">ARM架构基础知识<a class="headerlink" href="#arm" title="Perma
<div class="tabbed-block">
<ul>
<li>
<p>提供31个64位的通用寄存器</p>
<p>提供 31 个 64 位的通用寄存器</p>
</li>
<li>
<p>提供64位的程序计数指针寄存器(PC)、栈指针寄存器(SP)以及异常链接寄存器(ELR)。</p>
Expand All @@ -4223,7 +4246,7 @@ <h1 id="arm">ARM架构基础知识<a class="headerlink" href="#arm" title="Perma
<div class="tabbed-block">
<ul>
<li>
<p>提供13个32位的通用寄存器,再加上PC、SP、LR。</p>
<p>提供 13 个 32 位的通用寄存器,再加上PC、SP、LR。</p>
</li>
<li>
<p>支持 A32 和 T32 (Thumb指令集)指令集。</p>
Expand All @@ -4241,55 +4264,68 @@ <h1 id="arm">ARM架构基础知识<a class="headerlink" href="#arm" title="Perma
<p>ARMv8 体系结构根据不同的执行状态提供不同指令集的支持:</p>
<ul>
<li>
<p>A64 指令集:运行在 AArch64 状态下,提供64位指令集</p>
<p>A64 指令集:运行在 AArch64 状态下,提供 64 位指令集</p>
</li>
<li>
<p>A32 指令集:运行在 AArch32 状态下,提供32位指令集</p>
<p>A32 指令集:运行在 AArch32 状态下,提供 32 位指令集</p>
</li>
<li>
<p>T32 指令集:运行在 AArch32 状态下,提供16位和32位指令集</p>
<p>T32 指令集:运行在 AArch32 状态下,提供 16 位和 32 位指令集</p>
</li>
</ul>
<p>在 AArch64 状态下,系统寄存器根据不同的异常等级提供不同的变种寄存器——&lt;register_name&gt;_ELx。</p>
<p>在 AArch64 状态下,系统寄存器根据不同的异常等级提供不同的变种寄存器<code>&lt;register_name&gt;_ELx</code></p>
<h2 id="armv8">ARMv8寄存器<a class="headerlink" href="#armv8" title="Permanent link">&para;</a></h2>
<p>AArch64 执行状态支持31个64位的通用寄存器:X0 ~ X30。可以使用W来表示低32位的数据,如 W0 表示 X0 寄存器的低32位。从W寄存器读取时,忽略高32位,并保持其它不变。写入W寄存器时,将X寄存器的高32位设置为零。也就是说,将 0xFFFFFFFF 写入 W0 会将 X0 设置为0x00000000FFFFFFFF</p>
<p>AArch64 执行状态支持 31 个 64 位的通用寄存器:X0 ~ X30。可以使用 W 来表示低 32 位的数据,如 W0 表示 X0 寄存器的低 32 位。从 W 寄存器读取时,忽略高 32 位,并保持其它不变。写入 W 寄存器时,将 X 寄存器的高 32 位设置为零。也就是说,将 0xFFFFFFFF 写入 W0 会将 X0 设置为 0x00000000FFFFFFFF</p>
<p><img alt="AArch64通用处理器" src="../../images/arm/gp_registers.webp" /></p>
<p>其中 X29 又叫栈帧寄存器,X30 叫链接寄存器。</p>
<p>PSTATE 寄存器用来表示当前处理器状态,如下图:</p>
<p><img alt="PSTATE寄存器" src="../../images/arm/pstate.webp" /></p>
<p>特殊寄存器:</p>
<p>1.零寄存器</p>
<p>ARMv8 体系结构提供两个零寄存器——WZR,XZR,寄存器的内容全是0。</p>
<p>2.PC指针寄存器</p>
<p>用来指向当前运行指令的下一条指令的地址。</p>
<p>3.SP指针寄存器</p>
<p>用来指向当前栈帧的栈顶,每个异常等级都有一个专门的 SP 寄存器。</p>
<p>4.备份程序状态寄存器(SPSR)</p>
<p>当异常发生时,处理器会将 PSTATE 寄存器的值暂时保存到 SPSR 中。</p>
<p>5.异常链接寄存器(ELR)</p>
<p>存放异常返回地址。</p>
<p>6.CuurentEL寄存器</p>
<p>表示 PSTATE 寄存器中 EL 字段的值,保存了当前异常等级,可以通过<code>MRS</code>指令读取。</p>
<p>7.DAIF寄存器</p>
<p>表示 PSTATE 寄存器中{D, A,I,F}字段的值。</p>
<p>8.SPSel寄存器</p>
<p>表示 PSTATE 寄存器中 SP 字段的值。</p>
<p>9.PAN寄存器</p>
<p>表示 PSTAET 寄存器中 PAN 字段的值。</p>
<p>10.UAO寄存器</p>
<p>表示 PSTATE 寄存器中 UAO 字段的值。</p>
<p>11.NZCV寄存器</p>
<p>表示 PSTATE 寄存器中{N, Z, C, V}字段的值。</p>
<ol>
<li>
<p>零寄存器:ARMv8 体系结构提供两个零寄存器——WZR,XZR,寄存器的内容全是0。</p>
</li>
<li>
<p>PC 指针寄存器:用来指向当前运行指令的下一条指令的地址。</p>
</li>
<li>
<p>SP 指针寄存器:用来指向当前栈帧的栈顶,每个异常等级都有一个专门的 SP 寄存器。</p>
</li>
<li>
<p>备份程序状态寄存器(SPSR):当异常发生时,处理器会将 PSTATE 寄存器的值暂时保存到 SPSR 中。</p>
</li>
<li>
<p>异常链接寄存器(ELR):存放异常返回地址。</p>
</li>
<li>
<p>CuurentEL 寄存器:表示 PSTATE 寄存器中 EL 字段的值,保存了当前异常等级,可以通过<code>MRS</code>指令读取。</p>
</li>
<li>
<p>DAIF 寄存器:表示 PSTATE 寄存器中{D, A,I,F}字段的值。</p>
</li>
<li>
<p>SPSel 寄存器:表示 PSTATE 寄存器中 SP 字段的值。</p>
</li>
<li>
<p>PAN 寄存器:表示 PSTAET 寄存器中 PAN 字段的值。</p>
</li>
<li>
<p>UAO 寄存器:表示 PSTATE 寄存器中 UAO 字段的值。</p>
</li>
<li>
<p>NZCV 寄存器:表示 PSTATE 寄存器中{N, Z, C, V}字段的值。</p>
</li>
</ol>
<h2 id="_1">异常等级<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h2>
<p>异常是指某些外部或内部的事件,导致CPU去往更高异常等级,执行一些预先设定的代码。在执行完毕后,返回发生异常的现场</p>
<p>异常是指发生了某些事件,可以是外部也可以是内部,导致 CPU 不得不"陷入"更高等级的运行状态,执行一些预先设定的代码。在执行完毕后,会返回发生异常的现场</p>
<p>ARM64 最大支持四种异常:</p>
<p><img alt="异常等级" src="../../images/arm/exception_level.webp" /></p>
<ul>
<li>
<p>EL0:用户特权,运行普通用户程序</p>
</li>
<li>
<p>EL1:系统特权,用于操作系统内核</p>
<p>EL1:系统特权,运行操作系统内核</p>
</li>
<li>
<p>EL2:运行虚拟机监视器</p>
Expand All @@ -4304,16 +4340,16 @@ <h2 id="_1">异常等级<a class="headerlink" href="#_1" title="Permanent link">
<p>移动到更高的异常级别,例如从 EL0 到 EL1,表示软件增加执行特权。</p>
</li>
<li>
<p>不能将异常处理降低到较低的异常级别</p>
<p>不能将异常处理降低到低级别的异常</p>
</li>
<li>
<p>EL0 级别没有异常处理,必须在更高的异常级别处理异常</p>
<p>EL0 级别不允许异常处理,必须在更高的异常级别处理</p>
</li>
<li>
<p>异常导致程序流程发生变化。异常处理程序的执行以高于 EL0 的异常级别从与所采取的异常相关的已定义向量开始。例外情况包括:IRQ 和FIQ 等中断。内存系统中止。未定义的指令。系统调用。这些允许非特权软件对操作系统 安全监视器或管理程序陷阱</p>
<p>异常导致程序流程发生变化。异常处理程序的执行由系统定义的异常向量表处开始</p>
</li>
<li>
<p>通过执行 ERET 指令来结束异常处理并返回到上一个异常级别</p>
<p><code>ERET</code>指令可以结束当前异常处理并返回到上一个异常级别</p>
</li>
<li>
<p>从异常返回可以保持相同的异常级别或进入较低的异常级别。它不能移动到更高的异常级别。</p>
Expand All @@ -4322,7 +4358,7 @@ <h2 id="_1">异常等级<a class="headerlink" href="#_1" title="Permanent link">
<p>安全状态确实会随着异常级别的变化而变化,除非从 EL3 重新调整到非安全状态</p>
</li>
</ul>
<p>要在相同的异常级别之间切换执行状态,必须切换到更高的异常级别,然后返回到原始的异常级别。例如,有32位和64位应用程序在64位操作系统下运行。在这种情况下,32位应用程序可以执行并生成主管调用(SVC)指令,或接收中断,从而导致切换到 EL1 和 AArch64。然后操作系统可以执行任务切换并返回到 AArch64 中的 EL0。实际上,这意味着您不能拥有混合的32位和64位应用程序,因为它们之间没有直接的调用方式。</p>
<p>要在相同的异常级别之间切换执行状态,必须切换到更高的异常级别,然后返回到原始的异常级别。例如,有 32 位和 64 位应用程序在 64 位操作系统下运行。在这种情况下,32 位应用程序可以执行并生成主管调用(SVC)指令,或接收中断,从而导致切换到 EL1 和 AArch64。然后操作系统可以执行任务切换并返回到 AArch64 中的 EL0。实际上,这意味着您不能拥有混合的 32 位和 64 位应用程序,因为它们之间没有直接的调用方式。</p>



Expand Down
Loading

0 comments on commit 4592080

Please sign in to comment.