返回顶部

存储系统

存储系统

I/O系统的性能

输入输出系统简称I/O系统,它包括I/O设备;I/O设备与处理机的连接。(后文都用IO替代I/O

IO系统是计算机系统中的一个重要组成部分

  • 完成计算机与外界的信息交换
  • 给计算机提供大容量的外部存储器

IO系统的性能对CPU的性能有很大的影响,若两者的性能不匹配,IO系统就有可能成为整个系统的瓶颈。

系统的响应时间(衡量计算机系统的一个更好的指标):

  • 从用户输入命令开始,到得到结果所花费的时间。
  • 由两部分构成:IO系统的响应时间;CPU的处理时间。

多进程技术只能够提高系统吞吐率,并不能够减少系统响应时间。

评价IO系统性能的参数主要有:

  • 连接特性:那些IO设备可以和计算机系统相连接。
  • IO系统的容量:IO系统可以容量的IO设备数
  • 响应时间和吞吐率等

另一种衡量IO系统性能的方法:考虑IO操作对CPU的打扰情况。即考查某个进程在执行时,由于其他进程的IO操作,使得该进程的执行时间增加了多少。

IO系统的可靠性、可用性和可信性

反映外设可靠性能的参数有:可靠性;可用性;可信性。

系统的可靠性:系统从某个初始参考点开始一直连续提供服务的能力。

  • 用平均无故障时间MTTF来衡量。
  • 系统中断服务的时间用平均修复时间MTTR来衡量。
  • MTTF的倒数就是系统的失效率。
  • 如果系统中每个模块的生存期服从指数分布,则系统整体的失效率是各部件的失效率之和。

系统可用性:系统正常工作的时间在连续两次正常服务间隔时间中所占的比率:

\[可用性 = \frac{MTTF}{MTTF + MTTR} \]

  • MTTF + MTTR:平均失效间隔时间MTBF

系统的可信性:服务的质量。即在多大程度上可以合理地认为服务是可靠的。(不可以度量)

可靠性的特征量

可靠性指标及其内在关系

可靠度:是指产品在规定的条件下,在规定的时间内、产品完成规定功能的概率。它是时间的函数,记作R(t),也称为可靠度函数。

t = 0时,R(0) = 1;当\(t = \infin\)时 , \(R(\infin) = 0\)\(R(t) = p(T > t)\)

\[\overline{R(t)} = \frac{12 - 7}{12} = 0.42 \]

不可靠度:是指产品在规定的条件下,在规定的时间内、产品不能完成规定功能的概率。它也是时间的函数,记作F(t),也称为累积失效概率\(F(t) = p(T\leq t)\)

失效概率密度\(f(t)\):失效概率密度是累积失效概率F(t)对时间的变化率,它表示产品寿命落在包含t的单位时间内的概率,即t时刻,产品在单位时间内失效的概率。

\[f(t) = \frac{dF(t)}{dt} = F'(t) \]

瞬时失效率\(\lambda(t)\) :简称失效率,是在\(t\)时刻,尚未失效的产品,在该时刻后的单位时间内发生失效的概率。

\[\lambda(t) = \lim_{\Delta t \to 0} \frac{F(t + \Delta t) - F(t)}{R(t)\Delta t} = \frac{dF(t)}{dt} \frac{1}{R(t)} \]

中位寿命:满足\(R(t_{0.5}) = 0.5\)\(t_{0.5}\)称为中位寿命,即寿命比它长和比它短的产品各占一半。

特征寿命:满足\(R(t_{e^{-1}}) = e^{-1} = 0.368\)\(t_{e^{-1}}\)称为特征寿命。

MTBF和 MTTF

对不可维修的产品的平均寿命是指从开始投入工作,至产品失效的时间平均值。也称为平均失效前时间,记作MTTF,他是Mean Time To Failure的缩写。

对可维修产品而言,其平均寿命是指两次故障间的时间平均值,称为平均故障间隔时间,习惯称为平均无故障工作时间,记作MTBF,是Mean Time Between Failures的缩写。

对可维修产品还有平均维修时间,它是设备处于故障状态时间的平均值,或设备修复时间的平均值。记作MTTR,是Mean Time To Repair的缩写。

\[MTTR = \int_{0}^{\infin}t\times m(t)dt = \int_{0}^{\infin}(1 - M(t)) dt \]

其中\(m(t)\)是维修时间的概率密度函数,对应可靠性的失效概率密度函数。

维修度(对应可靠度) \(M(t)\):它定义为在规定条件下使用的产品,在规定的时间内按照规定的程序和方法进行维修时,保持或恢复到能完成规定功能状态的概率。

修复率\(\mu (t)\)(对应失效率):定义为修理时间已达到某个时刻,但尚未修复的产品,在该时刻后的单位时间内完成修复的概率。

\[\mu (t) = \lim_{\Delta t \to 0} \frac{M(t + \Delta t) - M(t)}{(1 - M(t))\Delta t} = \frac{m(t)}{1-M(t)} \]

可维修产品的有效度\(A\),它表示设备处于完好状态的概率:

\[A = \frac{MTBF}{MTBF + MTTR} \]

可靠性是定量的概率统计指标:在设计中它必须是可预计的,在实验中它必须是可测量的,在生产中它必须是可保证的及在现场使用中它必须是可保持的。

系统可靠性与维修性指标可以从两方面论证:

  • 研究被论证系统应该具有或侧重于那些可靠性和维修性指标;
  • 决定这些指标水平的高低。

可靠性模型的分析和建立

可靠性模型包括可靠性框图和可靠性数学模型二项内容。可靠性框图应与产品的工作原理图及功能框图相协调,功能框图表示产品中各单元之间的功能关系,而原理图则表示产品各单元之间的物理关系。可靠性框图用来简明扼要、直观地描述产品为完成任务的各种组合(串并联框图)。为了编制可靠性框图必须全面了解产品完成任务的定义及使用的任务剖面,并给出一般的和专门的假设。

可靠性方框图只表明组成产品的分系统或组件与产品的可靠性关系的连接,通常,它是产品组成子系统或组件的串、并联的某种组合,但组件在串联环节中相对位置是没有物理意义的,它只表明产品完成规定任务所必须保证的各功能组件的关系。

可靠性框图应注意的事项:

  • 各方框之间的所有连线不具有可靠性值。这些连线只用来表示框图中各方框的连接关系,而不代表与产品有关的导线和连接器。导线和连接器作为一个独立的方框或构成一个单元或功能的一部分。
  • 不能与电路的串并联混淆
  • 产品的所有输入在规定的极限之内
  • 就故障概率而言,框图中一个方框所表示的单元或功能不受其他方框的影响

串联系统

定义:系统中的下属几个组件全部工作正常时,系统才正常;当系统中有一个或一个以上的组件失效时,系统就失效,这样的系统就称串联系统。串联系统的可靠性框图,就是下属几个组件的串联图。设系统下属组件的可靠度分别为 \(r_1 , r_2 , ... , r_n\)

串联系统的框图为:

\(S_s\)\(S_i\)分别表示系统和单元的正常工作状态,则依据串联系统的定义, 串联系统中正常事件是“ 交”的关系,逻辑上为“ 与”的关系,系统要正常工作,必须各子系统都正常工作,则有

\[S_s = S_1 \cap S_2 \cap \cdot \cdot\cdot\cap S_n \]

系统正常工作的概率为各单元概率之积,因此:

\[P_s(S_s) = \prod\limits_{i = 1}^{n} P_i(S_i) \]

由于

\[P_s = R_s(t)\\ P_i(S_i) = r_i(t) \]

所以

\[R_s = r_1 \cdot r_2 \cdot \cdot \cdot r_n = \prod\limits_{i = 1}^{n}r_i \]

因为

\[r_i(t) = e^{-\lambda _it}\\ \lambda = \sum_{i = 1}^{n}\lambda_i \]

所以

\[r(t) = e^{-\lambda t}\\ MTBF = \frac{1}{\lambda} \]

并联系统

定义:系统中的几个下属组件,只要其中一个工作正常,则系统就正常工作,只有全部组件都失效时,系统才失效,这样的系统就称并联系统。并联系的可靠性方框图为n个组件的并联图。

设组成组件的可靠度分别为\(r_1 , r_2 , ... , r_n\)

相应组件的失效概率分别为\(q_1 , q_2 , ... , q_n\)

并设并联系统的失效概率为\(Q_s\)

\(S_s\)\(s_i\)分别表示系统和单元的正常工作状态,用\(F_s\)\(F_i\)表示系统和单元不正常工作,则依据并联系统的定义, 并联系统中不正常事件是“交”的关系,逻辑上为“与”的关系,系统要不正常工作,必须各子系统都不正常工作,则有

\[F_s= F_1 \cap F_2 \cap ...\cap F_n \]

系统不正常工作的概率为各单元不正常工作概率之积,因此:

\[F_s(S_s) = \prod\limits_{i = 1}^{n}F_i(S_i) \]

由于

\[F_s = Q_s(t)\\ F_i(S_i) = q_i(t) \]

所以

\[Q_s = q_1 \cdot q_2 ... \cdot q_n = \prod\limits_{i = 1}^{n}(1 - r_i)\\ R_s = 1 - Q_s = 1 - \prod\limits_{i = 1}^{n}q_i = 1 - \prod\limits_{i = 1}^{n}(1 - r_i) \]

对于指数分布,若失效率用\(\lambda\)表示

\[\begin{align} MTBF &= \int_{0}^{\infin}Rs(t)dt\\ &= \sum\limits_{i = 1}^{n} \frac{1}{\lambda_i} - \sum\limits_{1 \leq i < j \leq n} \frac{1}{\lambda_i + \lambda_j} + ...+(-1)^{n - 1}\frac{1}{\lambda_1 + \lambda_2 + ... + \lambda_n}\\ &= \int_{0}^{\infin}(1 - (1 - e^{-\lambda t})^n)dt\;if \lambda_i = \lambda_j \forall 1\leq i , j \leq n\\ &= \frac{1}{\lambda} + \frac{1}{2\lambda} + ... + \frac{1}{n\lambda} \end{align} \]

可靠度:R(t),不可靠度F(t),关系式:R(t) + F(t) = 1

在各单元相同情况下,用n代表串联倍数,m代表并联倍数。

  • 串并联系统:先串联后并联,可靠度\(R(t) = 1 - [1 - R_i^n(t)]^m\)
  • 并串联系统:先并联后串联, 可靠度\(R(t) = [1 - (1 - R_i(t))^m]^n\)
  • 公式用途:RAID 0 + 1是串并联系统, RAID 1 + 0是并串联系统。

提高系统组成部件可靠性的方法

  • 有效构建方法:在构建系统的过程中消除故障隐患,这样建立起来的系统就不会出现故障。
  • 纠错方法:在系统构建中采用容错的方法。这样即使出现故障,也可以通过容错信息保证系统正常工作。

廉价磁盘冗余阵列RAID

磁盘阵列DA:使用多个磁盘(包括驱动器)的组合来替代一个大容量的磁盘。

  • 多个磁盘并行工作。
  • 以条带为单位把数据均匀地分布到多个磁盘上。(交叉存放)
  • 条带存放可以使多个数据读写请求并行地被处理,从而提高总的IO性能。

这里并行性有两方面的含义:

  • 多个独立的请求可以由多个盘来并行地处理。减少了IO请求的排队等待时间。
  • 如果一个请求访问多个块,就可以由多个盘合作来并行处理。提高了单个请求的数据传输率。

存在的问题:阵列中磁盘数量的增加会导致磁盘阵列可靠性的下降。如果使用了 N 个磁盘构成磁盘阵列,那么整个阵列的可靠性将降低为单个磁盘的\(\frac{1}{N}\)

解决办法:在磁盘阵列中设置冗余信息盘,当单个磁盘失效时,丢失的信息可以通过冗余盘中的信息重新构建。

大多数磁盘阵列的组成可以由以下两个特征来区分:

  • 数据交叉存放的粒度 可以是细粒度的,也可以是粗粒度的

    • 细粒度磁盘阵列是在概念上把数据分割成相对较小的单位交叉存放。

      • 优点:所有IO请求都能够获得很高的数据传输率。

      • 缺点:在任何时间,都只有一个逻辑上的IO在处理当中,而且所有的磁盘都会因为为每个请求进行定位而浪费时间。

    • 粗粒度磁盘阵列是把数据以相对较大的单位交叉存放

      • 多个较小规模的请求可以同时得到处理。
      • 对于较大规模的请求又能获得较高的传输率。
  • 冗余数据的计算方法以及在磁盘阵列中的存放方式

在磁盘阵列中设置冗余需要解决以下两个问题:

  • 如何计算冗余信息?
    • 大多都是采用奇偶校验码
    • 也有采用汉明码或Read-Solomon码的
  • 如何把冗余信息分布到磁盘阵列中的各个盘?
    • 把冗余信息集中存放在少数的几个盘中。
    • 把冗余信息均匀地存放到所有的盘中。(能避免出现热点问题)

有关RAID的几个问题

  • 关键问题:如何发现磁盘的故障,在磁盘扇区中除了保存数据信息外,还保存由用于发现该扇区错误的检测信息。
  • 设计的另一个问题:如何减少平均修复时间MTTR,典型的做法是在系统中增加热备份盘。
  • 热交换技术:与热备份盘相关的一种技术。

RAID0

非冗余磁盘阵列,无冗余信息。严格的说,它不属于RAID系列。

把数据切分成条带,以条带为单位交叉地分布存放到多个磁盘中。

RAID1

镜像磁盘,对所有的磁盘数据提供一份冗余的备份。

  • 每当把数据写入磁盘时,将该数据也写入其镜像盘。在系统中所有的数据都有两份。

RAID1的特点:

  • 能实现快速的读取操作
  • 对于写入操作,镜像的两个磁盘都要写入。但可以并行进行,而且不需要计算校验信息,所以其速度比级别更高的RAID都快。
  • 可靠性很高,数据的恢复很简单。
  • 实现成本最高。

RAID2

存储器式的磁盘阵列(按汉明纠错码的思路构建)

  • 4个数据盘的RAID2

RAID2的特点:

  • 每个数据盘存放所有数据字的一位(位交叉存放)。
  • 各个数据盘上的相应位计算汉明校验码,编码位被存放在多个校验磁盘(ECC)的对应位上。
  • 冗余盘是用来存放汉明码的,其个数为\(log_2m\)级。\(m\)表示数据盘的个数,也就是数据字的位数。
  • 并未被广泛应用,目前还没有商业化产品。

RAID3

位交叉奇偶校验磁盘阵列

RAID3的特点:

  • 采用奇偶校验:写数据时,为每行数据形成奇偶校验位并写入校验盘。读出数据时,如果控制器发现某个磁盘出现故障,就可以根据故障盘以外的所有其他盘中的正确信息恢复故障盘中的数据。(通过异或运算实现)
  • 细粒度的磁盘阵列,即采用的条带宽度较小。能够获得很高的数据传输率,这种磁盘阵列对大数据量的读写具有很大的优越性。不能同时进行多个IO请求的处理。
  • 只需要一个校验盘,校验空间开销比较小。

RAID4

块交叉奇偶加药磁盘阵列

采用比较大的条带,以块为单位进行交叉存放和计算奇偶校验。实现目标:能同时处理多个小规模访问请求。

RAID4读写特点:

  • 读取操作:每次只需要访问数据所在的磁盘;仅在该磁盘出现故障时,才会去读校验盘,并进行数据的重建。

  • 写入操作:假定有4个数据盘和一个冗余盘。写数据需要2次磁盘读和2次磁盘写操作。

  • RAID4能有效地处理小规模访问,快速处理大规模访问,校验空间开销比较小。但其控制比较复杂。

RAID5

块交叉分布奇偶校验磁盘阵列

数据以块交叉的方式存于各盘,无专用冗余盘,奇偶校验信息均匀分布在所有磁盘上。

RAID6

P+Q双校验磁盘阵列

特点:

  • 校验空间开销是RAID5的两倍
  • 容忍两个磁盘出错

RAID10与RAID01

RAID10:先进行镜像(RAID1)再进行条带存放(RAID0

RAID01:先进行条带存放(RAID0)再进行镜像(RAID1)。

RAID的实现与发展

实现盘阵列的方式主要有三种:

  • 软件方式:阵列管理软件由主机来实现。优点:成本低。缺点:过多地占用主机时间,且带宽指标上不去。
  • 阵列卡方式:把RAID管理软件固化在IO控制卡上,从而可不占用主机时间,一般用于工作站和PC机。
  • 子系统方式:一种基于通用接口总线的开放式平台,可用于各种主机平台和网络系统。

总线

在计算机系统中,各子系统之间可以通过总线互相连接。

优点:成本低,简单

主要缺点:它是由不同的外设分时共享的,形成了信息交换的瓶颈,从而限制了系统中总的IO吞吐量。

总线的设计

总线设计存在很多技术难点

  • 一个重要的原因:总线上信息传送的速度极大地受限于各种物理因素。如总线的长度、设备的数目、信号的强度等,这些物理因素限制了总线性能的提高。
  • 另一方面,我们一边要求IO操作响应快,另一方面又要求高吞吐量,这可能造成设计需求上的冲突。

分离事务总线,又称流水总线、悬挂总线、包交换总线。

  • 在有多个主设备时,可以通过包交换来提高总线带宽

  • 基本思想:将总线事务分成请求和应答两部分;在请求和应答之间的空闲时间内,总线可以供其他的IO使用,这样就不必在整个IO过程中都独占总线。

  • 工作过程的示意图:

  • 分离事务总线有较高的带宽,但是它的数据传送延迟通常比独占总线方法大。

同步总线

  • 同步总线的控制线中包含一个时钟,总线上所有设备的所有的通信操作都以该时钟为基准。
  • 优点:速度快、成本低
  • 缺点:由于时钟通过长距离传输后会扭曲,因而同步总线不能用于长距离的连接。特别是对于高速同步总线来说,更是如此。总线上的所有设备都必须以同样的时钟频率工作。
  • CPU-存储器总线通常是采用同步总线。

异步总线

  • 没有统一的参考时钟,每个设备都有各自的定时方法。
  • 采用握手协议。
  • 不存在时钟扭曲和同步的问题,传输距离可以比较长。
  • 很多IO总线都采用异步总线。
  • 同步总线通常比异步总线快。

通道处理机

通道的作用和功能

程序控制、中断和DMA方式管理外围设备会引起两个问题:

  • 所有外设的输入输出工作均由CPU承担,CPU的计算工作经常被打断而去处理输入输出的事务,不能充分发挥CPU的计算能力。
  • 大型计算机系统的外设虽然很多,但同时工作的机会不是很多。

解决上述问题的方法:采用通道处理机

  • 通道处理机能够负担外围设备的大部分IO工作。
  • 通道处理机(简称通道):通道处理机只能执行有限的一组输入或输出指令。

一个典型的由CPU、通道、设备控制器、外设构成的4级层次结构的输入输出系统。

通道的功能:

  • 接收CPU发来的IO指令,并根据指令要求选择指定的外设与通道相连接。
  • 执行通道程序:从主存中逐条取出通道指令,对通道指令进行译码并根据需要向被选中的设备控制器发出各种操作命令。
  • 给出外设中要进行读写操作的数据所在的地址,如磁盘存储器的柱面号、磁头号、扇区号等。
  • 给出主存缓冲区的首地址,该缓冲区存放从外设输入的数据或者将要输出到外设中去的数据。
  • 控制外设与主存缓冲区之间的数据传送的长度,对传送的数据个数进行计数,并判断数据传送是否结束。
  • 指定传送工作结束时要进行的操作。例如:将外设的中断请求及通道的中断请求送往CPU等。
  • 检查外设的工作状态是否正常,并将该状态信息送往主存指定单元保存。
  • 在数据传输过程中完成必要的格式变换。例如:把字拆分为字节,或者把字节装配成字等。

通道对外设的控制通过输入输出接口和设备控制器进行

  • 通道与设备控制器之间一般采用标准的输入输出接口来连接。
  • 通道通过标准接口把操作命令送到设备控制器,设备控制器解释并执行这些通道命令,完成命令指定的操作。
  • 设备控制器能够记录外设的状态,并把状态信息送往通道和CPU

通道的工作过程

通道完成一次数据输入输出的工作过程:

  • 在用户程序中使用访管指令进入管理程序,由管理程序生成一个通道程序,并启动通道。

    • 用户在目标程序中设置一条广义指令,通过调用操作系统的管理程序来实现。
    • 管理程序根据广义指令提供的参数来编制通道程序。
    • 启动输入输出设备指令是一条主要的输入输出指令,属于特权指令。
  • 通道处理机执行通道程序,完成指定的数据输入输出工作,通道处理机执行通道程序与CPU执行用户程序是并行的。

  • 通道程序结束后向CPU发中断请求。

CPU执行程序和通道执行通道程序的时间关系

通道流量分析

通道流量:

  • 一个通道在数据传送期间,单位时间内能够传送的数据量。所用单位一般为B/s
  • 又称为通道吞吐率、通道数据传输率等。
  • 通道最大流量:一个通道在满负荷工作状态下的流量。

参数定义:

  • \(T_s\):设备选择时间。从通道响应设备发出的数据传送请求开始,到通道实际为这台设备传送数据所需要的时间。
  • \(T_D\):传送一个字节所用的时间。
  • \(p\):在一个通道上连接的设备台数,且这些设备同时都在工作。
  • \(n\):每台设备传送的字节数,这里假设每台设备传送的字节数都相同。
  • \(k\):数组多路通道传输的一个数据块中包含的字节数。在一般情况下,\(k < n\)。对于磁盘、磁带等磁表面存储器。通常\(k = 512\)
  • \(T\):通道完成全部数据传送工作所需要的时间。

字节多路通道

  • 数据传送过程

  • 通道每连接一台外设,只传送一个字节,然后又与另一台设备连接,并传送一个字节。

  • \(p\)台设备每台传送\(n\)个数据总共所需的时间内\(T_{BYTE} = (T_S + T_D) \times p \times n\)

  • 最大流量

    \[f_{MAX-BYTE} = \frac{pn}{(T_S + T_D)pn} = \frac{1}{T_S + T_D} \]

  • 实际流量是连接在这个通道上的所有设备的数据传输率之和:\(f_{BYTE} = \sum\limits_{i = 1}^p f_i\)

    • \(f_i\):表示第\(i\)台设备的实际数据传输率。

选择通道

  • 在一段时间内只能单独为一台高速外设服务,当这台设备的数据传送工作全部完成后,通道才能为另一台设备服务。

  • 工作过程:

    其中:\(D_i\)表示通道正在为第\(i\)台设备服务,\(T_{D1} = T_{D2} = ... = T_{Dn} = T_D\)

  • \(p\)台设备每台传送\(n\)个数据总共所需的时间:\(T_{SELECT} = (\frac{T_s}{n} + T_D) \times p \times n\)

  • 最大流量:

    \[f_{MAX-SELECT} = \frac{pn}{(\frac{T_s}{n} + T_D) pn} = \frac{1}{\frac{T_s}{n} + T_D} \]

数组多路通道

  • 工作过程:

  • \(p\)台设备每台传送\(n\)个数据总共所需的时间为:\(T_{BLOCK} = (\frac{T_s}{k} + T_D) \times p \times n\)

  • 最大流量

    \[f_{MAX-BLOCK} = \frac{pn}{(\frac{T_s}{n} + T_D) pn} = \frac{1}{\frac{T_s}{n} + T_D} \]

  • 选择通道和数组多路通道的实际流量就是连接在这个通道上的所有设备中数据流量最大的那一个。

    \[f_{BLOCK} \leq \mathop{max}\limits_{i = 1}^{p}f_i\\ f_{SELECT} \leq \mathop{max}\limits_{i = 1}^{p}f_i \]

  • 各种通道的实际流量应该不大于通道的最大流量

    \[f_{BYTE} \leq f_{MAX-BYTE}\\ f_{BLOCK} \leq f_{MAX-BLOCK}\\ f_{SELECT} \leq f_{MAX-SELECT}\\ \]

    • 两边的差值越小,通道的利用率就越高。
    • 当两边相等时,通道处于满负荷工作状态。

IO与操作系统

  • 操作系统的作用之一是在多进程之间进行进程保护,这种保护包括存储器访问和IO操作两个方面。
  • IO操作主要是在外设和存储器之间进行,所以操作系统必须保证这些IO操作的安全性。

DMA和虚拟存储器

DMA是使用虚拟地址还是物理地址?

使用物理地址进行DMA传输,存在以下两个问题:

  • 对于超过一页的数据缓冲区,由于缓冲区使用的页面在物理存储器中不一定是连续的,所以传输可能会发生问题。
  • 如果DMA正在存储器和缓冲区之间传输数据时,操作系统从存储器中移出(或重定位)一些页面,那么,DMA将会在存储器中错误的物理页面上进行数据传输。

解决上述问题的方法:

  • 使操作系统在IO的传输过程中确保DMA设备所访问的页面都位于物理存储器中,这些页面被称为是钉在了主存中。
  • 虚拟DMA技术:
    • 允许DMA设备直接使用虚拟地址,并在DMA期间由硬件将虚拟地址转换为物理地址。
    • 在采用虚拟DMA的情况下,如果进程在内存中被移动,操作系统应该能够及时地修改相应的DMA地址表。
posted @ 2022-04-29 17:10  cherish-lgb  阅读(306)  评论(0编辑  收藏  举报