内存映射 IO - 它是如何完成的?

2024-02-29

我已经了解了端口映射 IO 和内存映射 IO 之间的区别,但我无法弄清楚内存映射 Io 在现代操作系统(windows 或 linux)中是如何实现的

我所知道的是,物理内存的一部分被保留用于与硬件通信,并且有一个 MMIO 单元负责处理总线通信和其他与内存相关的内容

驱动程序如何与底层硬件通信?驱动程序会使用哪些功能?与视频卡通信的地址是固定的还是在使用它们之前有某种“协议”?

我还是比较困惑


你的问题中的以下说法是错误的:

What I know is that a part of the physical memory is reserved to communicate with the hardware

物理内存的一部分是not保留用于与硬件通信。身体的一部分地址空间,物理内存和内存映射IO所映射到的,是。这种内存布局是永久性的,但用户程序无法直接看到它 - 相反,它们会遇到自己的内存布局虚拟地址空间内核可以决定将物理内存和 IO 范围映射到任意位置。

您可能想阅读以下文章,我相信这些文章包含了您大部分问题的答案:

  • http://duartes.org/gustavo/blog/post/motherboard-chipsets-memory-map http://duartes.org/gustavo/blog/post/motherboard-chipsets-memory-map
  • http://duartes.org/gustavo/blog/post/memory-translation-and-segmentation http://duartes.org/gustavo/blog/post/memory-translation-and-segmentation
  • http://duartes.org/gustavo/blog/post/how-the-kernel-manages-your-memory http://duartes.org/gustavo/blog/post/how-the-kernel-manages-your-memory
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

