Android 如何支持多种存储连接?

Android 如何支持多种存储连接?

我不确定这是否发生在软件层面而不是硬件层面,但由于我正在研究这项技术以将其融入硬件解决方案,所以我决定先在这里询问。

因此,一般的 Android 设备都有内部存储。您可以使用该存储来保存图片、电影和文档。但是,它允许您插入 USB 连接来访问该存储,因此一条存储总线有两个 R/W。这是怎么可能的?

答案1

任何操作系统处理来自多个来源的多个读/写请求的方式都完全相同......调度程序。

Android 的底层操作系统是 Linux。这确实属于超级用户。

https://forum.xda-developers.com/showthread.php?t=1631894

I/O 调度程序

问:“I/O 调度程序有什么用途?”答:尽量减少硬盘寻道延迟。优先处理来自进程的 I/O 请求。为正在运行的进程分配磁盘带宽。保证在截止日期之前满足某些请求。

因此,最简单的形式是:内核使用 I/O 调度程序控制磁盘访问。

问:“每个 I/O 调度程序都试图平衡哪些目标?”答:公平性(让每个进程都有其对磁盘的访问权限)性能(尝试首先处理靠近当前磁盘头位置的请求,因为在那里寻道速度最快)实时性(保证在给定时间内处理请求)

问:“每个 I/O 调度程序的描述、优点和缺点是什么?”答:“

1)Noop

将所有传入的 I/O 请求插入到先进先出队列并实现请求合并。最适合用于不依赖机械运动来访问数据的存储设备(是的,比如我们的闪存驱动器)。这里的优势在于,与普通硬盘不同,闪存驱动器不需要重新排序多个 I/O 请求。

优点:以最少的 CPU 周期处理 I/O 请求。(电池友好?)最适合闪存驱动器,因为没有寻道损失。数据库系统吞吐量良好。缺点:使用的 CPU 周期数的减少与性能下降成正比。

2)截止日期

目标是尽量减少 I/O 延迟或请求不足。通过轮询策略实现相同目的,以在多个 I/O 请求之间实现公平。积极使用五个队列来重新排序传入的请求。

优点:几乎是实时调度程序。擅长减少任何给定单个 I/O 的延迟。数据库访问和查询的最佳调度程序。进程的带宽要求 - 它需要多少百分比的 CPU,很容易计算。像 noop 一样,是固态/闪存驱动器的良好调度程序。缺点:当系统过载时,可能错过截止时间的进程集在很大程度上是不可预测的。

3)CFQ

完全公平队列调度程序维护一个可扩展的每进程 I/O 队列,并尝试在所有 I/O 请求之间平均分配可用的 I/O 带宽。每个进程队列都包含来自进程的同步请求。为每个队列分配的时间片取决于“父”进程的优先级。CFQ V2 有一些修复,解决了进程的 I/O 匮乏和一些小的向后搜索问题,希望能够提高响应能力。

优点:被认为可以提供均衡的 I/O 性能。最容易调整。在多处理器系统上表现出色。在截止日期后具有最佳的数据库系统性能。缺点:一些用户报告使用 CFQ 完成媒体扫描需要最长时间。这可能是因为在启动期间带宽均匀分配给所有 I/O 操作,因此媒体扫描没有任何特殊优先级。由于争夺磁盘的任务数量,抖动(最坏情况延迟)有时会很高。

4)BFQ

与 CFQ 分配时间片不同,BFQ 分配预算。磁盘被授予活动进程,直到其预算(扇区数)到期。BFQ 为非读取任务分配高预算。分配给进程的预算随其行为而变化。

优点:被认为非常适合 USB 数据传输速率。被认为是用于高清视频录制和视频流的最佳调度程序。(因为与 CFQ 和其他调度程序相比抖动较少)被认为是一种准确的 I/O 调度程序。在大多数工作负载下,吞吐量比 CFQ 高出约 30%。缺点:不是用于基准测试的最佳调度程序。分配给进程的预算越高,就越会影响交互性并增加延迟。

5)SIO

简单 I/O 调度程序旨在保持最低开销以实现低延迟来处理 I/O 请求。没有优先级队列概念,只有基本合并。Sio 是 noop 和 deadline 的混合体。不对请求进行重新排序或排序。

优点:简单,非常可靠。最大限度地减少了请求不足。缺点:与其他调度程序相比,闪存驱动器上的随机读取速度较慢。闪存驱动器上的顺序读取速度也不太好。

6)V(右)

与其他调度程序不同,同步和异步请求不会被分开处理,而是会设定一个公平期限。下一个要处理的请求取决于它与上一个请求的距离。

优点:可能最适合基准测试,因为 VR 在其“形式”的巅峰时期表现最佳。缺点:性能波动有时会导致性能低于平均水平。最不可靠/最不稳定。

相关内容