- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我可以使用 I/O 端口(asm:in, out
指令)在现代 x86_64 CPU 上通过 PCI Express 传输数据吗,或者我只能将 BAR 用于 MMIO(内存映射 I/O)和 DMA(直接内存访问到内存映射PCI-E 设备的区域)?
最佳答案
基于 PCI 的总线,包括 PCI Express,支持三种不同的地址空间:内存地址空间、I/O 地址空间和配置地址空间。在 x86 PC 上,包括那些使用 x86_64 CPU 的 PC,内存地址空间与 CPU 的物理地址空间 1:1(或多或少)映射。 I/O 地址空间与 CPU 的 I/O 地址空间 1:1 映射。配置地址空间映射到 BIOS 在引导时选择的物理地址空间中的固定位置。
这意味着 x86 IN/OUT 指令可以访问 PCI Express 设备,但前提是设备实际分配了部分 I/O 地址空间。一般来说,唯一能做到的设备是那些向后兼容 ISA 卡的设备。例如,PCI Express 串行卡将通过 I/O 空间提供与 8250 UART 兼容的接口(interface),以便它可以与标准串行端口驱动程序一起使用。如果它使用内存映射 I/O,则设备将需要自己的自定义驱动程序。
其他仍然使用 I/O 空间的 PCE Express 设备包括现代设备,如视频卡(用于 VGA 兼容性)和 SATA 接口(interface)(用于 IDE 兼容性)。任何不需要遗留支持的新事物都将专门使用内存映射 I/O。除了使用 I/O 地址空间的向后兼容性之外,没有其他优势。
我还应该指出,您对 BAR 的使用是不正确的。操作系统(或 BIOS/固件)使用 BAR(基地址寄存器)为设备分配内存区域和/或 I/O 空间。它们存在于配置地址空间中,不能用于传输数据。例如,PCI Express 串行卡将有一个 BAR,它确定其 8450 兼容寄存器映射到 I/O 空间的位置。操作系统会将它们映射到任何其他设备都不使用的位置。
虽然在 PC 上,操作系统会使用内存映射 I/O 来读取和写入 BAR,但驱动程序不会。为了传输数据,驱动程序将访问已通过 BAR 分配给设备的 PCI 内存区域或 I/O 空间。这些区域将包含直接用于传输数据的寄存器、用于设置 DMA 进行传输或映射到保存数据的设备上的 RAM 的寄存器。
(我还应该添加使用设备的部分 PCI 配置空间作为设备特定寄存器来执行传输、配置或其他任何操作的可能性。假设的非向后兼容 PCI Express 串行卡可能根本不会定义任何 BAR,而是映射它的 UART 在其配置空间中注册。)
关于assembly - 我可以使用 I/O 端口吗(asm : `in, out` ) to transfer data via PCI Express on modern x86_64 CPU?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19883260/
I made an example , 我直接从 jQuery website 复制了它然而,它不会转移.. HTML: BLAHHHH
所以我对名字有一些误解STATE TRANSFER在 REPRESENTATIONAL STATE TRANSFER. 是 state transfer意味着传输当前时间实例中服务器中存在的资源的表示
我的代码将文件从远程服务器下载到我们的服务器。 通常,一个文件最多需要一分钟左右的时间才能完成下载。但有时下载时间会超过 5 分钟。 如果当前下载时间超过 5 分钟,是否可以重新开始下载? Tamir
Representational State Transfer中的State Transfer是指什么? 找到了一些关于这个的解释(例如 here )但我还是不明白。例如文章中说 The repres
在阅读 C# 时,我遇到了“数据传输类型”和“数据传输对象”这两个术语。这显示在匿名类型周围,其中动态创建类型以保存结果,例如来自 LINQ。这两个术语指的是同一件事吗? 谢谢, 斯科特 最佳答案 我
以下代码: public string add_button_tooltip_markup { get { return add_button.get_tooltip_markup (); }
您可以在下面看到外部测试人员的测试已关闭: 内部测试相同: 但是当我转移应用程序时,不满足其中一个条件: 为什么? 最佳答案 我遇到了完全相同的问题,通过如上所述从 TestFlight 中删除所有
我对 Java 和 REST/REST 很陌生。我正在尝试创建一个设置了“Transfer-Encoding: chunked”的 POST 请求(通过 header ),但出现异常“org.apac
我是 mysql 新手,想知道我在代码中会怎么说。如果 Narrive = "transfer"则将 AccountID 更改为 2001 请有人给我一步一步的说明,并请解释一下我会将这段代码放在哪里
我有一个对象是数据库查询的结果,看起来像这样(var_dump 输出): object(stdClass)#17 (6) { ["id"]=> string(1) "1" ["title"
使用方法 Server.Transfer("default.aspx")以获得更好的在网站内导航的性能。当我使用它时,它不会更改地址栏中的 url。如何通过 server.transfer 获取新 u
我正在使用 lftp 将文件从本地传输到仅允许 SFTP 访问的远程服务器。 我使用以下语法来传输文件: lftp -c "open -u $UN,$Pass sftp://$Server ; mir
使用我编写的FTP客户端,有时上传完成后,有时会从FileZilla服务器收到226 Transfer OK消息,有时我什么也收不到。并不是在收到226 Transfer OK之前客户端已断开连接,因
我的 Chrome 应用程序和一个简单的设备之间没有发生任何类型的传输,只是等待数据进入其 uart rx 线路。设备接口(interface)的端点类型为bulk,尽管我已经尝试了所有可用的传输类型
我正在通过 SFTP 和 FileZilla 传输一个非常大的 (35GB) 文件。 现在传输已完成59.7%,但我不断收到此错误,并且几个小时内该数字都没有更改。 Error: File t
经过大量研究,我仍然没有答案。 我使用 WebForm 应用程序 VS 2013。 我的代码相当简单: Server.Transfer("~/Success.aspx",true); 此后,执行 Su
抱歉,标题令人困惑;然而,描述和插图应该可以解决这个问题。 本质上,我有表 A 表示表 B 的行之间“金额”转移的实例。 我希望加入 A 和 B 以便我可以显示转帐的详细信息: ===========
我正在使用 iOS 版 Plaid API 编写一个程序,该程序在身份验证后访问银行帐户并显示交易数据。 我需要知道是否可以在帐户之间转移资金(支票到储蓄)以及如何转移。 我知道 acorns 使用相
我需要通过同一网络在不同计算机之间复制/传输一些文件。经过一些阅读和搜索后,我认为尝试 Java 的 jsch 可能是一个不错的选择。令人痛苦的事实是,可能没有针对 jsch 的好的文档。但据我所知,
我正在使用 XMLHttpRequest 读取 json 文件,发现“通过网络传输”明显大于资源大小。 xmlhttp.open("GET", "resources.json", true); 而其他
我是一名优秀的程序员,十分优秀!