内存映射 IO - 它是如何完成的? 的相关文章

  • 全局变量和静态变量存储在内存段的哪里?

    在我的链接器脚本中 起始地址和大小如下 code start 90400000 code end 90a00000 data start 90b00000 size 3MB bss start 91200000 size 1MB 但是当我声
  • 缓冲区溢出(与)缓冲区溢出(与)堆栈溢出[重复]

    这个问题在这里已经有答案了 可能的重复 堆栈溢出和缓冲区溢出有什么区别 https stackoverflow com questions 1120575 what is the difference between a stack ove
  • 转储 $mft 文件的内容

    对于一些商业的我正在做的项目我需要能够读取 mft 文件中存储的实际数据 我找到了一个gpl lib http www codeproject com KB files NTFSParseLib aspx artkw ntfs这可能会有所帮
  • 从 Java 访问文件名中带有空格的文件

    我想从java程序访问文件名中有空格的目录中的文件 但它不访问文件 场景是我在文件中有文件名 iread 从该文件中读取文件名 但无法在 java 中打开带有空格的文件 我们使用 File exist 函数来检查文件是否存在 但它返回 fa
  • 如何编写需要内核源头文件的 BitBake 驱动程序配方?

    介绍 我有一个do install我为驱动程序编写的 BitBake 配方中的任务 我在其中执行自定义install脚本 任务失败 因为安装脚本无法在其中找到内核源头文件
  • 如何在 Linux 内核空间使用 ioctl()?

    可以打电话吗ioctl来自 Linux 内核模块 谁能提供一个如何使用它的例子吗 您可以尝试拨打电话sys ioctl 如果内核是用以下命令编译的 则它会被导出CONFIG COMPAT 或者 如果您有设备驱动程序struct file o
  • 用户空间栈和堆的内存布局

    最近在研究OS 网上有一张图 展示了用户空间和内核空间的内存布局 以及栈 堆等的布局 在这个图中我看到栈位于用户空间的最高内存地址 高于堆 数据段等 为了检查这一点 我在调试视图下使用了 vs2012 中的内存观察器窗口 这是我的代码 in
  • 如何获取uinput创建的设备的名称(路径)

    我已经成功设置了一个小程序来创建uinput questions tagged uinput我计划使用它来自动测试接收键盘输入事件的应用程序 我已关注both http thiemonge org getting started with
  • 每个进程是否都存在内核堆栈?

    每个用户空间进程是否都存在一个内核堆栈和一个用户空间堆栈 如果两个堆栈都存在 那么每个用户空间进程应该有 2 个堆栈指针 对吗 在 Linux 中 每个任务 用户空间或内核线程 都有一个 8kb 或 4kb 的内核堆栈 具体取决于内核配置
  • 为什么x86分页没有特权环的概念?

    早在 1982 年 当 Intel 发布 80286 时 他们在分段方案中添加了 4 个特权级别 环 0 3 由全局描述符表 GDT 和局部描述符表 LDT 中的 2 位指定 在 80386 处理器中 Intel 添加了分页功能 但令人惊讶
  • 尝试映射大页面 (1GB) 时 mmap 失败

    我做了什么 使用 root 启用大页 我的系统支持 1MB 大页 echo 20 gt proc sys vm nr hugepages 将大页文件系统挂载到 mnt hugepages mount t hugetlbfs nodev mn
  • 我在哪里可以学习如何使 C++ 程序与操作系统 (Linux) 交互

    我是一个 C 初学者 我想创建与操作系统交互的小程序 使用 Kubuntu Linux 到目前为止 我还没有找到任何教程或手册来让 C 与操作系统交互 在 PHP 中 我可以使用命令 exec 或反引号运算符来启动通常在控制台中执行的命令
  • Xenomai 中的周期性线程实时失败

    我正在创建一个周期性线程 它在模拟输出上输出方波信号 我正在使用 Xenomai API 中的 Posix Skin 和 Analogy 我使用示波器测试了代码的实时性能 并查看了方波信号 频率为 1kHz 的延迟 我应该实现 250us
  • 确定分区属于什么文件系统

    操作系统如何知道分区正在使用什么文件系统 换句话说 FAT16 32 NTFS ext2 3等如何区分 如果您在 Windows 上使用 Win32 API 则可以调用 GetVolumeInformation http msdn micr
  • Linux、ARM:为什么仅当启动时存在 I2C GPIO 扩展器时才创建 gpiochip

    在 imx6sx 硬件平台 NXP 嵌入式 ARM 上使用 Linux 3 14 52 问题是设备树中指定的 PCF8575 I2C GPIO 扩展器不会实例化为 sys class gpio 结构中的设备 除非它们在内核启动期间存在 这些
  • CPU寄存器和多任务处理

    我目前正在学习汇编 我很困惑 CPU 寄存器如何与多任务一起工作 所以在多任务系统中 CPU可以随时暂停某个程序的执行并运行另一个程序 那么在这一步中寄存器值是如何保存的呢 寄存器是压入堆栈还是以其他方式 CPU 寄存器如何与多任务一起工作
  • 怎样才能使 Windows 成为一个开箱即用的 POSIX 兼容操作系统?

    这个问题的动机是我的一个牵强的梦想 即 nix 平台上可用的许多优秀软件可以轻松移植到 Windows 微软最近对开源和开放性采取了不同的方法 所以我真的很想知道如果微软有这样的倾向 这样的事情会有多可行 我很好奇的一些更具体的事情是 是否
  • 劫持系统调用

    我正在编写一个内核模块 我需要劫持 包装一些系统调用 我正在暴力破解 sys call table 地址 并使用 cr0 来禁用 启用页面保护 到目前为止一切顺利 一旦完成 我将公开整个代码 因此如果有人愿意 我可以更新这个问题 无论如何
  • 同步 I/O 是否会使线程繁忙?

    假设我正在同步 I O 套接字上执行 I O 该套接字已准备好read or write手术 这意味着调用线程不会在操作上被阻塞 无论非阻塞 SOCK NONBLOCK 套接字的阻塞性质 但以下事情我不清楚 实际转移何时发生 当套接字标记为
  • 在 Mac OS X 上构建 Linux 内核

    我正在做一个修改Linux内核的项目 我有一台桌面 Linux 机器 在上面构建内核没有问题 不过 我要去旅行 我想在途中工作 我只有一台 MacBook 当我尝试构建 Linux 内核时 它抱怨说elf h was not found 我

随机推荐

  • 将视频字幕与文本转语音同步

    我尝试创建一个文本视频 其中的文本通过文本转语音进行叙述 为了创建视频文件 我使用VideoFileWriter of Aforge Net如下 VideoWriter new VideoFileWriter VideoWriter Ope
  • R 中通过列值的排列进行聚合

    背景 我正在处理出发地 目的地数据 我想计算每对城市之间的比例流量 但是 我发现很难按每对城市聚合数据 因为这些城市对涉及列条目的排列 我可以使用大量 for 循环和条件通过暴力来完成此操作 但这需要很长时间才能计算 具体来说给定以下形式的
  • 在 React-Redux 中实时重新排序列表的最佳方法?

    I m currently build an app that have a realtime list the view of list as bellow picture 当触发以下操作之一时 此列表将实时更新 有消息更新 update
  • 如何以角反应形式保存价值?

    当用户导航到不同的组件 例如隐私策略 并返回表单时 我希望在角度表单输入字段中保留值 当用户从隐私政策返回到表单时 他应该看到之前输入的数据 单击 保存 按钮后如何保留数据 当用户单击 保存 按钮时 我们调用下面的方法 它会删除旧密钥并将新
  • 计算移动平均/滚动函数的快速方法,允许自定义权重

    一个可以用TTR SMA or TTR EMA 但这些不允许自定义权重 我想出的一种解决方案是使用data table frollapply library data table x lt data table type rep 1 100
  • 从另一个程序分配特定的内存地址,并更改它的值

    最近我请假几天 想做一个用 C 处理内存地址的小程序实验 我想看到的是 当前正在运行的程序 我们称之为程序 A 创建了一个指向堆中 int 对象的指针 是否可以被另一个程序看到并被修改 程序 B 所以对于程序A 这是我的基本代码 Progr
  • Scala 的 Cake Pattern 可以在 Haskell 中实现吗?

    使用 Scala 中的许多较新的语言功能 可以实现可组合组件系统并使用 Martin Odersky 在论文中描述的所谓的 Cake 模式创建组件可扩展的组件抽象 http lampwww epfl ch odersky papers Sc
  • 使用icalendar 通过 Python 解析 iCal feed

    我正在尝试使用 python 中的icalendar lib 来解析具有多个事件的提要 summary description 等工作正常 但对于 dtstart 和 dtend 它返回我 icalendar prop vDDDTypes
  • C# MVC 4 ViewModel 不接受 null DateTime

    我在学习 C 和 mvc4 时遇到了一些麻烦 问题出现在我的应用程序的过滤器部分 我有一个 ViewModel 它获取数据库的 Listar Produtos 列表 以及一些用于搜索选项的字段 我打算做的是让过滤器接受任何字段 即使它是空值
  • 无法保存到数据库或从中检索(正确的信息)

    我使用以下命令 成功 将数据保存到数据库 try Save the new Client now Profile profile new Profile Salutation Salutation FirstName FirstName M
  • 事务隔离级别很好的解释[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 获取WM_KEYDOWN消息中lParam参数的第30位

    我需要获取随 WM KEYDOWN 消息传递的 lParam 参数的第 30 位 这一点如所写here http msdn microsoft com en us library ms646280 28v vs 85 29 aspx让我知道
  • gnuplot 中的文件名完成未完成边界

    我使用 gnuplot 很长时间了 我总觉得有一个问题是它没有关闭 在选项卡上完成文件名 例如 gnuplot gt p fo
  • IllegalStateException 编译 Clojure-Contrib

    我正在尝试使用 Maven 编译我自己的 clojure contrib 版本 但出现以下异常 Exception in thread main java lang IllegalStateException Can t dynamical
  • iOS 6 像消息一样共享,而不是像照片那样共享(UIActivityViewController 和 UIDocumentInteractionController)

    在 iOS 6 中 点击照片应用中的操作按钮会显示标准的 UIActivityViewController 在消息中执行相同的操作会提供一组不同的选项 在我看来 它就像使用 UIDocumentInteractionController a
  • 内存映射 - 部分基于磁盘的算法

    对于可溢出数据结构 即队列 是否有任何好的资源或书籍 当存储大型对象时 它可能会填满所有内存 但是如果您可以将该队列结构中最常用的项目保留在内存中 并将其余项目保留在磁盘上 有点像分页 同样 这个问题也适用于其他结构 例如链表 数组 哈希表
  • Matplotlib:具有从主轴映射的值的辅助轴

    I have a graph showing x4 vs y y 是其他变量的对数 例如 q 即 y log q q 的值是外行人在阅读该图时会理解的值 我想在图表的右侧设置一个辅助轴 其中线条与左侧轴处于相同的垂直位置 但标签被等效的 q
  • Unix 纪元时间何时从 1971 年修改为当前的 1970 年值?

    根据第一版Unix 程序员手册 http cm bell labs com cm cs who dmr pdfs man22 pdf Unix 时间定义为 自 1971 年 1 月 1 日 00 00 00 以来的时间 以六十分之一秒为单位
  • 如何在R中从串口读取数据

    我想绘制来自串行端口的实时数据 我认为 R 将是完成这项工作的好工具 我在尝试从串行端口 COM4 读取数据时遇到了困难 我已经验证数据是通过 terra term 传入的 并在尝试 R 之前关闭会话 但我似乎无法在 R 中获取任何内容 我
  • 内存映射 IO - 它是如何完成的?

    我已经了解了端口映射 IO 和内存映射 IO 之间的区别 但我无法弄清楚内存映射 Io 在现代操作系统 windows 或 linux 中是如何实现的 我所知道的是 物理内存的一部分被保留用于与硬件通信 并且有一个 MMIO 单元负责处理总